<?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>225791</bug_id>
          
          <creation_ts>2021-05-13 16:54:00 -0700</creation_ts>
          <short_desc>Modernize / Optimize SQLiteStatement creation and preparation</short_desc>
          <delta_ts>2021-05-16 11:27:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>225855</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>galpeter</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>sam</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1759904</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 16:54:00 -0700</bug_when>
    <thetext>Modernize / Optimize SQLiteStatement creation and preparation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759924</commentid>
    <comment_count>1</comment_count>
      <attachid>428583</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 17:22:10 -0700</bug_when>
    <thetext>Created attachment 428583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759925</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-05-13 17:22:51 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759933</commentid>
    <comment_count>3</comment_count>
      <attachid>428585</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 17:46:35 -0700</bug_when>
    <thetext>Created attachment 428585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759941</commentid>
    <comment_count>4</comment_count>
      <attachid>428587</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 18:08:08 -0700</bug_when>
    <thetext>Created attachment 428587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759942</commentid>
    <comment_count>5</comment_count>
      <attachid>428588</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 18:11:05 -0700</bug_when>
    <thetext>Created attachment 428588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759962</commentid>
    <comment_count>6</comment_count>
      <attachid>428592</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 18:50:36 -0700</bug_when>
    <thetext>Created attachment 428592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759978</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 19:59:12 -0700</bug_when>
    <thetext>This is based on a proposal from Kimmo on one of my other bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759984</commentid>
    <comment_count>8</comment_count>
      <attachid>428592</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-13 20:28:33 -0700</bug_when>
    <thetext>Comment on attachment 428592
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        - The SQLiteStatement constructor is now private so that we never have a
&gt; +          SQLiteStatement that has not been &quot;prepared&quot;. Only the SQLiteDatabase
&gt; +          can now construct SQLiteStatement objects. We already needed to pass
&gt; +          a SQLiteDatabase reference when constructing the SQLiteStatement anyway.

Why not just add a static SQLiteStatement::createAndPrepare()? It seems more straightforward to have a public create function in the class for use and more close to our pattern. Also with this change, SQLiteStatement class still refers to SQLiteDatabase and the SQLiteDatabase is not referring to or tracking the statements it creates so the benefits are not obvious.

&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:59
&gt; +    if (m_statement)

Nit: if is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759988</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 20:38:58 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #8)
&gt; Comment on attachment 428592 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428592&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        - The SQLiteStatement constructor is now private so that we never have a
&gt; &gt; +          SQLiteStatement that has not been &quot;prepared&quot;. Only the SQLiteDatabase
&gt; &gt; +          can now construct SQLiteStatement objects. We already needed to pass
&gt; &gt; +          a SQLiteDatabase reference when constructing the SQLiteStatement anyway.
&gt; 
&gt; Why not just add a static SQLiteStatement::createAndPrepare()? It seems more
&gt; straightforward to have a public create function in the class for use and
&gt; more close to our pattern. Also with this change, SQLiteStatement class
&gt; still refers to SQLiteDatabase and the SQLiteDatabase is not referring to or
&gt; tracking the statements it creates so the benefits are not obvious.
&gt; 
&gt; &gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:59
&gt; &gt; +    if (m_statement)
&gt; 
&gt; Nit: if is not needed.

It is needed, see the move constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759989</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 20:47:57 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #8)
&gt; Comment on attachment 428592 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428592&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        - The SQLiteStatement constructor is now private so that we never have a
&gt; &gt; +          SQLiteStatement that has not been &quot;prepared&quot;. Only the SQLiteDatabase
&gt; &gt; +          can now construct SQLiteStatement objects. We already needed to pass
&gt; &gt; +          a SQLiteDatabase reference when constructing the SQLiteStatement anyway.
&gt; 
&gt; Why not just add a static SQLiteStatement::createAndPrepare()? It seems more
&gt; straightforward to have a public create function in the class for use and
&gt; more close to our pattern. Also with this change, SQLiteStatement class
&gt; still refers to SQLiteDatabase and the SQLiteDatabase is not referring to or
&gt; tracking the statements it creates so the benefits are not obvious.

Why is SQLiteStatement::createAndPrepare(db, query) better than db.prepareStatement(query)?

I don&apos;t feel super strongly but the reasons I went this way:
- We need a database to construct a statement anyway
- Having a SQLiteStatement::createAndPrepare(db, query) return a stack object is a bit uncommon and may be confusing. Our &quot;create&quot; functions usually return heap-allocated objects.
- This is what Kimmo suggested

Note that I am not convinced that SQLiteStatement needs or should have a database data member but this patch is large enough as it is. We could just as well have the SQLiteStatement member functions that require a database take the database as parameter (few need it and the ones that need it, it is mostly to get the last error). It is fairly common for SQLiteStatement objects to be cached nowadays and this would reduce the size of SQLiteStatement objects. Callers have to keep the SQLiteDatabase alive anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759991</commentid>
    <comment_count>11</comment_count>
      <attachid>428592</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 20:49:20 -0700</bug_when>
    <thetext>Comment on attachment 428592
Patch

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

&gt;&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:59
&gt;&gt; +    if (m_statement)
&gt; 
&gt; Nit: if is not needed.

Oh, the doc says &quot;Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.&quot;. I&apos;ll drop the if check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759993</commentid>
    <comment_count>12</comment_count>
      <attachid>428596</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 20:50:23 -0700</bug_when>
    <thetext>Created attachment 428596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760016</commentid>
    <comment_count>13</comment_count>
      <attachid>428604</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-13 23:08:10 -0700</bug_when>
    <thetext>Created attachment 428604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760064</commentid>
    <comment_count>14</comment_count>
      <attachid>428620</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 07:23:18 -0700</bug_when>
    <thetext>Created attachment 428620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760082</commentid>
    <comment_count>15</comment_count>
      <attachid>428620</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-05-14 08:33:59 -0700</bug_when>
    <thetext>Comment on attachment 428620
Patch

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

&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:705
&gt; +    return UniqueRef&lt;SQLiteStatement&gt;(*new SQLiteStatement(*this, sqlStatement.value()));

Why doesn&apos;t makeUniqueRef work here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760086</commentid>
    <comment_count>16</comment_count>
      <attachid>428620</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 08:35:51 -0700</bug_when>
    <thetext>Comment on attachment 428620
Patch

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

&gt; Source/WTF/ChangeLog:12
&gt; +        The reason I needed this is that I want to prevent call sites from allocating SQLiteStatement

@Alex: I explained it in this ChangeLog. Let me know if it needs clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760087</commentid>
    <comment_count>17</comment_count>
      <attachid>428620</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-05-14 08:37:26 -0700</bug_when>
    <thetext>Comment on attachment 428620
Patch

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

&gt;&gt; Source/WTF/ChangeLog:12
&gt;&gt; +        The reason I needed this is that I want to prevent call sites from allocating SQLiteStatement
&gt; 
&gt; @Alex: I explained it in this ChangeLog. Let me know if it needs clarification.

Oh, the old need-to-friend-unique-ptr-or-have-public-constructor trick.  Bummer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760093</commentid>
    <comment_count>18</comment_count>
      <attachid>428620</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 08:47:43 -0700</bug_when>
    <thetext>Comment on attachment 428620
Patch

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

&gt; Source/WebCore/platform/sql/SQLiteDatabase.h:80
&gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(const String&amp; query);
&gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(ASCIILiteral query);
&gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(const String&amp; query);
&gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(ASCIILiteral query);

It would be cool if we could just have the ASCIILiteral one, as almost all uses of constructed strings for these are usually a mistake. Any idea how close we are to that ideal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760094</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 08:50:14 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #18)
&gt; Comment on attachment 428620 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428620&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/sql/SQLiteDatabase.h:80
&gt; &gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(const String&amp; query);
&gt; &gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(ASCIILiteral query);
&gt; &gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(const String&amp; query);
&gt; &gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(ASCIILiteral query);
&gt; 
&gt; It would be cool if we could just have the ASCIILiteral one, as almost all
&gt; uses of constructed strings for these are usually a mistake. Any idea how
&gt; close we are to that ideal?

I agree but the patch is already pretty big and there are still quite a few usages of String (which you can see in the patch since I had to modify ALL call sites). It is not uncommon for call sites to build the statements on the fly using makeString(). It may be possible to switch to an ASCIILiteral and then use binding but I&apos;d need to look more into it to be sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760105</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 09:12:43 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #19)
&gt; (In reply to Sam Weinig from comment #18)
&gt; &gt; Comment on attachment 428620 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=428620&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/sql/SQLiteDatabase.h:80
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(const String&amp; query);
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(ASCIILiteral query);
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(const String&amp; query);
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(ASCIILiteral query);
&gt; &gt; 
&gt; &gt; It would be cool if we could just have the ASCIILiteral one, as almost all
&gt; &gt; uses of constructed strings for these are usually a mistake. Any idea how
&gt; &gt; close we are to that ideal?
&gt; 
&gt; I agree but the patch is already pretty big and there are still quite a few
&gt; usages of String (which you can see in the patch since I had to modify ALL
&gt; call sites). It is not uncommon for call sites to build the statements on
&gt; the fly using makeString(). It may be possible to switch to an ASCIILiteral
&gt; and then use binding but I&apos;d need to look more into it to be sure.

Also SQLTransaction.executeSQL(stringQuery) in WebSQL seems unavoidable as long as we support WebSQL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760111</commentid>
    <comment_count>21</comment_count>
      <attachid>428628</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 09:38:43 -0700</bug_when>
    <thetext>Created attachment 428628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760112</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 09:39:09 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #21)
&gt; Created attachment 428628 [details]
&gt; Patch

Rebaselined due to conflict and use a little more ASCIILiterals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760114</commentid>
    <comment_count>23</comment_count>
      <attachid>428630</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 09:46:16 -0700</bug_when>
    <thetext>Created attachment 428630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760118</commentid>
    <comment_count>24</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 09:53:51 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #19)
&gt; (In reply to Sam Weinig from comment #18)
&gt; &gt; Comment on attachment 428620 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=428620&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/sql/SQLiteDatabase.h:80
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(const String&amp; query);
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;SQLiteStatement, int&gt; prepareStatement(ASCIILiteral query);
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(const String&amp; query);
&gt; &gt; &gt; +    WEBCORE_EXPORT Expected&lt;UniqueRef&lt;SQLiteStatement&gt;, int&gt; prepareHeapStatement(ASCIILiteral query);
&gt; &gt; 
&gt; &gt; It would be cool if we could just have the ASCIILiteral one, as almost all
&gt; &gt; uses of constructed strings for these are usually a mistake. Any idea how
&gt; &gt; close we are to that ideal?
&gt; 
&gt; I agree but the patch is already pretty big and there are still quite a few
&gt; usages of String (which you can see in the patch since I had to modify ALL
&gt; call sites). It is not uncommon for call sites to build the statements on
&gt; the fly using makeString(). It may be possible to switch to an ASCIILiteral
&gt; and then use binding but I&apos;d need to look more into it to be sure.

Totally fair. Was much more just asking because I was curious than stating it should be done now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760122</commentid>
    <comment_count>25</comment_count>
      <attachid>428633</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 10:06:11 -0700</bug_when>
    <thetext>Created attachment 428633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760143</commentid>
    <comment_count>26</comment_count>
      <attachid>428641</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 10:55:00 -0700</bug_when>
    <thetext>Created attachment 428641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760144</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 10:55:12 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #26)
&gt; Created attachment 428641 [details]
&gt; Patch

WinCairo build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760252</commentid>
    <comment_count>28</comment_count>
      <attachid>428672</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 15:26:04 -0700</bug_when>
    <thetext>Created attachment 428672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760253</commentid>
    <comment_count>29</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-14 15:26:28 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #28)
&gt; Created attachment 428672 [details]
&gt; Patch

Fix the layout test that was failing in WK1 Debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760511</commentid>
    <comment_count>30</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-15 17:45:41 -0700</bug_when>
    <thetext>Any feedback to get this patch landed would be appreciated. I understand it is big but it is not really avoidable if we change the way SQLiteTransaction objects get created. I do have to update all call sites. Call site changes are pretty mechanical though. The important bits are in SQLiteTransaction and SQLiteDatabase classes.

The patch helps us avoid a very large amount of String constructions by using ASCIILiteral for most SQL queries. It also reduces the size of SQLiteTransaction by not storing the query string anymore. It also simplifies the use of SQLiteTransaction a bit since create and prepare are no longer 2 separate steps (you now create a prepared SQLiteTransaction. If the preparation fails, you get the SQLite Error code via Expected&lt;SQLiteTransaction, int /*sqlite error code */&gt;.

I do not feel particularly about any given pattern or naming in the patch, as long as we maintain the improvements stated above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760622</commentid>
    <comment_count>31</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 09:52:18 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #20)
&gt; (In reply to Chris Dumez from comment #19)
&gt; &gt; (In reply to Sam Weinig from comment #18)
&gt; &gt; &gt; Comment on attachment 428620 [details]
&gt; &gt; &gt; Patch
&gt; Also SQLTransaction.executeSQL(stringQuery) in WebSQL seems unavoidable as
&gt; long as we support WebSQL.

Sure, but once we are just down to that one, we can renamed the overload that takes a String to something scary so that people know not it probably shouldn&apos;t be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760623</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-16 09:55:14 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #31)
&gt; (In reply to Chris Dumez from comment #20)
&gt; &gt; (In reply to Chris Dumez from comment #19)
&gt; &gt; &gt; (In reply to Sam Weinig from comment #18)
&gt; &gt; &gt; &gt; Comment on attachment 428620 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; Also SQLTransaction.executeSQL(stringQuery) in WebSQL seems unavoidable as
&gt; &gt; long as we support WebSQL.
&gt; 
&gt; Sure, but once we are just down to that one, we can renamed the overload
&gt; that takes a String to something scary so that people know not it probably
&gt; shouldn&apos;t be used.

Oh, I like the idea of a rename to avoid calling the String overload by mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760624</commentid>
    <comment_count>33</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-16 09:55:27 -0700</bug_when>
    <thetext>Thanks for reviewing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760625</commentid>
    <comment_count>34</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-16 10:18:39 -0700</bug_when>
    <thetext>Committed r277571 (237799@main): &lt;https://commits.webkit.org/237799@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428672.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760626</commentid>
    <comment_count>35</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-16 10:19:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/78080269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760633</commentid>
    <comment_count>36</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-16 11:26:11 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #31)
&gt; (In reply to Chris Dumez from comment #20)
&gt; &gt; (In reply to Chris Dumez from comment #19)
&gt; &gt; &gt; (In reply to Sam Weinig from comment #18)
&gt; &gt; &gt; &gt; Comment on attachment 428620 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; Also SQLTransaction.executeSQL(stringQuery) in WebSQL seems unavoidable as
&gt; &gt; long as we support WebSQL.
&gt; 
&gt; Sure, but once we are just down to that one, we can renamed the overload
&gt; that takes a String to something scary so that people know not it probably
&gt; shouldn&apos;t be used.

By the way, I am looking at the call sites that use Strings and there are cases you cannot use binding:
1. You cannot bind PRAGMA statements apparently
2. You can bind table names.
3. You cannot bind lists of dynamic size. (e.g. WHERE &quot;foo&quot; IN (&quot; + buildList() &quot;)&quot;)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428583</attachid>
            <date>2021-05-13 17:22:10 -0700</date>
            <delta_ts>2021-05-13 18:25:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513172209.patch</filename>
            <type>text/plain</type>
            <size>267677</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3MmQ3MjVjNzQxODM3YmVhZmYyN2Zl
Nzk1ZWI3NDIyZDg3ZjdhMDYuLmRmMDZmOTY3ZGY2OWQ2YWE1OGNlNDIyMDAyNWY5ZWU1ZDcyNmNm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlu
a0NvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDZkN2Q2NTdmOWExNmUzYmRhOWUwYmU0MDQ1NGI3ZGIx
ODE4NDcxLi5lYTllZTA2MzkzZTNjNmM0Y2MwOTRhOWYxNzZiZDAzNTVkYzIxMGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNy
ZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBUaGUgU1FMaXRlU3RhdGVtZW50IGNv
bnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2UgbmV2ZXIgaGF2ZSBhCisgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVuICJwcmVwYXJlZCIuIE9ubHkgdGhl
IFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBjb25zdHJ1Y3QgU1FMaXRlU3RhdGVt
ZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBhc3MKKyAgICAgICAgICBhIFNRTGl0
ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgU1FMaXRlU3RhdGVtZW50
IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFORCBwcmVwYXJlIGEgU1FMaXRlU3Rh
dGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisgICAgICAgICAgU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEgaGVhcCBvbmUuIFRoZXNlIGZ1bmN0
aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+IHR5cGUgc28gdGhleSB3aWxsIGVp
dGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9yIGFu
IHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAgICAgIC0gVGhlIHByZXBhcmUqU3Rh
dGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcgYWxsb2NhdGlvbnMgaW4gbW9zdAor
ICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMgdGFraW5nIGluIHRoZSBxdWVyeSBh
cyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBmaW5hbGl6ZSgpIGZ1bmN0aW9uIG9u
IFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cworICAgICAgICAgIGFy
ZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0
ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlvbnMuIFRoZSBTUUxpdGVTdGF0ZW1l
bnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVtZW50CisgICAgICAgICAgc28gdXNl
cnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0ZW1lbnQgaWYgdGhleSBuZWVkIHRo
ZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBhdCBhIGNlcnRhaW4gcG9pbnQgKGUu
Zy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAgICAgIC0gRHJvcCB0aGUgcHJlcGFy
ZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1lbnQgbWVtYmVyIGZ1bmN0aW9ucyBu
b3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBhcmUgYWx3YXlzIHByZXBhcmVkLgor
ICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5IGFzIGEgU3RyaW5nIGRhdGEgbWVt
YmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAgICAgICBUaGlzIGlzIG5vIGxvbmdl
ciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUgcHJlcGFyZSBzdGVwIGFmdGVyIHRo
ZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtlcyB0aGUgU1FMaXRlU3RhdGVtZW50
IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Y3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVG
b3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpyZXNldEFuZFJlYmluZFByZUlu
ZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRW
YWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVO
YW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5v
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFu
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnF1b3RhTm9Mb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1wdHkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRp
bmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNlYXJjaENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERvbWFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZXhl
Y3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJldHVybnNB
dExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0YWJs
ZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZE51bGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVu
dURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OnZlcmlm
eVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmV4
ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmNy
ZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisKIDIwMjEtMDUtMTMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBXazIgXSBtZWRp
YS9tZWRpYS1mcmFnbWVudHMvVEMwMDUxLmh0bWwgaXMgZmxha2V5IGNyYXNoaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MjJmMTI1OWM4NjE5N2Y4YTdlZTg4NjQ3NGE0ZjMwOWQzM2VmMjEuLmVmZTRmYjZmZjUy
OGI1MDc4OWM0NWI3YWRjMGFkZDVhOWQwNmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0
ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFN0
b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKToK
KyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0
OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxldGVJY29uKToKKwog
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBy
b2Nlc3Mgc3VzcGVuc2lvbiBtYXkgYmUgZGVsYXllZCBieSB1cCB0byA1IHNlY29uZHMgYWZ0ZXIg
dGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkYXRhYmFzZSBhY3Rpdml0eQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBmYmI0MWUyNmFhMDFlMDZiMzQ4YjJmZTM5ODc5ZWFjZjM3NDBkMjdhLi40MjRiYmFk
MDk1MGIxNmYwMmVjNGVkY2Y0YTc3ZDRhNzZiZjI5NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNr
ZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IFdURjo6RmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
aXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2MGNm
ZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNmMjM3
YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVSZWYo
VCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVybiAq
bV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxj
bGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1
ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBj
bGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDogbV9y
ZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUuLmNj
ZDYzYjNkZmFiNGEzYTY5ZWFhZjkyODFkZWE2NDNlZThmZmVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2No
ZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVt
YTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAog
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM1
OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgsMTMg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiAK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2Ig
ZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVu
IGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM5
MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBp
ZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hl
bWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0Mjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
VGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNv
cmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcgKzQ1
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVj
b3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyArNTgz
LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50
TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0
YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxp
dGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVF
UyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIo
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNpb25z
IGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBkb2Vz
bid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgICAg
IC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFi
YXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFi
YXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBz
cWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUlu
Zm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVS
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJvb2wg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZShj
b25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9i
amVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZv
OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4SW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsK
LSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1h
cC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8gX1Rl
bXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgICAg
IGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAgICAg
fQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAi
U0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3JlUmVj
b3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFs
dWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5nZXQo
eyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtl
eUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZl
cik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJl
Y29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7
Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNv
bnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYgKHNx
bC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRoZSBp
bmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVz
JykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDAw
LDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVpbnQ2
NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNp
b24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9l
cyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNp
b24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwxNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9
IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBr
ZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0g
c3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5h
bWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBr
ZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBr
ZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmpl
Y3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtl
eVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDExICsx
MDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZN
b3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTEw
NTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwg
bmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJ
bmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBG
Uk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9t
IHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAg
ICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKICAg
ICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4S2V5
UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wg
bXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVuaXF1
ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0g
c3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBk
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQpOwog
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8
IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSArMTE2
MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUn
OyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3MpOwor
ICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJl
IHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7
Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJf
cyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENvbHVt
blRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRv
ZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJz
aW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQsMTAg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaW5m
by5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAgICAg
IG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVlID0g
PyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJp
bmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAoIXNx
bAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5l
d1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMTcsMTIgKzMwMjEsMTIgQEAgdm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3Jl
ZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmls
ZXM7Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0
byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJP
TSBCbG9iRmlsZXM7Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQo
c3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwu
c3RlcCgpOworICAgICAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0RPTkUpCkBAIC0zMDYxLDE0ICszMDY1LDEzIEBAIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhCiAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQog
Ci0gICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7
CisgICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQog
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAg
IGlmIChtX3NxbGl0ZURCKSB7Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURC
LCBzdGF0ZW1lbnQpOwotICAgICAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0
PHNpemVfdD4oc3FsKV0tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2Nh
Y2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAg
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3RhdGVtZW50KTsKKyAgICAgICAgaWYgKHNxbFN0YXRlbWVudCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gc3FsU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0uZ2V0KCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggYzJjZWQ4NDE5MzAw
YjVhOGM1OGE4ZTg0MDIyMmYyNTU2MTI1YjM1Yy4uZjI4OTA4Y2E1MTVlN2I5YjJmZmY4NDg4YzAw
NmQyYjBlODFiYmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVTUUxpdGVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRVcHBlcktleS5pc051bGwoKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOwogCi0gICAgbV9zdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKSwgc3FsKTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChwcmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBtX3N0YXRlbWVudCA9IHN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogCiAgICAgcmV0dXJuIGJpbmRBcmd1bWVudHMo
KTsKIH0KQEAgLTM0MSwxMiArMzQxLDEyIEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpyZXNldEFu
ZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkoKQogCiAgICAgYXV0byYgZGF0YWJh
c2UgPSBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpOwogICAg
IGlmICghbV9wcmVJbmRleFN0YXRlbWVudCkgewotICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCBidWlsZFByZUluZGV4U3Rh
dGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcmVJbmRleFN0
YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKKyAgICAgICAgaWYgKCFwcmVJbmRleFN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBwcmUgc3RhdGVt
ZW50IC0gJyVzJyIsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50ID0gcHJlSW5k
ZXhTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVJbmRleFN0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTU4OCw5ICs1
ODgsOCBAQCBTUUxpdGVJREJDdXJzb3I6OkZldGNoUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50
ZXJuYWxGZXRjaE5leHRSZWNvcmQoU1FMaXRlQ3VycwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50IHx8IG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5k
IG9iamVjdFN0b3JlSUQgPSA/OyIpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0
byBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhU
KSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAppbmRleCBhYjQ3ODI2YzgzZWJiNThiNzdiNGE2MTUyNzEzOTIxMzNjZjg0
MGU2Li5lNzRlMjhmNWI5ZTVmNzlmYzVkNWNkMGNlNzY2Y2EwZGRmMWJmNDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTEzLDE4
ICsxMTMsMTUgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
bWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHZhbHVlKTsKIAotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0
YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNCwxNyArMTMxLDE1IEBA
IHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zCiAKIHN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3Vs
dEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHN0YXRlbWVudC5lcnJvcigpLCBxdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTcxNCw4ICs3MDksOCBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gc3FsaXRlRGF0YWJhc2UoKS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CkBAIC03MjMsOCArNzE4LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFt
ZXM7CiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAobmFtZSAhPSB1bnF1YWxpZmllZEluZm9UYWJsZU5hbWUp
CiAgICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChuYW1lKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
aW5kZXggMGFkM2I0ODAyM2YxZjk2ZWFiOWJjZjRmNzcyZGU0OTMzMDdlYmY4NC4uYjdlMTdhODc0
ZDk3MGJlNmJjNWQzMTk2NzYzMWIyYmYzYTNjZDQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjM1LDE1
ICsyMzUsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2Nr
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3Jp
Z2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCkBAIC0yNTYsMTUgKzI1NiwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzRW50cnlGb3JEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0YWJhc2UuIFNldCB1cCBh
IHF1ZXJ5IHRvIGFzayBmb3IgdGhlIGRiIG9mIGludGVyZXN0OgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAotICAgIHJldHVybiBzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1c7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0
aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87
Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICgh
Y3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUg
JXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
RmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3Rz
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVu
dC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZp
bGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0g
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwor
ICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkp
OwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNR
TElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9N
IERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZE
b2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
IApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFz
ZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdp
biwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5h
bWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewot
ICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
Y2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRh
YmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGlu
IHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBp
cyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIg
Y29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQot
ICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNl
dCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBu
ZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMg
Zm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIK
KyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRl
cm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQn
cyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAg
ICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9
PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5h
bWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAg
IHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0
YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVu
dC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3
MSwxNSArNjczLDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3Rh
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luCiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBx
dW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBsCiAK
ICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2lu
ICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5l
d09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9
PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAgICBpZiAoIWVy
cm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
Ci0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
c3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRp
bCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21t
YW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBk
YXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIG9yaWdpblN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBv
cmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0
YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwot
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAg
ICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyAr
MTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Ug
JXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
OTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRh
dGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
ID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmls
ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0x
MjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZp
bGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQg
d2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3Jp
dGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9
IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsi
X3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVk
MS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAt
MTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRi
KQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlm
eSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1l
bnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHBy
ZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBj
b3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQu
YXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAi
aW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0
ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90
IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUs
IHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVt
YmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkg
bWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBp
ZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkg
eworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRT
ZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0
Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1l
bnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5j
b2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVt
blZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYjA4MDMwYzliNDFmMjcxZTdhYTMyN2MzYWU0
ZWM0ZjYzMGE3MDcyMS4uNWYwNGE3MmZjYjRjN2ExZGQ5MzkyMjAwOTM0NTFiNTM3ODgzZTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJM
JiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBu
ZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAg
ICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25z
dCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3Jh
Z2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIp
KTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICBncm91cC5z
ZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3Vw
OwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
ZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RI
YXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVy
bCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNo
ZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
aW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1l
bW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAg
IC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhl
IG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcg
VVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2Vz
dENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFu
aWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkp
KTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5n
KCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25z
dCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAg
IGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0
b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
KSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNo
ZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNl
dChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3Jk
IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBi
ZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhp
c3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3Rh
IG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVv
dGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hF
UkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhl
IHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZh
dWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJv
b2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
cXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAs
MTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2Fn
ZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmln
aW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAg
IC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8g
YSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2lu
ID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hl
R3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBD
YWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1c2FnZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4Nywy
MyArNDg3LDIzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFp
bmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAgICAgICAgICAgICAgICAgIiBX
SEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDAp
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVy
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0
aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZv
ciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9m
Q2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51
bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1h
aW5pbmdTaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVt
YWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMg
U0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRh
KCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0
KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50
KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3Rh
dGVtZW50LnZhbHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01B
IHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VE
KHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkp
ID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1p
dCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0
b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBA
IC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5
IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVz
dFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwg
bWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RV
UkwoKSkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQo
c3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAg
LTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91
cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNh
Y2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFs
bG93bGlzdCgpOwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOwor
ICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUg
b25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAg
ICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAg
ICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFs
bGJhY2tVUkxzKCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFs
bGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkws
IGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFy
ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwg
Y2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQs
MTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwg
cGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxl
U3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRh
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5n
IHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2Ug
ZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJl
LCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgx
MywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAg
ICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0Rmls
ZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsK
LSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxv
YigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwor
ICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQt
PmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2gg
d2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0Mywz
NiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhl
YWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAg
ICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRv
IHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVy
cywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywg
PywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
YXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBj
YWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2Ug
YWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICBy
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRh
SWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291
cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Cisg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVy
cyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChy
ZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxh
c3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hl
IGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/
LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMg
KD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFn
ZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVt
ZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
QEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJU
KHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRh
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
Q2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRy
eVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VU
IHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwg
cmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNl
LT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUo
KSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2
LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBB
IHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBz
aXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYg
KCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6
ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEz
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwot
ICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGlu
c2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3
ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
Q2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1
cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlv
bkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2
LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4g
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7
CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29k
ZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5O
RVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNv
dXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVz
Q29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVz
b3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMg
SU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVS
ZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAg
IGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2Fj
aGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURp
cmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0Owot
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2Fj
aGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwot
ICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7Cisg
ICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAg
ICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAt
MTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgz
KTsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAot
ICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7
CisgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
NSk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAog
ICAgICAgICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
dXJsLCByZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsx
MTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBj
YWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAg
YWxsb3dsaXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBW
ZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVS
TCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgYWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0
KGFsbG93bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxh
Zy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3Rz
IFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAg
Ci0gICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJl
c3VsdCA9IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hl
IG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVl
c3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBj
YWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBt
YW55IHJvd3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8g
TG9hZCBmYWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFj
a1VSTHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFs
bGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBzdG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cp
IAotICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZh
bGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tT
dGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkp
OwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0
YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hl
cyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRs
eSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5
IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
X3MpOworICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1l
bnQpOworICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAg
ICAgfQpAQCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hl
R3JvdXBzIik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0g
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMu
YXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxl
IChzZWxlY3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVy
bHM7CiB9CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAg
aWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZl
c3RVUkwpOworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAg
ICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNh
Y2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdI
RVJFIGNhY2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdy
b3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwot
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVt
ZW50KTsKKyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3Rh
dGVtZW50LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDEx
LDIwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBp
biBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVS
ZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0
aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAg
ICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENh
Y2hlUmVzb3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldI
RVJFIChTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURh
dGEucGF0aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAg
ICAKLSAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAo
IXNlbGVjdFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhz
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNR
TElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSBzZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgp
ID09IFNRTElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0
ZWRDYWNoZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEs
IGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgcGF0
aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOwog
ICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUgPSAwOwogICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCAyNDI1ZjgzZDcy
NjI2ZTBlNTBkZmM2YzZjYjk1MDY3ZjA2ZjU3NWY1Li42ODA4YjE0M2RkNDY5OTRkZmJhYjY4ZWZi
ODQ4ODJmOTdiNDE5YmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKQEAgLTE5Myw3ICsxOTMsOCBAQCB2b2lkIENvb2tp
ZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpZiAoaXNPbk1lbW9yeSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lv
biJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzMsMjUgKzI3NCwyNSBAQCBib29sIENvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiQ29va2ll
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3Jp
dHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFp
bnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9
IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAl
ZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGlu
dGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAg
IExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVj
aywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7Cisg
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAg
ICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiQ29va2llIGRh
dGFiYXNlIGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5k
YXRhKCkpOwpAQCAtMzg2LDIwICszODcsMTYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENv
b2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKIAog
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdFVybCB9Owog
Ci0gICAgY29uc3QgU3RyaW5nIHNxbCA9Ci0gICAgICAgICJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRv
bWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tp
ZSBXSEVSRSAiXAorICAgIGF1dG8gcHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2Vj
dXJlLCBzZXNzaW9uIEZST00gQ29va2llIFdIRVJFICJcCiAgICAgICAgICIoTk9UICgoc2Vzc2lv
biA9IDApIEFORCAoZXhwaXJlcyA8ID8pKSkiCiAgICAgICAgICJBTkQgKGh0dHBvbmx5ID0gQ09B
TEVTQ0UoTlVMTElGKD8sIC0xKSwgaHR0cG9ubHkpKSAiXAogICAgICAgICAiQU5EIChzZWN1cmUg
PSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBzZWN1cmUpKSAiXAogICAgICAgICAiQU5EIChzZXNz
aW9uID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2Vzc2lvbikpICJcCiAgICAgICAgICJBTkQg
KChkb21haW4gPSA/KSBPUiAoZG9tYWluIEdMT0IgPykpICJcCi0gICAgICAgICJPUkRFUiBCWSBs
ZW5ndGgocGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiOwotCi0gICAgYXV0byBwc3RtdCA9IG1ha2VV
bmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworICAgICAgICAiT1JERVIg
QlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIl9zKTsKICAgICBpZiAoIXBzdG10KQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcHN0bXQtPnByZXBhcmUoKTsKICAg
ICBwc3RtdC0+YmluZEludDY0KDEsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
Lm1pbGxpc2Vjb25kcygpKTsKICAgICBwc3RtdC0+YmluZEludCgyLCBodHRwT25seSA/ICpodHRw
T25seSA6IC0xKTsKICAgICBwc3RtdC0+YmluZEludCgzLCBzZWN1cmUgPyAqc2VjdXJlIDogLTEp
OwpAQCAtNDExLDkgKzQwOCw2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJE
Qjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgZWxzZQog
ICAgICAgICBwc3RtdC0+YmluZFRleHQoNiwgU3RyaW5nKCIqLiIpICsgcmVnaXN0cmFibGVEb21h
aW4uc3RyaW5nKCkpOwogCi0gICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQogICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGlsZSAocHN0bXQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CkBAIC00NTMsNyArNDQ3LDYgQEAgT3B0aW9uYWw8VmVj
dG9yPENvb2tpZT4+IENvb2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QKICAgICAgICAgY29va2llLnNlc3Npb24gPSBjb29raWVTZXNzaW9uOwogICAg
ICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwogICAgIH0KLSAgICBwc3RtdC0+
ZmluYWxpemUoKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtNDYzLDExICs0NTYsMTEg
QEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgIFZlY3Rv
cjxDb29raWU+IHJlc3VsdDsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZyBzcWwgPSAi
U0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1
cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3M7Ci0gICAgYXV0byBwc3RtdCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworCisgICAgYXV0byBwc3RtdCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBh
dGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3MpOwog
ICAgIGlmICghcHN0bXQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcHN0bXQtPnByZXBh
cmUoKTsKKwogICAgIHdoaWxlIChwc3RtdC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKICAgICAg
ICAgQ29va2llIGNvb2tpZTsKICAgICAgICAgY29va2llLm5hbWUgPSBwc3RtdC0+Z2V0Q29sdW1u
VGV4dCgwKTsKQEAgLTQ4Miw3ICs0NzUsNiBAQCBWZWN0b3I8Q29va2llPiBDb29raWVKYXJEQjo6
Z2V0QWxsQ29va2llcygpCiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gKHBzdG10LT5nZXRDb2x1
bW5JbnQoNykgPT0gMSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsK
ICAgICB9Ci0gICAgcHN0bXQtPmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNTcxLDE2ICs1NjMsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYKIAogSGFzaFNldDxT
dHJpbmc+IENvb2tpZUphckRCOjphbGxEb21haW5zKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOwotICAgIHN0YXRl
bWVudC5wcmVwYXJlKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBIYXNoU2V0PFN0cmluZz4gZG9tYWluczsKLSAgICB3
aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gZG9t
YWluID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBkb21haW4gPSBzdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIGRvbWFpbnMuYWRkKGRvbWFpbik7CiAgICAgfQot
Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIGRvbWFpbnM7CiB9CiAKQEAg
LTYzNywxMCArNjI4LDkgQEAgYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCiAK
IHZvaWQgQ29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBz
cWwpCiB7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBTUUxJVEVfT0spOwotICAgIG1fc3RhdGVtZW50
cy5hZGQoc3FsLCBXVEZNb3ZlKHN0YXRlbWVudCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQp
OworICAgIG1fc3RhdGVtZW50cy5hZGQoc3FsLCBzdGF0ZW1lbnQubW92ZVRvVW5pcXVlUHRyKCkp
OwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChj
b25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQzLDEzIEBAIFNRTGl0ZVN0YXRlbWVudCYg
Q29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogCiBib29s
IENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3Rh
dGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5lcnJvcigp
KSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9yOiAlcyIs
IHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
ICAgICBpZiAoIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0YSgpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggYzIzOWI0
NDIwYjMyNWIwMDY0YzRmNmFiNjliMWI4MWI3YTBhZDdiZi4uYjZkZTMxZDEyYzlhNzBmNzAxYzMw
NjQ5MTVkY2I3ODUxNzMzNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiAKICAgICB7
CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKLSAgICAgICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
dGVtcF9zdG9yZSA9IE1FTU9SWTsiX3MpLmV4ZWN1dGVDb21tYW5kKCkpCisgICAgICAgIGlmICgh
ZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykpCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3RvcmUg
dG8gbWVtb3J5Iik7CiAgICAgfQogCkBAIC0xOTcsMTAgKzE5NywxMCBAQCB2b2lkIFNRTGl0ZURh
dGFiYXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiB7CiAgICAgbV91c2VXQUwgPSB0cnVlOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHdhbFN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBq
b3VybmFsX21vZGU9V0FMOyJfcyk7Ci0gICAgICAgIGlmICh3YWxTdGF0ZW1lbnQucHJlcGFyZUFu
ZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gd2FsU3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKKyAgICAgICAgaWYg
KHdhbFN0YXRlbWVudCAmJiB3YWxTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAj
aWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtb2RlLCAid2FsIikpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJqb3VybmFs
X21vZGUgb2YgZGF0YWJhc2Ugc2hvdWxkIGJlICdXQUwnLCBidXQgaXMgJyVzJyIsIG1vZGUudXRm
OCgpLmRhdGEoKSk7CiAjZW5kaWYKQEAgLTIxMCw5ICsyMTAsOSBAQCB2b2lkIFNRTGl0ZURhdGFi
YXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiAKICAgICB7CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGNoZWNrcG9pbnRTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgd2FsX2NoZWNr
cG9pbnQoVFJVTkNBVEUpIl9zKTsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQucHJl
cGFyZUFuZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBpZiAoY2hlY2twb2lu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgIGF1dG8gY2hlY2twb2ludFN0YXRl
bWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSki
X3MpOworICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudCAmJiBjaGVja3BvaW50U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnRT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSkKICAgICAgICAgICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJTUUxpdGUgZGF0YWJhc2UgY2hlY2twb2ludCBpcyBibG9ja2VkIik7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGNo
ZWNrcG9pbnQ6ICVzIiwgbGFzdEVycm9yTXNnKCkpOwpAQCAtMjcyLDggKzI3Miw4IEBAIGludDY0
X3QgU1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKCkKICAgICB7CiAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZh
bHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBt
YXhfcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOworICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0
ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxl
QXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTI5Myw5ICsyOTMsOCBAQCB2b2lkIFNRTGl0
ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpCiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCBtYWtlU3RyaW5nKCJQUkFHTUEg
bWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKLSAgICBzdGF0ZW1lbnQucHJl
cGFyZSgpOwotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSBtYXhfcGFn
ZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCBtYXhpbXVtIHNpemUgb2YgZGF0YWJhc2UgdG8gJWxsaSBieXRlcyIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oc2l6ZSkpOwogCiAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKQEAg
LTMxMCw4ICszMDksOCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhv
cml6ZXIoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqdGhpcywgIlBSQUdNQSBwYWdlX3NpemUiX3MpOwotICAgICAgICBtX3BhZ2VTaXplID0gc3Rh
dGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgcGFnZV9zaXplIl9zKTsKKyAgICAgICAgbV9wYWdlU2l6ZSA9IHN0
YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgCiAgICAg
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQpAQCAtMzI3LDggKzMyNiw4IEBAIGlu
dDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUoKQogICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxz
ZSk7CiAgICAgICAgIC8vIE5vdGU6IGZyZWVsaXN0X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUg
My40LjEuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
ZnJlZWxpc3RfY291bnQiX3MpOwotICAgICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1l
bnQoIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7CisgICAgICAgIGZyZWVsaXN0Q291bnQgPSBz
dGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5h
YmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTM0Miw4ICszNDEsOCBAQCBpbnQ2NF90
IFNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUoKQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2Up
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vf
Y291bnQiX3MpOwotICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBh
Z2VfY291bnQiX3MpOworICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsK
ICAgICB9CiAKQEAgLTM3MSwxNCArMzcwLDIyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEJ1
c3lIYW5kbGVyKGludCgqaGFuZGxlcikodm9pZCosIGludCkpCiAgICAgICAgIExPRyhTUUxEYXRh
YmFzZSwgIkJ1c3kgaGFuZGxlciBzZXQgb24gbm9uLW9wZW4gZGF0YWJhc2UiKTsKIH0KIAotYm9v
bCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCitib29s
IFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIHF1ZXJ5KQogewot
ICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCkuZXhlY3V0ZUNvbW1hbmQoKTsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIHJldHVy
biBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworfQorCitib29sIFNR
TGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3Rh
dGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKIH0KIAogYm9vbCBTUUxpdGVE
YXRhYmFzZTo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0g
ICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5yZXR1cm5zQXRMZWFzdE9uZVJl
c3VsdCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChzcWwpOworICAg
IHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5yZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgp
OwogfQogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRh
YmxlbmFtZSkKQEAgLTM4NiwxOCArMzkzLDE1IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxl
RXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQogICAgIGlmICghaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBzdGF0ZW1lbnQgPSAiU0VMRUNUIG5hbWUg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1lID0gJyIgKyB0
YWJsZW5hbWUgKyAiJzsiOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqdGhpcywgc3RhdGVt
ZW50KTsKLSAgICBzcWwucHJlcGFyZSgpOwotICAgIHJldHVybiBzcWwuc3RlcCgpID09IFNRTElU
RV9ST1c7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFt
ZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAnIiAr
IHRhYmxlbmFtZSArICInOyIpOworICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogdm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxU
YWJsZXMoKQogewotICAgIFN0cmluZyBxdWVyeSA9ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfczsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZXM7
Ci0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5KS5yZXR1cm5UZXh0UmVzdWx0
cygwLCB0YWJsZXMpKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQgfHwgIXN0YXRlbWVudC0+cmV0dXJuVGV4dFJlc3VsdHMoMCwgdGFi
bGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NTgzLDEwICs1ODcsMTAgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6aXNBdXRvQ29tbWl0T24oKSBj
b25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0o
KQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgYXV0b192
YWN1dW0iX3MpOwotICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCk7CisgICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gMDsKKyAgICBpZiAoYXV0byBzdGF0ZW1l
bnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYXV0b192YWN1dW0iX3MpKQorICAgICAgICBh
dXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOwogICAgIGludCBlcnJv
ciA9IGxhc3RFcnJvcigpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgLy8gQ2hl
Y2sgaWYgd2UgZ290IGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byBnZXQgdGhlIHZhbHVlIG9mIHRo
ZSBhdXRvX3ZhY3V1bSBmbGFnLgogICAgIC8vIElmIHdlIGdvdCBhIFNRTElURV9CVVNZIGVycm9y
LCB0aGVuIHRoZXJlJ3MgcHJvYmFibHkgYW5vdGhlciB0cmFuc2FjdGlvbiBpbgpAQCAtNjQzLDQg
KzY0Nyw3MiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpyZWxlYXNlTWVtb3J5KCkKICAgICBzcWxp
dGUzX2RiX3JlbGVhc2VfbWVtb3J5KG1fZGIpOwogfQogCitzdGF0aWMgRXhwZWN0ZWQ8c3FsaXRl
M19zdG10KiwgaW50PiBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNl
JiBkYXRhYmFzZSwgY29uc3QgY2hhciogcXVlcnksIHNpemVfdCBxdWVyeUxlbmd0aCkKK3sKKyAg
ICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhkYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOworICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIsIHF1ZXJ5KTsKKworICAgIC8v
IFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluY2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0
ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOworICAgIC8vIHRoaXMgbGV0cyBTUUxpdGUgYXZvaWQg
YW4gZXh0cmEgc3RyaW5nIGNvcHkuCisgICAgc2l6ZV90IGxlbmd0aEluY2x1ZGluZ051bGxDaGFy
YWN0ZXIgPSBxdWVyeUxlbmd0aCArIDE7CisKKyAgICBzcWxpdGUzX3N0bXQqIHN0YXRlbWVudCB7
IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiB0YWlsID0gbnVsbHB0cjsKKyAgICBpbnQgZXJy
b3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVyeSwg
bGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciwgJnN0YXRlbWVudCwgJnRhaWwpOworCisgICAg
aWYgKGVycm9yICE9IFNRTElURV9PSykgeworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxp
dGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5LCBzcWxpdGUz
X2Vycm1zZyhkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yKTsKKyAgICB9CisKKyAgICBpZiAodGFpbCAmJiAqdGFpbCkgeworICAg
ICAgICBzcWxpdGUzX2ZpbmFsaXplKHN0YXRlbWVudCk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTUUxJVEVfRVJST1IpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9
CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJpbmcgcXVl
cnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0byBzcWxT
dGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5kYXRh
KCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRh
dGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3Io
KSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3FsU3RhdGVt
ZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBh
dXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1
ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1Ymxp
Y31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxVbmlxdWVS
ZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0g
cXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBx
dWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FM
aXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVy
cygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVl
cnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRl
bWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1l
bnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIwZmE2M2E5
OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdv
b2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsOCArMjgs
MTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFz
dENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFu
ZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5k
KEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0
IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29u
c3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB0
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBp
bnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoQVND
SUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8
U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3Rh
dGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOwor
CiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhpcyBpcyB0
aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IGRl
YThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLmJiMjZiMDljMjU5YTAzZmQ4
MWJmZTc2MmI0MjliYWRjOGE1N2Q3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQ6OlNR
TGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50
KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwgbV9zdGF0
ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NFUlQoc3Rh
dGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkKK1NRTGl0
ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVyKQorICAg
IDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQoc3RkOjpl
eGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxpemUoKTsK
IH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1lbnQ6On5T
UUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQotICAgIExv
Y2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLQotICAg
IENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKLSAgICAK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5kYXRhKCkp
OwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBu
dWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBsZXRzIFNR
TGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3RoSW5jbHVk
aW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0IGNoYXIq
IHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRpbmdOdWxs
Q2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAhPSBTUUxJ
VEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxl
ZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwpCi0gICAg
ICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lz
UHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXJyb3I7
CisgICAgaWYgKG1fc3RhdGVtZW50KQorICAgICAgICBzcWxpdGUzX2ZpbmFsaXplKG1fc3RhdGVt
ZW50KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6c3RlcCgpCiB7CiAgICAgTG9ja0hvbGRl
ciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwogCi0gICAgaWYgKCFt
X3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQogICAgIC8vIFRoZSBkYXRh
YmFzZSBuZWVkcyB0byB1cGRhdGUgaXRzIGxhc3QgY2hhbmdlcyBjb3VudCBiZWZvcmUgZWFjaCBz
dGF0ZW1lbnQKICAgICAvLyBpbiBvcmRlciB0byBjb21wdXRlIHByb3Blcmx5IHRoZSBsYXN0Q2hh
bmdlcygpIHJldHVybiB2YWx1ZS4KICAgICBtX2RhdGFiYXNlLnVwZGF0ZUxhc3RDaGFuZ2VzQ291
bnQoKTsKIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHN0ZXAgLSAlcyIsIG1fcXVlcnku
YXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBlcnJvciA9IHNxbGl0ZTNfc3RlcChtX3N0YXRlbWVu
dCk7Ci0gICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVwIGZhaWxlZCAoJWkpXG5R
dWVyeSAtICVzXG5FcnJvciAtICVzIiwgCi0gICAgICAgICAgICBlcnJvciwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsK
LSAgICB9CisgICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9S
T1cpCisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxu
RXJyb3IgLSAlcyIsIGVycm9yLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5k
bGUoKSkpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQotICAgIAotaW50IFNRTGl0ZVN0YXRlbWVu
dDo6ZmluYWxpemUoKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVkID0g
ZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FM
SVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIGZpbmFsaXplIC0gJXMiLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3FsaXRlM19maW5hbGl6ZSht
X3N0YXRlbWVudCk7Ci0gICAgbV9zdGF0ZW1lbnQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7Ci19
CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkgCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVw
YXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSByZXNldCAtICVzIiwgbV9xdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQobV9zdGF0ZW1lbnQpOwog
ICAgIHNxbGl0ZTNfY2xlYXJfYmluZGluZ3MobV9zdGF0ZW1lbnQpOwogICAgIHJldHVybiBzdGF0
dXM7CkBAIC0xMjksNDIgKzg0LDIxIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkKIAog
Ym9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKIHsKLSAgICBpZiAoIW1fc3Rh
dGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ET05F
KSB7Ci0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgZmluYWxpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RlcCgpID09IFNR
TElURV9ET05FOwogfQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuc0F0TGVhc3RPbmVS
ZXN1bHQoKQogewotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9P
SykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAg
IGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0KKyAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpCiB7
Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50
KCkpOwogICAgIEFTU0VSVChibG9iIHx8ICFzaXplKTsKICAgICBBU1NFUlQoc2l6ZSA+PSAwKTsK
IAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7Ci0K
ICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9iLCBz
aXplLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIApAQCAtMTg1LDcgKzExOSw2IEBAIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4
dCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTIwNCw3ICsxMzcsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
VGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludChpbnQgaW5kZXgsIGludCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJl
cGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjEzLDcgKzE0
NSw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdl
cikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBp
bnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+
IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJh
bWV0ZXJDb3VudCgpKTsKIApAQCAtMjIyLDcgKzE1Myw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0y
MzEsNyArMTYxLDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgs
IGRvdWJsZSBudW1iZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmROdWxsKGludCBpbmRl
eCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTI0OSwyNiArMTc4LDE5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmRWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSkKIAogdW5zaWduZWQgU1FM
aXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVCht
X2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KG1fc3RhdGVtZW50KTsKIH0K
IAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIEFTU0VSVChtX2lz
UHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBzcWxpdGUzX2RhdGFfY291bnQobV9zdGF0ZW1lbnQpOwogfQogCiBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAw
KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGVwKCkg
IT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChjb2x1bW5Db3Vu
dCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzgsMTkgKzIwMCwxNCBA
QCBib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5EZWNsYXJlZEFzQmxvYihpbnQgY29sKQogewogICAgIEFTU0VS
VChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkgewotICAgICAgICBpZiAocHJlcGFy
ZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAgICAg
cmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcoc3FsaXRlM19j
b2x1bW5fZGVjbHR5cGUobV9zdGF0ZW1lbnQsIGNvbCkpLCAiYmxvYiIpOwogfQogCiBTdHJpbmcg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNv
bCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlm
IChzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlm
IChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJl
dHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNfY29sdW1u
X25hbWUxNihtX3N0YXRlbWVudCwgY29sKSkpOwpAQCAtMjk5LDkgKzIxNiw4IEBAIFN0cmluZyBT
UUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIFNRTFZhbHVlIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDAp
OwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9
IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChjb2x1bW5D
b3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMCw5ICsyNDYs
OCBAQCBTUUxWYWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVlKGludCBjb2wpCiBT
dHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiB7CiAgICAgQVNT
RVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFy
ZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNf
Y29sdW1uX3RleHQxNihtX3N0YXRlbWVudCwgY29sKSksIHNxbGl0ZTNfY29sdW1uX2J5dGVzMTYo
bV9zdGF0ZW1lbnQsIGNvbCkgLyBzaXplb2YoVUNoYXIpKTsKQEAgLTM0MSw5ICsyNTYsOCBAQCBT
dHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiBkb3VibGUgU1FM
aXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29s
ID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gMC4wOworICAgIGlmIChzdGVw
KCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1uQ291
bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29s
dW1uX2RvdWJsZShtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM1Miw5ICsyNjYsOCBAQCBkb3VibGUg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0g
ICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FM
SVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmIChzdGVwKCkgIT0gU1FMSVRF
X1JPVykKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50KG1fc3RhdGVt
ZW50LCBjb2wpOwpAQCAtMzYzLDkgKzI3Niw4IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENv
bHVtbkludChpbnQgY29sKQogaW50NjRfdCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0
KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50
KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9pbnQ2NChtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM3
NSw3ICsyODcsNyBAQCBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJp
bmcoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRl
bWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKHN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoY29sdW1u
Q291bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA5LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6
OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkKIHsK
ICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJl
QW5kU3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MjMsNyArMzM1LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3Rv
cihpbnQgY29sLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49
IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKKyAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgcmVzdWx0
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NTEsMTkgKzM2MywxMyBAQCBi
b29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0
cmluZz4mIHYpCiAKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAg
ICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAg
ICAgdi5hcHBlbmQoZ2V0Q29sdW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7
CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRp
bmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4
dFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc3LDEzIEBAIGJvb2wgU1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+JiB2KQog
ewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxp
emUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVu
ZChnZXRDb2x1bW5JbnQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmICht
X2RhdGFiYXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMg
ZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHM6IEVy
cm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTQ5MSwxOSArMzkxLDEzIEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50
OjpyZXR1cm5JbnQ2NFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGludDY0X3Q+JiB2KQogewogICAg
IHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsK
LSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRD
b2x1bW5JbnQ2NChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgaWYgKG1fZGF0
YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVzdWx0cyBmcm9t
IGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExP
RyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzOiBFcnJv
ciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC01MTEsMjUgKzQwNSwxNCBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6
cmV0dXJuRG91YmxlUmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8ZG91YmxlPiYgdikKIHsKICAgICB2
LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0g
ICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29s
dW1uRG91YmxlKGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRh
YmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxz
ZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20g
ZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9H
KFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzOiBFcnJv
ciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1ib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNFeHBpcmVkKCkKLXsKLSAgICBy
ZXR1cm4gIW1fc3RhdGVtZW50OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKaW5kZXggYTdhY2RlNWNm
YzViMmQzNTYyYjFmYjUxZmQ2YTcxYmQ5NWNjZTQwOC4uZWY1ZWU4MzEwOGIxNWMzNGI1Y2IyMTI4
OTQ4ZDU4ZjlmZDdkN2EzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCArMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBTUUxpdGVTdGF0ZW1lbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNR
TGl0ZVN0YXRlbWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYsIGNvbnN0IFN0cmlu
ZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAotICAgIFdF
QkNPUkVfRVhQT1JUIGludCBwcmVwYXJlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpOwogICAgIFdFQkNPUkVf
RVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwpAQCAtNTAs
MjMgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBiaW5kUGFy
YW1ldGVyQ291bnQoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGludCBzdGVwKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgaW50IGZpbmFsaXplKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50
IHJlc2V0KCk7CiAgICAgCi0gICAgaW50IHByZXBhcmVBbmRTdGVwKCkgeyBpZiAoaW50IGVycm9y
ID0gcHJlcGFyZSgpKSByZXR1cm4gZXJyb3I7IHJldHVybiBzdGVwKCk7IH0KLSAgICAKLSAgICAv
LyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgorICAgIC8vIHN0ZXBz
IGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgogICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgMyBz
dGVwcyBzdWNjZWVkIHdpdGggc3RlcCgpIHJldHVybmluZyBTUUxJVEVfRE9ORQogICAgIC8vIHJl
dHVybnMgZmFsc2Ugb3RoZXJ3aXNlICAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVD
b21tYW5kKCk7CiAgICAgCi0gICAgLy8gcHJlcGFyZXMsIHN0ZXBzLCBhbmQgZmluYWxpemVzLiAg
CisgICAgLy8gc3RlcHMsIGFuZCBmaW5hbGl6ZXMuCiAgICAgLy8gcmV0dXJucyB0cnVlIGlzIHN0
ZXAoKSByZXR1cm5zIFNRTElURV9ST1cKICAgICAvLyByZXR1cm5zIGZhbHNlIG90aGVyd2lzZQog
ICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsKIAotICAgIGJvb2wgaXNFeHBpcmVk
KCk7Ci0KICAgICAvLyBSZXR1cm5zIC0xIG9uIGxhc3Qtc3RlcCBmYWlsaW5nLiAgT3RoZXJ3aXNl
LCByZXR1cm5zIG51bWJlciBvZiByb3dzCiAgICAgLy8gcmV0dXJuZWQgaW4gdGhlIGxhc3Qgc3Rl
cCgpCiAgICAgaW50IGNvbHVtbkNvdW50KCk7CkBAIC05MCwxNSArODQsMTQgQEAgcHVibGljOgog
CiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQog
ICAgIAotICAgIGNvbnN0IFN0cmluZyYgcXVlcnkoKSBjb25zdCB7IHJldHVybiBtX3F1ZXJ5OyB9
Ci0gICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTUUxpdGVEYXRhYmFzZTsKKyAgICBT
UUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBzcWxpdGUzX3N0bXQqKTsKKworICAgIGlu
dCBmaW5hbGl6ZSgpOworCiAgICAgU1FMaXRlRGF0YWJhc2UmIG1fZGF0YWJhc2U7Ci0gICAgU3Ry
aW5nIG1fcXVlcnk7CiAgICAgc3FsaXRlM19zdG10KiBtX3N0YXRlbWVudDsKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIGJvb2wgbV9pc1ByZXBhcmVkIHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAKaW5kZXggNmY3ZjRiYTE2NjBiNGY3YTk3NzIxMmM4NTYz
YTQzYzY2NWUzMGI1NC4uYzI4M2E5ODNjZjQ2Yjc0OGJlODc3NTI3YjQ2MWU1MmNlZDg2MDFmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURC
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIu
Y3BwCkBAIC0xMzAsMjUgKzEzMCwyNSBAQCBib29sIFNlYXJjaFBvcHVwTWVudURCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiU2VhcmNo
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3Jp
dHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFp
bnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9
IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAl
ZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGlu
dGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAg
IExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVj
aywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7Cisg
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAg
ICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiU2VhcmNoIGF1
dG9zYXZlIGRhdGFiYXNlIGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQu
YXNjaWkoKS5kYXRhKCkpOwpAQCAtMjM0LDcgKzIzNCw4IEBAIHZvaWQgU2VhcmNoUG9wdXBNZW51
REI6OmNsb3NlRGF0YWJhc2UoKQogCiB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjp2ZXJpZnlTY2hl
bWFWZXJzaW9uKCkKIHsKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lv
biJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzEsMjMgKzI3MiwyNSBAQCB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjpj
aGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKIAogaW50IFNlYXJjaFBvcHVwTWVudURC
OjpleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29sIGlnbm9yZUVycm9yKQog
ewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBp
bnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFs
aXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
c3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBjaGVja1NRTGl0ZVJldHVybkNv
ZGUoc3RhdGVtZW50LmVycm9yKCkpOworICAgICAgICByZXR1cm4gc3RhdGVtZW50LmVycm9yKCk7
CisgICAgfQogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7CisgICAgaW50IHJldCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYmIHJldCAhPSBT
UUxJVEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3IpCiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCku
ZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLQogICAgIHJldHVybiByZXQ7CiB9
CiAKIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVwTWVudURCOjpj
cmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKIHsKLSAgICBhdXRvIHN0
YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOwot
ICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnByZXBhcmUoKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJl
dCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAgcmV0dXJuIHN0YXRlbWVudDsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChz
dGF0ZW1lbnQpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gV1RGTW92ZShzdGF0ZW1lbnQudmFsdWUoKSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25EYXRhYmFzZS5jcHAKaW5kZXggODkyYzNmNDllOTAxNGEzNWZlOTI5ODRlZjlhMjkwNGE3
YmRlZDU2MC4uYjBjNzE2MWE4MDZhODY4ZWM0ZmY0NDc2NTNiYjg1M2ZjMDk2ODQ1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25E
YXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9S
ZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKQEAgLTI4NSwxMSArMjg1LDExIEBAIFN0cmluZyBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKQogICAgIFN0cmluZyBj
dXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4g
ZXhpc3RpbmcgcmVjb3JkcyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqbV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCi0gICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiI7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiJfczsK
IAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzAxLDcgKzMw
MSw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFi
bGUoKQogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgICAg
ICByZXR1cm4gIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0
aGUgUmVjb3JkcyB0YWJsZS4iOwogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0
Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0
eSgpKTsKQEAgLTQyNywxOCArNDI3LDE4IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRv
UHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fZGF0YWJhc2UpOwogICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiSU5T
RVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8pIl9zKTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IGluc2VydFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJ
TlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJf
cyk7CisgICAgaWYgKCFpbnNlcnRTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBzdG9yZSBy
ZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGF1dG8mIHNjcmlwdFN0b3JhZ2UgPSB0aGlzLT5zY3Jp
cHRTdG9yYWdlKCk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiByZW1vdmVkUmVnaXN0
cmF0aW9ucykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiREVM
RVRFIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSA/Iik7Ci0gICAgICAgIGlmIChzcWwucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIHJlZ2lzdHJh
dGlvbi50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5
ID0gPyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBk
ZWxldGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNlS2V5KCkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3Jr
ZXIsICJGYWlsZWQgdG8gcmVtb3ZlIHJlZ2lzdHJhdGlvbiBkYXRhIGZyb20gcmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC00NTcs
MTkgKzQ1NywxOSBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNv
bnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpFbmNvZGVyIGNlcnRpZmljYXRlSW5mb0VuY29kZXI7CiAgICAgICAgIGNlcnRpZmlj
YXRlSW5mb0VuY29kZXIgPDwgZGF0YS5jZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgaWYgKHNx
bC5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtleSgpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlv
bi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3FsLmJpbmRUZXh0KDMsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBhdGgoKS50
b1N0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg0LCBk
YXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmREb3VibGUoNSwgZGF0YS5yZWdpc3Ry
YXRpb24ubGFzdFVwZGF0ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3Ry
aW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmlu
ZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5k
QmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQ
b2xpY3kpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDExLCBzY3Jp
cHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5i
dWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDEy
LCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVy
LmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIGlmIChpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlv
bi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgzLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29w
ZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNl
cnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmlnaW4o
KS5kYXRhYmFzZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNl
cnRTdGF0ZW1lbnQtPmJpbmREb3VibGUoNSwgZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVwZGF0ZVRp
bWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
IHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhk
YXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZm
ZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBz
Y3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rl
ci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlm
aWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3RvcmUgcmVnaXN0
cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUwMiwyNiArNTAyLDI2IEBAIFN0cmluZyBSZWdpc3Ry
YXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAKICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmltcG9ydFJlY29yZHM6Iik7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9kYXRhYmFz
ZSwgIlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHNxbCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3MpOworICAgIGlmICghc3FsKQogICAgICAgICByZXR1
cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJldHJpZXZlIHJl
Z2lzdHJhdGlvbnMgZnJvbSByZWNvcmRzIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3Io
KSwgIikgLSAiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBpbnQgcmVzdWx0
ID0gc3FsLnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAKLSAgICBmb3Ig
KDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNxbC5zdGVwKCkpIHsKKyAgICBmb3Ig
KDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNxbC0+c3RlcCgpKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0
UmVjb3JkczogSW1wb3J0aW5nIGEgcmVnaXN0cmF0aW9uIGZyb20gdGhlIGRhdGFiYXNlIik7Ci0g
ICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFi
YXNlS2V5KHNxbC5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBV
UkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQoMSkgfTsKLSAgICAgICAgYXV0byBzY29wZVBh
dGggPSBzcWwuZ2V0Q29sdW1uVGV4dCgyKTsKKyAgICAgICAgYXV0byBrZXkgPSBTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uS2V5Ojpmcm9tRGF0YWJhc2VLZXkoc3FsLT5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRDb2x1bW5U
ZXh0KDEpIH07CisgICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLT5nZXRDb2x1bW5UZXh0KDIp
OwogICAgICAgICBhdXRvIHNjb3BlVVJMID0gVVJMIHsgb3JpZ2luVVJMLCBzY29wZVBhdGggfTsK
LSAgICAgICAgYXV0byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3FsLmdldENvbHVtblRleHQoMykpOwotICAgICAgICBhdXRvIGxhc3RVcGRh
dGVDaGVja1RpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLmdldENvbHVtbkRvdWJs
ZSg0KSk7Ci0gICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBzdHJpbmdUb1VwZGF0ZVZpYUNh
Y2hlKHNxbC5nZXRDb2x1bW5UZXh0KDUpKTsKLSAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwg
eyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQoNikgfTsKLSAgICAgICAgYXV0byB3b3JrZXJUeXBl
ID0gc3RyaW5nVG9Xb3JrZXJUeXBlKHNxbC5nZXRDb2x1bW5UZXh0KDcpKTsKKyAgICAgICAgYXV0
byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIo
c3FsLT5nZXRDb2x1bW5UZXh0KDMpKTsKKyAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1l
ID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHNxbC0+Z2V0Q29sdW1uRG91YmxlKDQpKTsKKyAg
ICAgICAgYXV0byB1cGRhdGVWaWFDYWNoZSA9IHN0cmluZ1RvVXBkYXRlVmlhQ2FjaGUoc3FsLT5n
ZXRDb2x1bW5UZXh0KDUpKTsKKyAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwgeyBVUkwoKSwg
c3FsLT5nZXRDb2x1bW5UZXh0KDYpIH07CisgICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmlu
Z1RvV29ya2VyVHlwZShzcWwtPmdldENvbHVtblRleHQoNykpOwogCiAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1u
QmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEpOworICAgICAgICBzcWwt
PmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsKICAg
ICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1cml0
eVBvbGljeURhdGEuZGF0YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSk7CiAg
ICAgICAgIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gY29u
dGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0
YS5zaXplKCkpIHsKQEAgLTUzMiwxMCArNTMyLDEwIEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRh
YmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLmdldENvbHVtblRleHQoOSk7CisgICAgICAgIGF1
dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwtPmdldENvbHVtblRleHQoOSk7CiAKICAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHNjcmlwdFJlc291cmNlTWFwRGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVt
bkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhKTsKKyAgICAgICAgc3FsLT5n
ZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7CiAgICAgICAg
IEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBz
Y3JpcHRSZXNvdXJjZU1hcDsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNj
cmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGEuZGF0YSgpLCBzY3Jp
cHRSZXNvdXJjZU1hcERhdGEuc2l6ZSgpKTsKQEAgLTU1MCw3ICs1NTAsNyBAQCBTdHJpbmcgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAgICB9CiAKICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlSW5mb0RhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1
bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRpZmljYXRlSW5mb0RhdGEpOworICAgICAgICBzcWwtPmdl
dENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgY2VydGlmaWNhdGVJbmZvRGF0YSk7CiAgICAgICAgIE9w
dGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCiAgICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUlu
Zm9EYXRhLmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggMGQ3
MjUyYjUzNWNhMmY3ZDA4OGVkOTRlYTI2NGM5NzZjNWQ0MzVjZC4uMTliMGEyMTQxNjJiYjYxZWE1
Y2M2OTZlNWQ0MjYzZGNmOTg4MDY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0zODIsOCArMzgyLDggQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBzZXRCdXN5VGltZW91dChtX2RhdGFiYXNlLCAiUFJBR01BIGJ1c3lfdGltZW91dCA9IDUw
MDAiKTsKLSAgICBpZiAoc2V0QnVzeVRpbWVvdXQucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBz
ZXRCdXN5VGltZW91dC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8gc2V0QnVzeVRp
bWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQg
PSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3Jr
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0QnVzeVRpbWVv
dXQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDIyICs0MDEsMjIgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKIE9wdGlvbmFsPFZlY3Rv
cjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JN
aXNzaW5nVGFibGVzSW5TY2hlbWEoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG1pc3NpbmdUYWJs
ZXM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIDEg
ZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgdGJsX25hbWU9PyIpOwot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVz
SW5TY2hlbWEgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBpZiAoc3RhdGVtZW50LmJp
bmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+
YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBiaW5kLCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMgbWlzc2luZyB0YWJsZTog
JXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAgICBtaXNzaW5nVGFi
bGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQu
cmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0KICAgICBpZiAobWlz
c2luZ1RhYmxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC00
MjYsOCArNDI2LDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWIKIAogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMoKQogewotICAgIFNR
TGl0ZVN0YXRlbWVudCBlbmFibGVGb3JlaWduS2V5cyhtX2RhdGFiYXNlLCAiUFJBR01BIGZvcmVp
Z25fa2V5cyA9IE9OIik7Ci0gICAgaWYgKGVuYWJsZUZvcmVpZ25LZXlzLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sgfHwgZW5hYmxlRm9yZWlnbktleXMuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgYXV0byBlbmFibGVGb3JlaWduS2V5cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
UFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIl9zKTsKKyAgICBpZiAoIWVuYWJsZUZvcmVpZ25LZXlz
IHx8IGVuYWJsZUZvcmVpZ25LZXlzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQzNiwzMSAr
NDM2LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJs
ZUZvcmVpZ25LZXlzKCkKIAogVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0VGFibGVTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUnIikpOwotICAgIGlm
IChnZXRUYWJsZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBn
ZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5n
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVO
YW1lLCAiJyBBTkQgdHlwZSA9ICd0YWJsZSciKSk7CisgICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVu
dCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVz
IGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2NoZW1hLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdldFRhYmxlU3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCk7CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRU
YWJsZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBn
ZXRJbmRleFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9
ICdpbmRleCciKSk7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBhdXRvIGdldEluZGV4U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ2luZGV4JyIpKTsKKyAgICBp
ZiAoIWdldEluZGV4U3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFi
bGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGlu
ZGV4IGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIE9wdGlvbmFsPFN0cmlu
Zz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIGF1dG8gcmF3SW5kZXggPSBTdHJpbmcoZ2V0SW5kZXhTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKSk7CisgICAgaWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwogICAgIH0KQEAgLTQ4MCwyMCArNDgwLDIw
IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKIHsKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBG
Uk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcyBVbmFibGUgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMgZXJyb3IgZXhl
Y3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVzc2FnZTogJXMi
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291bnQpCisgICAgaWYgKHN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDApIDwgZXhwZWN0ZWRJbmRleENvdW50KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTU1NCw4ICs1NTQsOCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRl
eFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAgICAgYXV0byBxdWVyeSA9IG1ha2VTdHJpbmcoIkFM
VEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpOwotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgYWx0ZXJUYWJsZShtX2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIGlmIChh
bHRlclRhYmxlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgYWx0ZXJUYWJsZS5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBhbHRlclRhYmxlID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFi
bGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1p
Z3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gcmVuYW1lIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01
NzAsMTYgKzU3MCwxNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRvJiB0
YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAgICAg
YXV0byBxdWVyeSA9IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVF1ZXJ5KHRhYmxlKTsKLSAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IG1pZ3JhdGVUYWJsZURhdGEobV9kYXRhYmFzZSwgcXVlcnkp
OwotICAgICAgICBpZiAobWlncmF0ZVRhYmxlRGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8
IG1pZ3JhdGVUYWJsZURhdGEuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8g
bWlncmF0ZVRhYmxlRGF0YSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7Cisg
ICAgICAgIGlmICghbWlncmF0ZVRhYmxlRGF0YSB8fCBtaWdyYXRlVGFibGVEYXRhLT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRv
TmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIG1pZ3JhdGUgc2NoZW1hLCBlcnJvciBtZXNz
YWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBhdXRvIGRyb3BRdWVyeSA9IG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxl
KTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRyb3BUYWJsZVF1ZXJ5KG1fZGF0YWJhc2UsIGRy
b3BRdWVyeSk7Ci0gICAgICAgIGlmIChkcm9wVGFibGVRdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LIHx8IGRyb3BUYWJsZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBh
dXRvIGRyb3BUYWJsZVF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGRyb3BRdWVy
eSk7CisgICAgICAgIGlmICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRh
VG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gZHJvcCB0ZW1wb3JhcnkgdGFibGVzLCBl
cnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01
OTcsMTcgKzU5NywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiBWZWN0b3I8U3RyaW5nPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgbWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwgdGFibGVOYW1lLCAiKSIp
KTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtl
U3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0YWJsZU5hbWUsICIpIikpOwogCi0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFzdGF0ZW1lbnQp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdldENvbHVtbnNGcm9tVGFibGVJbmZvU3RhdGVtZW50
IFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5zOwotICAgIHdoaWxl
IChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0byBuYW1lID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDEpOwogICAgICAgICBjb2x1bW5zLmFwcGVuZChuYW1lKTsKICAgICB9CiAKQEAgLTYy
MiwxOCArNjIyLDE4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZShTdHJpbmcmJiB0YWJsCiAgICAgICAgIGlmIChleGlz
dGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtl
U3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4p
KTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJp
bmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNvbHVtbikpOwor
ICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1p
c3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gYWRkIG1p
c3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGlmIChzdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGFk
ZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAg
IH0KIH0KIApAQCAtNjQ4LDEzICs2NDgsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpCiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbmFtZUNvbHVtbkluVGFibGUoU3Ry
aW5nJiYgdGFibGVOYW1lLCBFeGlzdGluZ0NvbHVtbk5hbWUmJiBleGlzdGluZ0NvbHVtbk5hbWUs
IEV4cGVjdGVkQ29sdW1uTmFtZSYmIGV4cGVjdGVkQ29sdW1uTmFtZSkKIHsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIs
IHRhYmxlTmFtZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAi
LCBleHBlY3RlZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVN
TiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVtbiBp
biB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRp
bmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC03MTIsMTUg
KzcxMiwxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVu
QW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwog
ICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2
ZWQgRG9tYWlucyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J09ic2VydmVkRG9tYWlucyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0
YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJsZSBhdCBhbGws
IG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0ZSB0aGUgZmls
ZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAg
ICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CiAgICAgICAgICAgICBjbG9zZSgpOwogICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKQEAg
LTcyOCw3ICs3MjgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0
KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAt
NzUxLDEyICs3NTEsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKIFNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0
ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVu
dCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0CiB7
CiAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNT
RVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dE9yRXJyb3IpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBs
b2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OwogICAgICAgICB9CisgICAgICAgIHN0YXRlbWVu
dCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAg
QVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KQEAgLTEwMDQsOSAr
MTAwNiw4IEBAIE9wdGlvbmFsPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRl
bWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVl
cnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3Ry
aW5nIGZhaWxlZC4gU3RhdGVtZW50OiAlcy4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBzY29wZWRTdGF0ZW1lbnQtPnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5n
IGZhaWxlZC4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTAzOSwyMyArMTA0MCwyMyBA
QCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1h
a2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYg
c3RhdGVtZW50LCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluTGlzdCwg
dW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFJlbGF0aW9u
c2hpcFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5k
TWFrZURvbWFpbkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxh
dGlvbnNoaXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmlu
ZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7Iikp
OwogICAgIAotICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmluZElu
dCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNo
aXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5k
SW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICAKICAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKLSAgICAgICAgaWYg
KGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3co
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBp
ZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpu
b3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
aW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
IGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMjI5LDE3ICsxMjMwLDE3IEBAIFZlY3RvcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0CiAKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIGNvbnN0IGF1dG8g
cHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIgPSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdN
b2RlKCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsID8gIiUiIDogIjEiOwot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzb3J0ZWRTdGF0aXN0aWNzKG1fZGF0YWJhc2UsIG1ha2VTdHJp
bmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwotICAgIGlmIChz
b3J0ZWRTdGF0aXN0aWNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc29ydGVk
U3RhdGlzdGljcy5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKLSAg
ICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5kVGV4dCgyLCAiJSIpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc29ydGVkU3RhdGlzdGljcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkpKTsK
KyAgICBpZiAoIXNvcnRlZFN0YXRpc3RpY3MKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+
YmluZFRleHQoMSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCisgICAgICAgIHx8IHNv
cnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJM
SUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAg
IH0KLSAgICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewot
ICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5J
bnQoMSkpKSB7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0
YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29y
dGVkU3RhdGlzdGljcy0+Z2V0Q29sdW1uSW50KDEpKSkgeworICAgICAgICAgICAgYXV0byB0aGly
ZFBhcnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAg
ICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW4gPSBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVj
a2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGdldERvbWFpblN0cmluZ0Zyb21E
b21haW5JRCh0aGlyZFBhcnR5RG9tYWluSUQpKTsKICAgICAgICAgICAgIHRoaXJkUGFydHlEYXRh
TGlzdC5hcHBlbmQoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YSB7IHRoaXJkUGFydHlEb21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBh
cnR5RG9tYWlucyh0aGlyZFBhcnR5RG9tYWluSUQsIHRoaXJkUGFydHlEb21haW4pIH0pOwogICAg
ICAgICB9CkBAIC0xMjY1LDkgKzEyNjYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucwogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRv
bWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQg
KyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlu
cyksICIpIikpOwotICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSBy
ZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsK
KyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5jcmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMjg1LDMx
ICsxMjg1LDMwIEBAIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zCiAgICAgKytudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5z
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsICJTRUxF
Q1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBP
YnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20u
ZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERv
bWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFN1YnJlc291cmNlcy5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRTdWJyZXNvdXJjZXMuYmluZEludCgx
LCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFN1YnJlc291
cmNlcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRv
bWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVS
RSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50
ID0gMCJfcyk7CisgICAgaWYgKCFmaW5kU3VicmVzb3VyY2VzIHx8IGZpbmRTdWJyZXNvdXJjZXMt
PmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFp
bnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0gICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7
CisgICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmdldENvbHVtbkludCgw
KTsKICAgICAgICAgYXV0byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNv
dXJjZXMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNv
bmQpCiAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5J
RCk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFz
ZSwgIlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9O
IE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMu
aXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRUb3BGcmFtZXMuYmluZEludCgxLCBwcmltYXJ5RG9t
YWluSUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZy
YW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpy
ZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21h
aW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kVG9wRnJhbWVz
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRU
b3BGcmFtZXMuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJh
bWVzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJl
dmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgICAgIGlm
IChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlu
cy5pbnNlcnQobmV3RG9tYWluSUQpOwpAQCAtMTM0MSwyMSArMTM0MCwyMCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGly
ZWN0ZWRUb1ByZXZhbAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgU3Rk
U2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElO
Q1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNl
cnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9t
YWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmIChz
dWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAg
ICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgRElTVElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFp
bklEIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlu
cyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwor
ICAgIGlmIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChz
dWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAg
ICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5DVCBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVk
RG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3Rh
dGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1l
UmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2
YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LmdldENv
bHVtbkludCgwKSk7CisgICAgYXV0byB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9J
TiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCkgeworICAgICAg
ICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGly
ZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBtYXJrUHJldmFsZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAo
IiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRv
cj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0
LmVuZCgpKSksICIpIikpOwotICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RG
OjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVU
b1JlZGlyZWN0LmJlZ2luKCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7
CisgICAgaWYgKCFtYXJrUHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9J
Rl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVk
IHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTEzNjYsMTIgKzEzNjQsMTIgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8dW5zaWduZWQs
IE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBk
b21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAg
d2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Ci0g
ICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVE
b21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAg
ICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgy
KSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
OjpMb3cKKyAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21h
aW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVu
dCA9IDAiX3MpOworICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7
CisgICAgICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSk7CisgICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsg
UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0
cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEp
KQorICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNl
TG9hZFByZXZhbGVuY2U6OkxvdwogICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKICAg
ICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICB9CkBAIC0xMzg2LDQz
ICsxMzg0LDQzIEBAIEhhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAKICAgICBhdXRvIGRvbWFpbklE
c09mSW50ZXJlc3QgPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtl
U3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5J
RCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291
cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkp
OworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWlu
SUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVl
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5n
KCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIs
IGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7
Ci0gICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVw
YXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1
dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklE
LCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hF
UkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JP
VVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7
CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAg
ICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVz
dWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50Lmdl
dENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3Vi
ZnJhbWVEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURv
bWFpbklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVE
b21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVE
b21haW5JRCIpKTsKKyAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3Rh
dGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRv
RG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21h
aW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWlu
SUQiKSk7Ci0gICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5w
cmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8g
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9E
b21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFp
bklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5J
RCIpKTsKKyAgICBpZiAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7
CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ5LDEwICsxNTQ3LDEwIEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
KFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0g
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUg
ZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJbnQo
MSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3Jl
bWVudFN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbmNy
ZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
T2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdl
QWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQ
SSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWluY3JlbWVudFN0b3JhZ2VB
Y2Nlc3MKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqc3Vi
RnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3Rv
cmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0x
NjQ2LDkgKzE2NDQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgIH0K
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9
IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5z
KSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9t
YWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRh
Rm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KQEAgLTE3NzYsMTAgKzE3NzMsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2lu
Y2VTYW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1v
dmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hFUkUg
c291cmNlRG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1l
U2l0ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZS5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFp
bklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAg
ICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJn
ZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3Rz
VG9TaW5jZVNhbWVTaXRlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTgzMiwxMCArMTgyOSwx
MCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJ
bnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZQogICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rp
b24oZG9tYWluLCBmYWxzZSwgeyB9KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9y
YWdlQWNjZXNzKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVN0b3JhZ2VB
Y2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNj
ZXNzLmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1
dG8gcmVtb3ZlU3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVM
RVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklE
ID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IHJlbW92
ZVN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CkBAIC0xOTE4LDkgKzE5MTUsOCBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVu
c2lnbmVkPgogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5n
KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWlu
SUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6
aXRlcmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKLSAgICBp
ZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50
ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxT
dGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgp
KSksICIpIikpOworICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjMwMSwxNiArMjI5NywxNSBAQCBDb29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZQogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24g
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Iik7Ci0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3Mg
ZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KIAotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX1JPVzsKLSAgICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDApOwotICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhh
c05vRW50cnkgJiYgc3RhdGVtZW50LmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsKKyAg
ICBib29sIGhhc05vRW50cnkgPSBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XOworICAg
IGJvb2wgaXNQcmV2YWxlbnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50KDApOworICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CiAKICAgICBpZiAoIWFyZUFs
bFRoaXJkUGFydHlDb29raWVzQmxvY2tlZFVuZGVyKHRvcEZyYW1lRG9tYWluKSAmJiAhaXNQcmV2
YWxlbnQpCiAgICAgICAgIHJldHVybiBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xpY3k7
CkBAIC0yMzMzLDE0ICsyMzI4LDE0IEBAIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTCiAKICAgICBh
dXRvIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5E
IHRvcExldmVsRG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21h
aW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsIGZpcnN0
UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRv
cEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/
Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgcmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50
LT5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4g
U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKIAotICAgIHJldHVybiAhIXN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0
b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CisgICAgcmV0dXJuICEhc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5k
RGVsZXRlQ29va2llc0ZvcigpIGNvbnN0CkBAIC0yMzQ4LDEyICsyMzQzLDEyIEBAIFZlY3RvcjxS
ZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRv
bWFpbnNUb0Jsb2NrQW5kCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAg
ICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDAiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJl
Z2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0g
MSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWlu
Ojp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMCkpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNjMsMTIgKzIzNTgs
MTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXQKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21h
aW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2Vy
SW50ZXJhY3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1By
ZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3Ry
YWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWlu
Ojp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNzgsMTIg
KzIzNzMsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW4KICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFi
bGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0g
MSJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0
cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9u
ID0gMSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwog
ICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
IHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3
aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5h
cHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURv
bWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiBy
ZXN1bHRzOwogfQpAQCAtMjM5MywxMyArMjM4OCwxMiBAQCBIYXNoTWFwPFRvcEZyYW1lRG9tYWlu
LCBTdWJSZXNvdXJjZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1YkZy
YW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJsZURv
bWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRvcExldmVsRG9t
YWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRvbWFpbklEKSBh
cyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50b3BMZXZlbERv
bWFpbklEOyJfcyk7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVnaXN0
cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0b3BM
ZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9yYWdl
QWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5kb21h
aW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHoudG9w
TGV2ZWxEb21haW5JRDsiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
cmVzdWx0czsKIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpLCBSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5n
KHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWlu
Ojp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21S
ZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAog
ICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMjQ0NSwxOSArMjQzOSwxOCBAQCBWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAg
IFZlY3RvcjxEb21haW5EYXRhPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVy
ZWQsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFt
ZVJlZGlyZWN0cyBGUk9NIE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VE
b21haW5JRCwgQ09VTlQoKikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBC
WSBzb3VyY2VEb21haW5JRCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3Mp
OwotCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWluSUQs
IHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNl
ckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFpbnMg
TEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZUb3BG
cmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5zb3Vy
Y2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgewotICAgICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpKQotICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29u
ZHMoc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSgyKSkKLSAgICAgICAgICAgICwgc3RhdGVtZW50
LmdldENvbHVtbkludCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoNSkgPyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNikpCisgICAgd2hpbGUgKHN0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAg
ICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21h
aW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUoMikpCisgICAg
ICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAg
ICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAg
ICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAg
ICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludCg2
KSkKICAgICAgICAgfSk7CiAgICAgfQogICAgIApAQCAtMjQ3MywxMSArMjQ2NiwxMSBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5n
KFZlY3Rvcjx1bnNpZ25lZD4mJgogCiAgICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChX
VEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklEc1Rv
Q2xlYXIuYmVnaW4oKSwgZG9tYWluSURzVG9DbGVhci5lbmQoKSkpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmlu
ZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9t
YWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhl
cmluZ1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gY2xlYXJHcmFu
ZGZhdGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3Ry
aW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBk
b21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmICghY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGVhckdy
YW5kZmF0aGVyaW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChj
bGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTI2MTcsMjMgKzI2MTAsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIHNpemVfdCBj
b3VudExlZnRUb1BydW5lID0gY291bnQgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRv
OwogICAgIEFTU0VSVChjb3VudExlZnRUb1BydW5lKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBy
ZWNvcmRzVG9QcnVuZShtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVu
IExJTUlUID8iKTsKLSAgICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICB8fCByZWNvcmRzVG9QcnVuZS5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcmVjb3Jkc1RvUHJ1bmUgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRF
UiBCWSBoYWRVc2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Il9z
KTsKKyAgICBpZiAoIXJlY29yZHNUb1BydW5lIHx8IHJlY29yZHNUb1BydW5lLT5iaW5kSW50KDEs
IGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3Rv
cjx1bnNpZ25lZD4gZW50cmllc1RvUHJ1bmU7Ci0gICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jk
c1RvUHJ1bmUuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jk
c1RvUHJ1bmUtPmdldENvbHVtbkludCgwKSk7CiAKICAgICBhdXRvIGxpc3RUb1BydW5lID0gYnVp
bGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZW50
cmllc1RvUHJ1bmUuYmVnaW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBwcnVuZUNvbW1hbmQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRFIGZy
b20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIiki
KSk7Ci0gICAgaWYgKHBydW5lQ29tbWFuZC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHBydW5lQ29tbWFuZC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHBydW5l
Q29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJERUxFVEUg
ZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAi
KSIpKTsKKyAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVT
dGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNywzNSArMjcwOCwzMyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVjb3Jk
c1JlbW92ZWQoY29uc3QgUmVnaXN0cgogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppc0NvcnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIHN1YmZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50KG1f
ZGF0YWJhc2UsIGNvdW50U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9RdWVyeSk7CisgICAgYXV0byBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFtZVF1
ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOwor
ICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CiAgICAg
Ci0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50
IHx8ICFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRT
dWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9t
YWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
dWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9t
YWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lQ291bnQuYmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJp
bmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMSwgZG9tYWlu
SUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJh
bWVDb3VudC0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50
KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQo
c3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFp
bikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8tPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5k
SW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rl
c3RpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChz
dWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8
fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9S
T1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAhPSBT
UUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJu
IChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldENvbHVtbkludCgwKSA9PSAxKTsKKyAgICByZXR1cm4g
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Z2V0Q29sdW1uSW50KDApID09IDEpOwogfQogCiBzdGF0
aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwsIGJvb2wgZmxhZykKQEAgLTI4MTIsMjcgKzI4MDEsMjYgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJp
bmdCdWlsZGVyJgogICAgIGlmIChxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAgYXV0
byBkYXRhID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKICAgICAKLSAgICBp
ZiAoZGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRhdGEuYmluZEludCgx
LCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9t
YWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEtPmJp
bmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21I
b3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxl
ZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChkYXRhLnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChkYXRhLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgICIp
OwogICAgIGJ1aWxkZXIuYXBwZW5kKHRhYmxlTmFtZSk7CiAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCI6XG4iKTsKICAgICAKLSAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21E
b21haW5JRChkYXRhLmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byByZXN1bHQgPSBnZXREb21h
aW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICBhcHBlbmRO
ZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKICAgICAKLSAgICB3aGlsZSAoZGF0YS5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoZGF0YS5nZXRDb2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgeworICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWlu
SUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxk
ZXIsIHJlc3VsdCk7CiAgICAgfQogfQpAQCAtMjk0NiwyOCArMjkzNCwyNiBAQCBib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2Uo
aW50IGRvbWFpbklEKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVu
dCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQo
KikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRNb3N0
UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBP
cGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERF
U0MgTElNSVQgMTsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9S
REVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9GRlNF
VCA/OyJfcyk7CisgICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRl
czsiX3MpOworICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMg
T1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9z
KTsKKyAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkg
eWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87Il9z
KTsKIAotICAgIGlmIChjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8
fCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQ
YXJhbWV0ZXJzIGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0Rh
dGVzU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9
IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKIAotICAgIGlm
IChnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudCB8fCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0
ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
ZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0Rh
dGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMikpOworICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdl
dE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RS
ZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogCi0gICAgaWYg
KGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGlmICghZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJz
IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIGR1cmluZyB0aGUgY2FsbCB0
byBwcmVwYXJlKCkgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4i
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI5NzYsMjYgKzI5NjIsMjYgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQ
YXJhbWV0ZXJzKCkKICAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5nRGF0
ZXNXaW5kb3dTaG9ydCAtIDEpCiAgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0g
V1RGOjpudWxsb3B0OwogICAgIGVsc2UgewotICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVX
aW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5n
RGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0byBiaW5kKCkg
b3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0
aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgy
KSk7CiAgICAgfQogCiAgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0Rh
dGVzV2luZG93TG9uZyAtIDEpCiAgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBX
VEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQucmVzZXQoKTsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQuYmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVu
dC0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVw
ZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBU
aGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2xvbmdX
aW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93
U3RhdGVtZW50LmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDIpKTsKKyAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGlu
Z0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogfQogCkBA
IC0zMDExLDIxICsyOTk3LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAKICAgICBpbnQg
cm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhE
YXkgTElNSVQgPzsiX3MpOwotICAgICAgICBpZiAoZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0
ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEsIHJvd3NUb1BydW5l
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkZWxl
dGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRo
LCBtb250aERheSBMSU1JVCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
X0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVM
ZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFy
LCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBp
bnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50
KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0
ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICBpZiAo
IWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIHRvZGF5Lm1v
bnRoKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5iaW5kSW50KDMsIHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0
aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRv
IHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KQEAgLTMwNjksMTYgKzMwNTUsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAgICAg
ICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKICAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBP
cGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNB
Z29JblNlY29uZHMpKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGlu
Z0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAg
ICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgx
LCBkYXRlVG9JbnNlcnQueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0
ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICAgICAg
aWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
YmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2Vy
dC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5n
IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAg
ICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdXBkYXRlT3BlcmF0
aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CkBAIC0zMjAxLDM2ICszMTg3LDM2IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVt
ZW50KFByaXZhdGVDCiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4g
YXR0cmlidXRlZCBwcml2YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFi
YXNlIHdpdGhvdXQgdmFsaWQgcmVwb3J0IHRpbWVzLgogICAgICAgICBBU1NFUlQoc291cmNlRWFy
bGllc3RUaW1lVG9TZW5kICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9
IC0xKTsKIAotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAg
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
c3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9u
RGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQuYmluZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIGF0dHJpYnV0
aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNywgc291cmNlRWFybGll
c3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5k
VGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRv
a2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5s
aW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5r
YWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5
U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3Vi
bGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0QXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudAor
ICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJp
YnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNCwgYXR0cmlidXRpb25U
cmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJ
bnQoNSwgcHJpb3JpdHkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
RG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNv
dXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOSwgc291cmNlVW5s
aW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwg
OiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZFRleHQoMTAsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tl
bi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVU
b1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJj
ZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQo
MiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBhdHRyaWJ1dGlv
bi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tl
biA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDYsIHNvdXJjZVVu
bGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJM
IDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5k
VGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtl
eUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1l
bnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNv
bmQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmli
dXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBv
Y2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4
dCg1LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2Vu
QmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRl
bWVudC0+YmluZFRleHQoNiwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJs
ZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4g
PyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1
ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0zNDM1LDE0ICszNDIxLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTCiAKIFN0cmlu
ZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRUb1N0cmluZygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHByaXZhdGVDbGlja01lYXN1
cmVtZW50RGF0YUV4aXN0cyhtX2RhdGFiYXNlLCAiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJP
TSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBD
T1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJf
cyk7Ci0gICAgaWYgKHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LIHx8IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhp
c3RzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgq
KSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VM
RUNUIENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBj
bnQyIl9zKTsKKyAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBw
cml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMuZ2V0Q29sdW1uSW50KDEpKQorICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnREYXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVtZW50
RGF0YUV4aXN0cy0+Z2V0Q29sdW1uSW50KDEpKQogICAgICAgICByZXR1cm4gIlxuTm8gc3RvcmVk
IFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgZGF0YS5cbiJfczsKIAogICAgIGF1dG8gdW5hdHRy
aWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsVW5hdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQsIGFsbFVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25zUXVlcnksICJwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKQEAgLTM1NzMsMTEgKzM1NTksMTEgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0cmli
dXRpb24oV2ViQ29yZTo6UHJpdmF0ZUMKICAgICBpZiAoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVU
b1NlbmQgfHwgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNl
U2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAg
ICBpZiAoY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVE
b21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVu
dC5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdI
RVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0g
PyJfcyk7CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xl
YXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9
IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQo
MiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xl
YXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0
byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CkBAIC0zNTg3LDE4ICszNTczLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAg
ICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAotICAg
IGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
U0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyIpOwotICAgIGF1dG8gZWFybGllc3RU
aW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGll
c3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiKTsKKyAgICBhdXRvIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJV
UERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZSA9ID8iX3MpOworICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0
aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvU291
cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RU
aW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQuYmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJs
aWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8
IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRU
aW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgaWYg
KGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVt
ZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5k
VG9EZXN0aW5hdGlvblN0YXRlbWVudCB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNF
eHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggNTIzMjMz
ZDE4YjA0MDAzZWYzMGQzMzYzMmNmZTYyZjAyZjI3YTM0OC4uM2E2NWZjY2VmMTg5ZjA3Yzg5MTY1
YTljNjIyN2E1Y2FkMTQwNzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBA
IC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCi1zdGF0aWMgY29uc3QgY2hhciBnZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNU
IGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBn
ZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9z
IH07CiAKIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNy
ZWF0ZShTdHJpbmcmJiBkYXRhYmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKQEAg
LTk5LDEwICs5OSwxMCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRh
YmxlSWZOZWVkZWQoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxl
IikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIGF1
dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9N
IEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKIAogICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBl
eGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlm
IChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgIGlmIChxdWVyeSAmJiBxdWVy
eS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgd2l0aCB0aGUgcmlnaHQgdHlwZSwgY29weSBhbGwgdGhl
IGRhdGEgb3ZlciB0byBpdCBhbmQgdGhlbiByZXBsYWNlIHRoZSBuZXcgdGFibGUgd2l0aCB0aGUg
b2xkIHRhYmxlLgpAQCAtMzAyLDE5ICszMDIsMTggQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2Rh
dGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAg
IGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVy
IG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVt
YmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gIXF1ZXJ5LmdldENvbHVtbkludCgwKTsK
KyAgICByZXR1cm4gIXF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CiB9CiAKIHZvaWQgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKQEAgLTMzMCwxNCArMzI5LDE1IEBAIHZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKICAgICAgICAgc2NvcGVkU3Rh
dGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOwogfQogCi1T
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVk
U3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBM
b2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxp
dGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBpZiAoIXN0YXRlbWVudCkgewotICAg
ICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwg
cXVlcnkpOwotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlm
IChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gc3RhdGVt
ZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAg
ICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OworICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRP
ckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFi
YXNlLmlzT3BlbigpKTsKICAgICB9CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5o
CmluZGV4IGI3ZWYwMzRkMmE4NmMyNGJkMDRkZjc5NDMxN2NhYmFmYzAzZTc0NmMuLjM5OGRhN2Rj
ZmIyOGRkMzBkMmU2MGE1MTRkZGU5YjE5ZDU1MzYyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRh
YmFzZS5oCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRh
YmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0gICAg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBx
dWVyeSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUg
c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
JiwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25zdDsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0
aDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcAppbmRl
eCBmNDUwNmY4YmQxNDBmZDQ5NGMxMTAwYWNmYTQ0NTM0ZDA0YTFlN2RiLi4yNDdjYzIzZTdiYzQ5
NDUyNDczYzJhZTY5MjhjMDY5MzFjMjg0YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKQEAgLTY2LDcgKzY2LDggQEAgSWNvbkRh
dGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNlV3Jp
dGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0gU1FMaXRlU3RhdGVtZW50KG1fZGIsICJT
RUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdWZXJzaW9uJzsi
KS5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1fZGIu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBXSEVS
RSBrZXkgPSAnVmVyc2lvbic7Il9zKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1i
ZXIgPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
IDogMDsKICAgICAgICAgaWYgKGRhdGFiYXNlVmVyc2lvbk51bWJlciA+IGN1cnJlbnREYXRhYmFz
ZVZlcnNpb24pIHsKICAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJEYXRhYmFzZSB2ZXJz
aW9uIG51bWJlciAlZCBpcyBncmVhdGVyIHRoYW4gb3VyIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIg
JWQgLSBjbG9zaW5nIHRoZSBkYXRhYmFzZSB0byBwcmV2ZW50IG92ZXJ3cml0aW5nIG5ld2VyIHZl
cnNpb25zIiwKICAgICAgICAgICAgICAgICBkYXRhYmFzZVZlcnNpb25OdW1iZXIsIGN1cnJlbnRE
YXRhYmFzZVZlcnNpb24pOwpAQCAtODQsNyArODUsNyBAQCBJY29uRGF0YWJhc2U6Okljb25EYXRh
YmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNl
VwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmVkdWNlIHNxbGl0ZSBSQU0gY2FjaGUgc2l6ZSBm
cm9tIGRlZmF1bHQgMjAwMCBwYWdlcyAofjEuNWtCIHBlciBwYWdlKS4gM01CIG9mIGNhY2hlIGZv
ciBpY29uIGRhdGFiYXNlIGlzIG92ZXJraWxsLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQobV9k
YiwgIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyIpLmV4ZWN1dGVDb21tYW5kKCk7CisgICAgICAg
IG1fZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyJfcyk7CiAKICAg
ICAgICAgaWYgKGFsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6Olllcykg
ewogICAgICAgICAgICAgbV9wcnVuZVRpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxJ
Y29uRGF0YWJhc2U+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZJY29uRGF0YWJhc2U6OnBy
dW5lVGltZXJGaXJlZCk7CkBAIC0xNzUsMTcgKzE3NiwxNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6
cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3Ry
aW5nIGltcG9ydFF1ZXJ5ID0gbWFrZVN0cmluZygiU0VMRUNUIFBhZ2VVUkwudXJsLCBJY29uSW5m
by51cmwsIEljb25JbmZvLnN0YW1wIEZST00gUGFnZVVSTCBJTk5FUiBKT0lOIEljb25JbmZvIE9O
IFBhZ2VVUkwuaWNvbklEPUljb25JbmZvLmljb25JRCBXSEVSRSBJY29uSW5mby5zdGFtcCA+ICIs
IGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBub3RVc2VkSWNvbkV4cGlyYXRpb25UaW1lKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSksICc7Jyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KG1fZGIsIGltcG9ydFF1ZXJ5KTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoaW1wb3J0UXVl
cnkpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJl
cGFyZSBpY29uIHVybCBpbXBvcnQgcXVlcnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGF1dG8gcmVzdWx0ID0gcXVlcnkt
PnN0ZXAoKTsKICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9wYWdlVVJMVG9JY29uVVJMTWFw
TG9jayk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIG1fcGFn
ZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29s
dW1uVGV4dCgxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgbV9w
YWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnktPmdl
dENvbHVtblRleHQoMSkpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0K
IAogICAgIHN0YXJ0UHJ1bmVUaW1lcigpOwpAQCAtMjE0LDEyICsyMTUsMTIgQEAgdm9pZCBJY29u
RGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwog
CiAgICAgaWYgKCFtX3BydW5lSWNvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9wcnVuZUljb25z
U3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJP
TSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX3BydW5lSWNv
bnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcnVu
ZUljb25zU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00g
SWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8pOyJfcyk7CisgICAgICAgIGlmICghcHJ1bmVJY29u
c1N0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50
IHBydW5lSWNvbnMgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQg
PSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcHJ1
bmVJY29uc1N0YXRlbWVudCA9IHBydW5lSWNvbnNTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9Vbmlx
dWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5iaW5kSW50
NjQoMSwgZmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRpbWUp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSkgIT0gU1FMSVRFX09LKSB7CkBAIC0yMzAs
OCArMjMxLDggQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAgU1FM
aXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYik7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUp
IHsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hF
UkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiKTsKLSAgICAg
ICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQg
Tk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyIpOworICAgICAgICBtX2RiLmV4
ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJY29uRGF0YSBXSEVSRSBpY29uSUQgTk9UIElOIChT
RUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyJfcyk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNv
bW1hbmQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGlj
b25JRCBGUk9NIEljb25JbmZvKTsiX3MpOwogICAgIH0KICAgICBtX3BydW5lSWNvbnNTdGF0ZW1l
bnQtPnJlc2V0KCk7CiAKQEAgLTI4NSwxMiArMjg2LDEyIEBAIE9wdGlvbmFsPGludDY0X3Q+IElj
b25EYXRhYmFzZTo6aWNvbklERm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGJvb2wm
IGV4CiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25JREZvcklj
b25VUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJTRUxFQ1QgSWNvbkluZm8uaWNvbklE
LCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsi
KTsKLSAgICAgICAgaWYgKG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudC0+cHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBt
X2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5m
by5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiX3MpOworICAg
ICAgICBpZiAoIWljb25JREZvckljb25VUkxTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19F
UlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBpY29uSURGb3JJY29uVVJMIGZhaWxlZCIpOwotICAg
ICAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uSURGb3JJ
Y29uVVJMU3RhdGVtZW50ID0gaWNvbklERm9ySWNvblVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVU
b1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2ljb25JREZvckljb25VUkxTdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIGljb25VUkwpICE9IFNRTElURV9PSykgewpAQCAtMzE1LDEyICszMTYs
MTIgQEAgYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwoaW50NjRfdCBpY29u
SUQsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3Jp
dGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3NldEljb25JREZv
clBhZ2VVUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVt
ZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBQYWdl
VVJMICh1cmwsIGljb25JRCkgVkFMVUVTICgoPyksID8pOyIpOwotICAgICAgICBpZiAobV9zZXRJ
Y29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIGF1dG8gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBT
dGF0ZW1lbnQoIklOU0VSVCBJTlRPIFBhZ2VVUkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwg
Pyk7Il9zKTsKKyAgICAgICAgaWYgKCFzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgc2V0SWNvbklERm9yUGFn
ZVVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVu
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAg
ICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gc2V0SWNvbklERm9yUGFnZVVSTFN0
YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3Nl
dEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHBhZ2VVUkwpICE9IFNRTElU
RV9PSwpAQCAtMzQyLDEyICszNDMsMTIgQEAgVmVjdG9yPGNoYXI+IEljb25EYXRhYmFzZTo6aWNv
bkRhdGEoaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAg
aWYgKCFtX2ljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQg
PSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVDVCBJY29uRGF0YS5kYXRh
IEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBp
ZiAobV9pY29uRGF0YVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIGljb25EYXRhU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VM
RUNUIEljb25EYXRhLmRhdGEgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAo
Pyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGljb25EYXRhIGZhaWxlZCIpOwotICAgICAg
ICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4g
eyB9OwogICAgICAgICB9CisgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBpY29uRGF0YVN0
YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2lj
b25EYXRhU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgaWNvbklEKSAhPSBTUUxJVEVfT0spIHsKQEAg
LTM3MCwyMCArMzcxLDIwIEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6YWRkSWNv
bihjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFZlY3RvcjxjaGFyCiAgICAgQVNTRVJUKG1f
YWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlm
ICghbV9hZGRJY29uU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG1h
a2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVy
bCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25TdGF0ZW1l
bnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBhZGRJY29uU3RhdGVt
ZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVy
bCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uU3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgYWRkSWNv
biBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAgICAgIG1fYWRk
SWNvblN0YXRlbWVudCA9IGFkZEljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIo
KTsKICAgICB9CiAgICAgaWYgKCFtX2FkZEljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1f
YWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwg
IklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVFUyAoPywgPyk7Iik7Ci0g
ICAgICAgIGlmIChtX2FkZEljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFw
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29uRGF0YSAoaWNvbklELCBkYXRhKSBWQUxVRVMgKD8s
ID8pOyJfcyk7CisgICAgICAgIGlmICghYWRkSWNvbkRhdGFTdGF0ZW1lbnQpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBhZGRJY29uRGF0YSBmYWlsZWQiKTsK
LSAgICAgICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQorICAgICAgICBtX2FkZEljb25EYXRh
U3RhdGVtZW50ID0gYWRkSWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIo
KTsKICAgICB9CiAKICAgICBpZiAobV9hZGRJY29uU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29u
VVJMKSAhPSBTUUxJVEVfT0spIHsKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgSWNvbkRhdGFi
YXNlOjp1cGRhdGVJY29uVGltZXN0YW1wKGludDY0X3QgaWNvbklELCBpbnQ2NF90IHRpbWVzdGFt
cCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRl
OjpZZXMpOwogCiAgICAgaWYgKCFtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGIsICJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29u
SUQgPSA/OyIpOwotICAgICAgICBpZiAobV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gdXBkYXRlSWNvblRpbWVzdGFt
cFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlVQREFURSBJY29uSW5mbyBT
RVQgc3RhbXAgPSA/IFdIRVJFIGljb25JRCA9ID87Il9zKTsKKyAgICAgICAgaWYgKCF1cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmlu
ZyBzdGF0ZW1lbnQgdXBkYXRlSWNvblRpbWVzdGFtcCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1f
dXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0g
dXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwog
ICAgIH0KIAogICAgIGlmIChtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgxLCB0aW1lc3RhbXApICE9IFNRTElURV9PSyB8fCBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0
ZW1lbnQtPmJpbmRJbnQ2NCgyLCBpY29uSUQpICE9IFNRTElURV9PSykgewpAQCAtNDM3LDI4ICs0
MzgsMjggQEAgdm9pZCBJY29uRGF0YWJhc2U6OmRlbGV0ZUljb24oaW50NjRfdCBpY29uSUQpCiAg
ICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVz
KTsKIAogICAgIGlmICghbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKLSAgICAg
ICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0
YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQg
PSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVBhZ2VVUkxzRm9y
SWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFBh
Z2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxl
dGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJl
cGFyaW5nIHN0YXRlbWVudCBkZWxldGVQYWdlVVJMc0Zvckljb24gZmFpbGVkIik7Ci0gICAgICAg
ICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25T
dGF0ZW1lbnQgPSBkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9V
bmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7
Ci0gICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0
YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25J
RCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxldGVJY29uRGF0YVN0YXRlbWVu
dCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJF
IEljb25EYXRhLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZUljb25EYXRh
U3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQg
ZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1l
bnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1f
ZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBkZWxldGVJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNvblN0YXRlbWVu
dCkgewotICAgICAgICBtX2RlbGV0ZUljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0
YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLmljb25J
RCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlSWNvblN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZUljb25TdGF0ZW1lbnQgPSBtX2Ri
LnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5m
by5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVJY29uU3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBm
YWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVJY29uU3RhdGVt
ZW50ID0gZGVsZXRlSWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAg
IH0KIAogICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+YmluZEludDY0
KDEsIGljb25JRCkgIT0gU1FMSVRFX09LCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFn
ZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IGNlNWMyOWJhYTU4MDVjYTQyZjQ4ZWYwNTBiODMy
ZDBjZDVjY2UxMWMuLmNhZTA4MmYxM2RjZDM2OGM0ODE5NWJlMzExZjIwYTViNjY0NDhmYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBA
IC0yNzgsOSArMjc4LDkgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJ
Zk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQg
MSIpOworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAgICAgICAgIC8vIHRoaXMg
cXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZC4KLSAgICAgICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVj
bGFyZWRBc0Jsb2IoMCkpCisgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNs
YXJlZEFzQmxvYigwKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyNiw4ICsz
MjYsOCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNF
TEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFx
dWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJ
dGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMzNSwxMCArMzM1LDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5j
OjpwZXJmb3JtSW1wb3J0KCkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7
CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBxdWVy
eS0+c3RlcCgpOwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBp
dGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNT
dHJpbmcoMSkpOwotICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGl0ZW1N
YXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3Ry
aW5nKDEpKTsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC00MTIsMjcgKzQxMiwyNyBAQCB2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiBpdGVtcwogCiAgICAgLy8gSWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVu
IHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBpbi4K
ICAgICBpZiAoY2xlYXJJdGVtcykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAgICBpZiAoY2xlYXIucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGNsZWFyID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAo
IWNsZWFyKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFy
IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gY2xl
YXIuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXItPnN0ZXAoKTsKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWki
LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
U1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxl
IFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICBhdXRvIGluc2VydCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0KSB7CiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNh
bm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlKG1fZGF0YWJhc2UsICJERUxFVEUg
RlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKLSAgICBpZiAocmVtb3ZlLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJlbW92ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAoIXJl
bW92ZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0
ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNDQzLDIxICs0NDMsMjEgQEAgdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
aXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBh
cmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyByZW1v
dmUgOiBpbnNlcnQ7CisgICAgICAgIGF1dG8mIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8g
cmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOwor
ICAgICAgICBxdWVyeS0+YmluZFRleHQoMSwgaXQtPmtleSk7CiAKICAgICAgICAgLy8gSWYgdGhl
IHNlY29uZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBi
aW5kIGl0IGFzIHRoZSB2YWx1ZS4KICAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOworICAgICAgICAgICAgcXVl
cnktPmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5
LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1
bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBxdWVyeS5yZXNl
dCgpOworICAgICAgICBxdWVyeS0+cmVzZXQoKTsKICAgICB9CiAgICAgdHJhbnNhY3Rpb24uY29t
bWl0KCk7CiB9CkBAIC00OTksMzEgKzQ5OSwzMyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVs
ZXRlRW1wdHlEYXRhYmFzZSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBv
ZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGF1dG8gY291bnQgPSBbJl0geworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUi
X3MpOworICAgICAgICBpZiAoIXF1ZXJ5KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2Ui
KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGludCByZXN1
bHQgPSBxdWVyeS0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBv
ZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3Vs
dHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CisgICAgfSgp
OworICAgIGlmIChjb3VudCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGludCBjb3Vu
dCA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIHF1
ZXJ5LmZpbmFsaXplKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgaWYg
KFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIu
aXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBkYXRhYmFz
ZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFz
ZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRh
dGFiYXNlRmlsZW5hbWUpKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRl
bGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICB9CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIGlmIChTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
ZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCld
IHsKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0
aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxs
RGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgIGlmICghRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKKyAgICAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVu
YW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
U3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKaW5kZXggMDYxMGM5NDZmMmVkZjk4NmViY2E5OGI2
YTdkMjFiZjBhOTMzOTY0Ni4uYzdmMzBjMzA5MTk0NDljZjkxZDBhNWMzMDQ3YzBlNjllMDhiZGZl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3Bw
CkBAIC0xODksOCArMTg5LDggQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdp
bklkZW50aWZpZXJzKCkKICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKICAgICAg
ICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKIAotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmln
aW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTk5LDggKzE5OSw4IEBAIHZvaWQgU3RvcmFn
ZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tPcmlnaW5zKG1fb3Jp
Z2luU2V0TXV0ZXgpOwotICAgICAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQu
YWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMzE2LDE2ICszMTYs
MTYgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIAotICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9y
aWdpbklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VGaWxl
KTsKICAgICAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKKyAgICBp
ZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklk
ZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAgewpAQCAtNDA0LDIzICs0MDQsMjMgQEAg
dm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmln
aW5zIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmln
aW4sIHBhdGggRlJPTSBPcmlnaW5zIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoIWNhbkRlbGV0
ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpCisgICAgd2hpbGUgKChyZXN1bHQg
PSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoIWNhbkRl
bGV0ZU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2NsaWVudE11dGV4KTsKICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlm
eU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApAQCAtNDQxLDEyICs0NDEsMTIgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZUFsbE9yaWdpbnMoKQogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAgICAg
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJP
TSBPcmlnaW5zIik7Ci0gICAgICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgIGlmICghZGVs
ZXRlU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAg
ICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdo
ZXJlIG9yaWdpbj0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iX3MpOworICAgIGlm
ICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBh
cmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRl
eHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4g
JyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNjE0LDE3ICs2MTQsMTcgQEAgU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjpkYXRh
YmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogCiAgICAg
U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVy
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmIChwYXRoU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHBhdGhTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVS
RSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCFwYXRoU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMn
Iiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9Ci0gICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlm
aWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgcGF0aFN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaW50IHJlc3VsdCA9
IHBhdGhTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBwYXRoU3RhdGVtZW50LmdldENv
bHVtblRleHQoMCk7CisgICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7
CiB9CiAgICAgCiBsb25nIGxvbmcgU3RvcmFnZVRyYWNrZXI6OmRpc2tVc2FnZUZvck9yaWdpbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDgxNTc0N2NlNzQ2Y2QxYTM5NTk0ODI2NGE3Nzg3YjA5YTJjOTg5
NTYuLjJhNDIxOTY1MmMxNWQxNDRkZmQ3MmRkM2IxOWZhYzNjMDc3MWNjODYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1v
ZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50
IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJh
Y2tlclRlc3QubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGRUb0RhdGFiYXNlc1RhYmxl
KToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlua0NvdW50KCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJh
Y2tlclRlc3QubW0KaW5kZXggNjY4MmJmNDU4NjY2MTE1NTNmMTBhMTdlNzJhNzI5ZWNhYTY5NThj
NC4uMmM3ZjQ0NGU4YmM4YWViOTA2YzBiYjkwYTY5Yjk1NTNjNzE4MTMxNiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRl
c3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFi
YXNlVHJhY2tlclRlc3QubW0KQEAgLTY2LDEyICs2NiwxMiBAQCBzdGF0aWMgdm9pZCBhZGRUb0Rh
dGFiYXNlc1RhYmxlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBjb25zdCBTZWN1cml0eU9y
aWdpbgogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwogICAgIGRhdGFiYXNlLm9wZW4oZGF0
YWJhc2VQYXRoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBhZGREYXRhYmFzZVN0YXRlbWVudChk
YXRhYmFzZSwgIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxV
RVMgKD8sID8sID8pOyIpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LnByZXBhcmUoKTsKLSAg
ICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlm
aWVyKCkpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNl
TmFtZSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMywgbmV3RGF0YWJhc2VQ
YXRoKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgIGlm
IChhdXRvIGFkZERhdGFiYXNlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywg
Pyk7Il9zKSkgeworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQt
PmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFtZSk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBuZXdEYXRhYmFzZVBhdGgpOworICAgICAgICBhZGREYXRhYmFzZVN0
YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICB9CiAKICAgICBkYXRhYmFzZS5jbG9zZSgp
OwogfQo=
</data>
<flag name="commit-queue"
          id="449541"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428585</attachid>
            <date>2021-05-13 17:46:35 -0700</date>
            <delta_ts>2021-05-13 18:08:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513174635.patch</filename>
            <type>text/plain</type>
            <size>268193</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3MmQ3MjVjNzQxODM3YmVhZmYyN2Zl
Nzk1ZWI3NDIyZDg3ZjdhMDYuLmRmMDZmOTY3ZGY2OWQ2YWE1OGNlNDIyMDAyNWY5ZWU1ZDcyNmNm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlu
a0NvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDZkN2Q2NTdmOWExNmUzYmRhOWUwYmU0MDQ1NGI3ZGIx
ODE4NDcxLi5lYTllZTA2MzkzZTNjNmM0Y2MwOTRhOWYxNzZiZDAzNTVkYzIxMGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNy
ZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBUaGUgU1FMaXRlU3RhdGVtZW50IGNv
bnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2UgbmV2ZXIgaGF2ZSBhCisgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVuICJwcmVwYXJlZCIuIE9ubHkgdGhl
IFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBjb25zdHJ1Y3QgU1FMaXRlU3RhdGVt
ZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBhc3MKKyAgICAgICAgICBhIFNRTGl0
ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgU1FMaXRlU3RhdGVtZW50
IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFORCBwcmVwYXJlIGEgU1FMaXRlU3Rh
dGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisgICAgICAgICAgU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEgaGVhcCBvbmUuIFRoZXNlIGZ1bmN0
aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+IHR5cGUgc28gdGhleSB3aWxsIGVp
dGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9yIGFu
IHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAgICAgIC0gVGhlIHByZXBhcmUqU3Rh
dGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcgYWxsb2NhdGlvbnMgaW4gbW9zdAor
ICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMgdGFraW5nIGluIHRoZSBxdWVyeSBh
cyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBmaW5hbGl6ZSgpIGZ1bmN0aW9uIG9u
IFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cworICAgICAgICAgIGFy
ZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0
ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlvbnMuIFRoZSBTUUxpdGVTdGF0ZW1l
bnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVtZW50CisgICAgICAgICAgc28gdXNl
cnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0ZW1lbnQgaWYgdGhleSBuZWVkIHRo
ZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBhdCBhIGNlcnRhaW4gcG9pbnQgKGUu
Zy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAgICAgIC0gRHJvcCB0aGUgcHJlcGFy
ZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1lbnQgbWVtYmVyIGZ1bmN0aW9ucyBu
b3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBhcmUgYWx3YXlzIHByZXBhcmVkLgor
ICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5IGFzIGEgU3RyaW5nIGRhdGEgbWVt
YmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAgICAgICBUaGlzIGlzIG5vIGxvbmdl
ciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUgcHJlcGFyZSBzdGVwIGFmdGVyIHRo
ZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtlcyB0aGUgU1FMaXRlU3RhdGVtZW50
IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Y3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVG
b3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpyZXNldEFuZFJlYmluZFByZUlu
ZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRW
YWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVO
YW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5v
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFu
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnF1b3RhTm9Mb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1wdHkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRp
bmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNlYXJjaENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERvbWFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZXhl
Y3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJldHVybnNB
dExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0YWJs
ZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZE51bGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVu
dURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OnZlcmlm
eVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmV4
ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmNy
ZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisKIDIwMjEtMDUtMTMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBXazIgXSBtZWRp
YS9tZWRpYS1mcmFnbWVudHMvVEMwMDUxLmh0bWwgaXMgZmxha2V5IGNyYXNoaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MjJmMTI1OWM4NjE5N2Y4YTdlZTg4NjQ3NGE0ZjMwOWQzM2VmMjEuLmVmZTRmYjZmZjUy
OGI1MDc4OWM0NWI3YWRjMGFkZDVhOWQwNmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0
ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFN0
b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKToK
KyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0
OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxldGVJY29uKToKKwog
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBy
b2Nlc3Mgc3VzcGVuc2lvbiBtYXkgYmUgZGVsYXllZCBieSB1cCB0byA1IHNlY29uZHMgYWZ0ZXIg
dGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkYXRhYmFzZSBhY3Rpdml0eQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBmYmI0MWUyNmFhMDFlMDZiMzQ4YjJmZTM5ODc5ZWFjZjM3NDBkMjdhLi40MjRiYmFk
MDk1MGIxNmYwMmVjNGVkY2Y0YTc3ZDRhNzZiZjI5NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNr
ZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IFdURjo6RmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
aXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2MGNm
ZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNmMjM3
YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVSZWYo
VCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVybiAq
bV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxj
bGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1
ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBj
bGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDogbV9y
ZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUuLmNj
ZDYzYjNkZmFiNGEzYTY5ZWFhZjkyODFkZWE2NDNlZThmZmVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2No
ZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVt
YTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAog
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM1
OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgsMTMg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiAK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2Ig
ZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVu
IGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM5
MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBp
ZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hl
bWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0Mjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
VGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNv
cmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcgKzQ1
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVj
b3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyArNTgz
LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50
TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0
YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxp
dGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVF
UyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIo
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNpb25z
IGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBkb2Vz
bid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgICAg
IC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFi
YXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFi
YXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBz
cWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUlu
Zm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVS
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJvb2wg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZShj
b25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9i
amVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZv
OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4SW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsK
LSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1h
cC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8gX1Rl
bXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgICAg
IGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAgICAg
fQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAi
U0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3JlUmVj
b3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFs
dWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5nZXQo
eyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtl
eUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZl
cik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJl
Y29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7
Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNv
bnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYgKHNx
bC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRoZSBp
bmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVz
JykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDAw
LDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVpbnQ2
NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNp
b24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9l
cyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNp
b24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwxNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9
IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBr
ZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0g
c3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5h
bWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBr
ZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBr
ZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmpl
Y3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtl
eVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDExICsx
MDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZN
b3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTEw
NTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwg
bmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJ
bmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBG
Uk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9t
IHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAg
ICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKICAg
ICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4S2V5
UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wg
bXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVuaXF1
ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0g
c3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBk
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQpOwog
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8
IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSArMTE2
MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUn
OyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3MpOwor
ICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJl
IHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7
Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJf
cyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENvbHVt
blRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRv
ZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJz
aW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQsMTAg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaW5m
by5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAgICAg
IG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVlID0g
PyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJp
bmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAoIXNx
bAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5l
d1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMTcsMTIgKzMwMjEsMTIgQEAgdm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3Jl
ZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmls
ZXM7Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0
byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJP
TSBCbG9iRmlsZXM7Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQo
c3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwu
c3RlcCgpOworICAgICAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0RPTkUpCkBAIC0zMDYxLDE0ICszMDY1LDEzIEBAIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhCiAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQog
Ci0gICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7
CisgICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQog
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAg
IGlmIChtX3NxbGl0ZURCKSB7Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURC
LCBzdGF0ZW1lbnQpOwotICAgICAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0
PHNpemVfdD4oc3FsKV0tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2Nh
Y2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAg
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3RhdGVtZW50KTsKKyAgICAgICAgaWYgKHNxbFN0YXRlbWVudCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gc3FsU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0uZ2V0KCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggYzJjZWQ4NDE5MzAw
YjVhOGM1OGE4ZTg0MDIyMmYyNTU2MTI1YjM1Yy4uZjI4OTA4Y2E1MTVlN2I5YjJmZmY4NDg4YzAw
NmQyYjBlODFiYmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVTUUxpdGVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRVcHBlcktleS5pc051bGwoKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOwogCi0gICAgbV9zdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKSwgc3FsKTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChwcmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBtX3N0YXRlbWVudCA9IHN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogCiAgICAgcmV0dXJuIGJpbmRBcmd1bWVudHMo
KTsKIH0KQEAgLTM0MSwxMiArMzQxLDEyIEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpyZXNldEFu
ZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkoKQogCiAgICAgYXV0byYgZGF0YWJh
c2UgPSBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpOwogICAg
IGlmICghbV9wcmVJbmRleFN0YXRlbWVudCkgewotICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCBidWlsZFByZUluZGV4U3Rh
dGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcmVJbmRleFN0
YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKKyAgICAgICAgaWYgKCFwcmVJbmRleFN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBwcmUgc3RhdGVt
ZW50IC0gJyVzJyIsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50ID0gcHJlSW5k
ZXhTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVJbmRleFN0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTU4OCw5ICs1
ODgsOCBAQCBTUUxpdGVJREJDdXJzb3I6OkZldGNoUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50
ZXJuYWxGZXRjaE5leHRSZWNvcmQoU1FMaXRlQ3VycwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50IHx8IG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5k
IG9iamVjdFN0b3JlSUQgPSA/OyIpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0
byBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhU
KSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAppbmRleCBhYjQ3ODI2YzgzZWJiNThiNzdiNGE2MTUyNzEzOTIxMzNjZjg0
MGU2Li5lNzRlMjhmNWI5ZTVmNzlmYzVkNWNkMGNlNzY2Y2EwZGRmMWJmNDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTEzLDE4
ICsxMTMsMTUgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
bWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHZhbHVlKTsKIAotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0
YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNCwxNyArMTMxLDE1IEBA
IHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zCiAKIHN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3Vs
dEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHN0YXRlbWVudC5lcnJvcigpLCBxdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTcxNCw4ICs3MDksOCBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gc3FsaXRlRGF0YWJhc2UoKS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CkBAIC03MjMsOCArNzE4LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFt
ZXM7CiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAobmFtZSAhPSB1bnF1YWxpZmllZEluZm9UYWJsZU5hbWUp
CiAgICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChuYW1lKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
aW5kZXggMGFkM2I0ODAyM2YxZjk2ZWFiOWJjZjRmNzcyZGU0OTMzMDdlYmY4NC4uYjdlMTdhODc0
ZDk3MGJlNmJjNWQzMTk2NzYzMWIyYmYzYTNjZDQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjM1LDE1
ICsyMzUsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2Nr
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3Jp
Z2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCkBAIC0yNTYsMTUgKzI1NiwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzRW50cnlGb3JEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0YWJhc2UuIFNldCB1cCBh
IHF1ZXJ5IHRvIGFzayBmb3IgdGhlIGRiIG9mIGludGVyZXN0OgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAotICAgIHJldHVybiBzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1c7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0
aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87
Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICgh
Y3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUg
JXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
RmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3Rz
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVu
dC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZp
bGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0g
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwor
ICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkp
OwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNR
TElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9N
IERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZE
b2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
IApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFz
ZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdp
biwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5h
bWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewot
ICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
Y2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRh
YmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGlu
IHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBp
cyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIg
Y29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQot
ICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNl
dCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBu
ZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMg
Zm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIK
KyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRl
cm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQn
cyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAg
ICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9
PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5h
bWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAg
IHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0
YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVu
dC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3
MSwxNSArNjczLDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3Rh
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luCiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBx
dW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBsCiAK
ICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2lu
ICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5l
d09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9
PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAgICBpZiAoIWVy
cm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
Ci0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
c3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRp
bCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21t
YW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBk
YXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIG9yaWdpblN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBv
cmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0
YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwot
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAg
ICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyAr
MTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Ug
JXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
OTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRh
dGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
ID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmls
ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0x
MjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZp
bGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQg
d2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3Jp
dGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9
IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsi
X3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVk
MS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAt
MTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRi
KQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlm
eSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1l
bnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHBy
ZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBj
b3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQu
YXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAi
aW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0
ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90
IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUs
IHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVt
YmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkg
bWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBp
ZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkg
eworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRT
ZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0
Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1l
bnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5j
b2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVt
blZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYjA4MDMwYzliNDFmMjcxZTdhYTMyN2MzYWU0
ZWM0ZjYzMGE3MDcyMS4uNWYwNGE3MmZjYjRjN2ExZGQ5MzkyMjAwOTM0NTFiNTM3ODgzZTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJM
JiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBu
ZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAg
ICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25z
dCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3Jh
Z2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIp
KTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICBncm91cC5z
ZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3Vw
OwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
ZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RI
YXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVy
bCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNo
ZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
aW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1l
bW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAg
IC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhl
IG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcg
VVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2Vz
dENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFu
aWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkp
KTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5n
KCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25z
dCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAg
IGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0
b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
KSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNo
ZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNl
dChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3Jk
IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBi
ZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhp
c3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3Rh
IG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVv
dGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hF
UkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhl
IHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZh
dWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJv
b2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
cXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAs
MTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2Fn
ZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmln
aW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAg
IC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8g
YSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2lu
ID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hl
R3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBD
YWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1c2FnZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4Nywy
MyArNDg3LDIzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFp
bmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAgICAgICAgICAgICAgICAgIiBX
SEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDAp
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVy
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0
aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZv
ciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9m
Q2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51
bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1h
aW5pbmdTaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVt
YWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMg
U0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRh
KCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0
KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50
KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3Rh
dGVtZW50LnZhbHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01B
IHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VE
KHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkp
ID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1p
dCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0
b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBA
IC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5
IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVz
dFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwg
bWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RV
UkwoKSkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQo
c3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAg
LTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91
cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNh
Y2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFs
bG93bGlzdCgpOwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOwor
ICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUg
b25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAg
ICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAg
ICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFs
bGJhY2tVUkxzKCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFs
bGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkws
IGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFy
ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwg
Y2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQs
MTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwg
cGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxl
U3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRh
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5n
IHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2Ug
ZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJl
LCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgx
MywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAg
ICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0Rmls
ZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsK
LSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxv
YigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwor
ICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQt
PmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2gg
d2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0Mywz
NiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhl
YWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAg
ICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRv
IHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVy
cywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywg
PywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
YXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBj
YWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2Ug
YWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICBy
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRh
SWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291
cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Cisg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVy
cyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChy
ZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxh
c3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hl
IGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/
LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMg
KD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFn
ZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVt
ZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
QEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJU
KHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRh
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
Q2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRy
eVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VU
IHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwg
cmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNl
LT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUo
KSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2
LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBB
IHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBz
aXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYg
KCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6
ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEz
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwot
ICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGlu
c2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3
ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
Q2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1
cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlv
bkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2
LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4g
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7
CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29k
ZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5O
RVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNv
dXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVz
Q29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVz
b3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMg
SU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVS
ZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAg
IGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2Fj
aGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURp
cmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0Owot
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2Fj
aGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwot
ICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7Cisg
ICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAg
ICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAt
MTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgz
KTsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAot
ICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7
CisgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
NSk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAog
ICAgICAgICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
dXJsLCByZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsx
MTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBj
YWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAg
YWxsb3dsaXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBW
ZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVS
TCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgYWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0
KGFsbG93bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxh
Zy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3Rz
IFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAg
Ci0gICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJl
c3VsdCA9IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hl
IG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVl
c3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBj
YWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBt
YW55IHJvd3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8g
TG9hZCBmYWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFj
a1VSTHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFs
bGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBzdG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cp
IAotICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZh
bGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tT
dGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkp
OwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0
YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hl
cyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRs
eSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5
IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
X3MpOworICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1l
bnQpOworICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAg
ICAgfQpAQCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hl
R3JvdXBzIik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0g
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMu
YXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxl
IChzZWxlY3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVy
bHM7CiB9CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAg
aWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZl
c3RVUkwpOworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAg
ICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNh
Y2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdI
RVJFIGNhY2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdy
b3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwot
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVt
ZW50KTsKKyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3Rh
dGVtZW50LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDEx
LDIwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBp
biBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVS
ZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0
aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAg
ICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENh
Y2hlUmVzb3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldI
RVJFIChTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURh
dGEucGF0aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAg
ICAKLSAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAo
IXNlbGVjdFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhz
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNR
TElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSBzZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgp
ID09IFNRTElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0
ZWRDYWNoZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEs
IGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgcGF0
aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOwog
ICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUgPSAwOwogICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCAyNDI1ZjgzZDcy
NjI2ZTBlNTBkZmM2YzZjYjk1MDY3ZjA2ZjU3NWY1Li42ODA4YjE0M2RkNDY5OTRkZmJhYjY4ZWZi
ODQ4ODJmOTdiNDE5YmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKQEAgLTE5Myw3ICsxOTMsOCBAQCB2b2lkIENvb2tp
ZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpZiAoaXNPbk1lbW9yeSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lv
biJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzMsMjUgKzI3NCwyNSBAQCBib29sIENvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiQ29va2ll
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3Jp
dHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFp
bnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9
IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAl
ZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGlu
dGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAg
IExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVj
aywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7Cisg
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAg
ICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiQ29va2llIGRh
dGFiYXNlIGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5k
YXRhKCkpOwpAQCAtMzg2LDIwICszODcsMTYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENv
b2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKIAog
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdFVybCB9Owog
Ci0gICAgY29uc3QgU3RyaW5nIHNxbCA9Ci0gICAgICAgICJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRv
bWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tp
ZSBXSEVSRSAiXAorICAgIGF1dG8gcHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2Vj
dXJlLCBzZXNzaW9uIEZST00gQ29va2llIFdIRVJFICJcCiAgICAgICAgICIoTk9UICgoc2Vzc2lv
biA9IDApIEFORCAoZXhwaXJlcyA8ID8pKSkiCiAgICAgICAgICJBTkQgKGh0dHBvbmx5ID0gQ09B
TEVTQ0UoTlVMTElGKD8sIC0xKSwgaHR0cG9ubHkpKSAiXAogICAgICAgICAiQU5EIChzZWN1cmUg
PSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBzZWN1cmUpKSAiXAogICAgICAgICAiQU5EIChzZXNz
aW9uID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2Vzc2lvbikpICJcCiAgICAgICAgICJBTkQg
KChkb21haW4gPSA/KSBPUiAoZG9tYWluIEdMT0IgPykpICJcCi0gICAgICAgICJPUkRFUiBCWSBs
ZW5ndGgocGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiOwotCi0gICAgYXV0byBwc3RtdCA9IG1ha2VV
bmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworICAgICAgICAiT1JERVIg
QlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIl9zKTsKICAgICBpZiAoIXBzdG10KQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcHN0bXQtPnByZXBhcmUoKTsKICAg
ICBwc3RtdC0+YmluZEludDY0KDEsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
Lm1pbGxpc2Vjb25kcygpKTsKICAgICBwc3RtdC0+YmluZEludCgyLCBodHRwT25seSA/ICpodHRw
T25seSA6IC0xKTsKICAgICBwc3RtdC0+YmluZEludCgzLCBzZWN1cmUgPyAqc2VjdXJlIDogLTEp
OwpAQCAtNDExLDkgKzQwOCw2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJE
Qjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgZWxzZQog
ICAgICAgICBwc3RtdC0+YmluZFRleHQoNiwgU3RyaW5nKCIqLiIpICsgcmVnaXN0cmFibGVEb21h
aW4uc3RyaW5nKCkpOwogCi0gICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQogICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGlsZSAocHN0bXQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CkBAIC00NTMsNyArNDQ3LDYgQEAgT3B0aW9uYWw8VmVj
dG9yPENvb2tpZT4+IENvb2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QKICAgICAgICAgY29va2llLnNlc3Npb24gPSBjb29raWVTZXNzaW9uOwogICAg
ICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwogICAgIH0KLSAgICBwc3RtdC0+
ZmluYWxpemUoKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtNDYzLDExICs0NTYsMTEg
QEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgIFZlY3Rv
cjxDb29raWU+IHJlc3VsdDsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZyBzcWwgPSAi
U0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1
cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3M7Ci0gICAgYXV0byBwc3RtdCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworCisgICAgYXV0byBwc3RtdCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBh
dGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3MpOwog
ICAgIGlmICghcHN0bXQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcHN0bXQtPnByZXBh
cmUoKTsKKwogICAgIHdoaWxlIChwc3RtdC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKICAgICAg
ICAgQ29va2llIGNvb2tpZTsKICAgICAgICAgY29va2llLm5hbWUgPSBwc3RtdC0+Z2V0Q29sdW1u
VGV4dCgwKTsKQEAgLTQ4Miw3ICs0NzUsNiBAQCBWZWN0b3I8Q29va2llPiBDb29raWVKYXJEQjo6
Z2V0QWxsQ29va2llcygpCiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gKHBzdG10LT5nZXRDb2x1
bW5JbnQoNykgPT0gMSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsK
ICAgICB9Ci0gICAgcHN0bXQtPmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNTcxLDE2ICs1NjMsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYKIAogSGFzaFNldDxT
dHJpbmc+IENvb2tpZUphckRCOjphbGxEb21haW5zKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOwotICAgIHN0YXRl
bWVudC5wcmVwYXJlKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBIYXNoU2V0PFN0cmluZz4gZG9tYWluczsKLSAgICB3
aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gZG9t
YWluID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBkb21haW4gPSBzdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIGRvbWFpbnMuYWRkKGRvbWFpbik7CiAgICAgfQot
Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIGRvbWFpbnM7CiB9CiAKQEAg
LTYzNywxMCArNjI4LDkgQEAgYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCiAK
IHZvaWQgQ29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBz
cWwpCiB7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBTUUxJVEVfT0spOwotICAgIG1fc3RhdGVtZW50
cy5hZGQoc3FsLCBXVEZNb3ZlKHN0YXRlbWVudCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQp
OworICAgIG1fc3RhdGVtZW50cy5hZGQoc3FsLCBzdGF0ZW1lbnQubW92ZVRvVW5pcXVlUHRyKCkp
OwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChj
b25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQzLDEzIEBAIFNRTGl0ZVN0YXRlbWVudCYg
Q29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogCiBib29s
IENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3Rh
dGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5lcnJvcigp
KSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9yOiAlcyIs
IHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
ICAgICBpZiAoIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0YSgpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggYzIzOWI0
NDIwYjMyNWIwMDY0YzRmNmFiNjliMWI4MWI3YTBhZDdiZi4uYjZkZTMxZDEyYzlhNzBmNzAxYzMw
NjQ5MTVkY2I3ODUxNzMzNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiAKICAgICB7
CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKLSAgICAgICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
dGVtcF9zdG9yZSA9IE1FTU9SWTsiX3MpLmV4ZWN1dGVDb21tYW5kKCkpCisgICAgICAgIGlmICgh
ZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykpCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3RvcmUg
dG8gbWVtb3J5Iik7CiAgICAgfQogCkBAIC0xOTcsMTAgKzE5NywxMCBAQCB2b2lkIFNRTGl0ZURh
dGFiYXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiB7CiAgICAgbV91c2VXQUwgPSB0cnVlOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHdhbFN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBq
b3VybmFsX21vZGU9V0FMOyJfcyk7Ci0gICAgICAgIGlmICh3YWxTdGF0ZW1lbnQucHJlcGFyZUFu
ZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gd2FsU3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKKyAgICAgICAgaWYg
KHdhbFN0YXRlbWVudCAmJiB3YWxTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAj
aWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtb2RlLCAid2FsIikpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJqb3VybmFs
X21vZGUgb2YgZGF0YWJhc2Ugc2hvdWxkIGJlICdXQUwnLCBidXQgaXMgJyVzJyIsIG1vZGUudXRm
OCgpLmRhdGEoKSk7CiAjZW5kaWYKQEAgLTIxMCw5ICsyMTAsOSBAQCB2b2lkIFNRTGl0ZURhdGFi
YXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiAKICAgICB7CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGNoZWNrcG9pbnRTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgd2FsX2NoZWNr
cG9pbnQoVFJVTkNBVEUpIl9zKTsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQucHJl
cGFyZUFuZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBpZiAoY2hlY2twb2lu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgIGF1dG8gY2hlY2twb2ludFN0YXRl
bWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSki
X3MpOworICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudCAmJiBjaGVja3BvaW50U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnRT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSkKICAgICAgICAgICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJTUUxpdGUgZGF0YWJhc2UgY2hlY2twb2ludCBpcyBibG9ja2VkIik7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGNo
ZWNrcG9pbnQ6ICVzIiwgbGFzdEVycm9yTXNnKCkpOwpAQCAtMjcyLDggKzI3Miw4IEBAIGludDY0
X3QgU1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKCkKICAgICB7CiAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZh
bHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBt
YXhfcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOworICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0
ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxl
QXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTI5Myw5ICsyOTMsOCBAQCB2b2lkIFNRTGl0
ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpCiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCBtYWtlU3RyaW5nKCJQUkFHTUEg
bWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKLSAgICBzdGF0ZW1lbnQucHJl
cGFyZSgpOwotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSBtYXhfcGFn
ZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCBtYXhpbXVtIHNpemUgb2YgZGF0YWJhc2UgdG8gJWxsaSBieXRlcyIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oc2l6ZSkpOwogCiAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKQEAg
LTMxMCw4ICszMDksOCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhv
cml6ZXIoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqdGhpcywgIlBSQUdNQSBwYWdlX3NpemUiX3MpOwotICAgICAgICBtX3BhZ2VTaXplID0gc3Rh
dGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgcGFnZV9zaXplIl9zKTsKKyAgICAgICAgbV9wYWdlU2l6ZSA9IHN0
YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgCiAgICAg
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQpAQCAtMzI3LDggKzMyNiw4IEBAIGlu
dDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUoKQogICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxz
ZSk7CiAgICAgICAgIC8vIE5vdGU6IGZyZWVsaXN0X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUg
My40LjEuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
ZnJlZWxpc3RfY291bnQiX3MpOwotICAgICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1l
bnQoIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7CisgICAgICAgIGZyZWVsaXN0Q291bnQgPSBz
dGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5h
YmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTM0Miw4ICszNDEsOCBAQCBpbnQ2NF90
IFNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUoKQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2Up
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vf
Y291bnQiX3MpOwotICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBh
Z2VfY291bnQiX3MpOworICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsK
ICAgICB9CiAKQEAgLTM3MSwxNCArMzcwLDIyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEJ1
c3lIYW5kbGVyKGludCgqaGFuZGxlcikodm9pZCosIGludCkpCiAgICAgICAgIExPRyhTUUxEYXRh
YmFzZSwgIkJ1c3kgaGFuZGxlciBzZXQgb24gbm9uLW9wZW4gZGF0YWJhc2UiKTsKIH0KIAotYm9v
bCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCitib29s
IFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIHF1ZXJ5KQogewot
ICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCkuZXhlY3V0ZUNvbW1hbmQoKTsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIHJldHVy
biBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworfQorCitib29sIFNR
TGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3Rh
dGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKIH0KIAogYm9vbCBTUUxpdGVE
YXRhYmFzZTo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0g
ICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5yZXR1cm5zQXRMZWFzdE9uZVJl
c3VsdCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChzcWwpOworICAg
IHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5yZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgp
OwogfQogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRh
YmxlbmFtZSkKQEAgLTM4NiwxOCArMzkzLDE1IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxl
RXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQogICAgIGlmICghaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBzdGF0ZW1lbnQgPSAiU0VMRUNUIG5hbWUg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1lID0gJyIgKyB0
YWJsZW5hbWUgKyAiJzsiOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqdGhpcywgc3RhdGVt
ZW50KTsKLSAgICBzcWwucHJlcGFyZSgpOwotICAgIHJldHVybiBzcWwuc3RlcCgpID09IFNRTElU
RV9ST1c7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFt
ZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAnIiAr
IHRhYmxlbmFtZSArICInOyIpOworICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogdm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxU
YWJsZXMoKQogewotICAgIFN0cmluZyBxdWVyeSA9ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfczsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZXM7
Ci0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5KS5yZXR1cm5UZXh0UmVzdWx0
cygwLCB0YWJsZXMpKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQgfHwgIXN0YXRlbWVudC0+cmV0dXJuVGV4dFJlc3VsdHMoMCwgdGFi
bGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NTgzLDEwICs1ODcsMTAgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6aXNBdXRvQ29tbWl0T24oKSBj
b25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0o
KQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgYXV0b192
YWN1dW0iX3MpOwotICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCk7CisgICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gMDsKKyAgICBpZiAoYXV0byBzdGF0ZW1l
bnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYXV0b192YWN1dW0iX3MpKQorICAgICAgICBh
dXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOwogICAgIGludCBlcnJv
ciA9IGxhc3RFcnJvcigpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgLy8gQ2hl
Y2sgaWYgd2UgZ290IGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byBnZXQgdGhlIHZhbHVlIG9mIHRo
ZSBhdXRvX3ZhY3V1bSBmbGFnLgogICAgIC8vIElmIHdlIGdvdCBhIFNRTElURV9CVVNZIGVycm9y
LCB0aGVuIHRoZXJlJ3MgcHJvYmFibHkgYW5vdGhlciB0cmFuc2FjdGlvbiBpbgpAQCAtNjQzLDQg
KzY0Nyw3MiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpyZWxlYXNlTWVtb3J5KCkKICAgICBzcWxp
dGUzX2RiX3JlbGVhc2VfbWVtb3J5KG1fZGIpOwogfQogCitzdGF0aWMgRXhwZWN0ZWQ8c3FsaXRl
M19zdG10KiwgaW50PiBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNl
JiBkYXRhYmFzZSwgY29uc3QgY2hhciogcXVlcnksIHNpemVfdCBxdWVyeUxlbmd0aCkKK3sKKyAg
ICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhkYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOworICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIsIHF1ZXJ5KTsKKworICAgIC8v
IFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluY2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0
ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOworICAgIC8vIHRoaXMgbGV0cyBTUUxpdGUgYXZvaWQg
YW4gZXh0cmEgc3RyaW5nIGNvcHkuCisgICAgc2l6ZV90IGxlbmd0aEluY2x1ZGluZ051bGxDaGFy
YWN0ZXIgPSBxdWVyeUxlbmd0aCArIDE7CisKKyAgICBzcWxpdGUzX3N0bXQqIHN0YXRlbWVudCB7
IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiB0YWlsID0gbnVsbHB0cjsKKyAgICBpbnQgZXJy
b3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVyeSwg
bGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciwgJnN0YXRlbWVudCwgJnRhaWwpOworCisgICAg
aWYgKGVycm9yICE9IFNRTElURV9PSykgeworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxp
dGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5LCBzcWxpdGUz
X2Vycm1zZyhkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yKTsKKyAgICB9CisKKyAgICBpZiAodGFpbCAmJiAqdGFpbCkgeworICAg
ICAgICBzcWxpdGUzX2ZpbmFsaXplKHN0YXRlbWVudCk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTUUxJVEVfRVJST1IpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9
CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJpbmcgcXVl
cnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0byBzcWxT
dGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5kYXRh
KCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRh
dGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3Io
KSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3FsU3RhdGVt
ZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBh
dXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1
ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1Ymxp
Y31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxVbmlxdWVS
ZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0g
cXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBx
dWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FM
aXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVy
cygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVl
cnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRl
bWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1l
bnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIwZmE2M2E5
OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdv
b2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsOCArMjgs
MTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFz
dENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFu
ZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5k
KEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0
IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29u
c3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB0
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBp
bnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoQVND
SUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8
U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3Rh
dGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOwor
CiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhpcyBpcyB0
aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IGRl
YThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLmJiMjZiMDljMjU5YTAzZmQ4
MWJmZTc2MmI0MjliYWRjOGE1N2Q3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQ6OlNR
TGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50
KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwgbV9zdGF0
ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NFUlQoc3Rh
dGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkKK1NRTGl0
ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVyKQorICAg
IDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQoc3RkOjpl
eGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxpemUoKTsK
IH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1lbnQ6On5T
UUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQotICAgIExv
Y2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLQotICAg
IENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKLSAgICAK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5kYXRhKCkp
OwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBu
dWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBsZXRzIFNR
TGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3RoSW5jbHVk
aW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0IGNoYXIq
IHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRpbmdOdWxs
Q2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAhPSBTUUxJ
VEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxl
ZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwpCi0gICAg
ICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lz
UHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXJyb3I7
CisgICAgaWYgKG1fc3RhdGVtZW50KQorICAgICAgICBzcWxpdGUzX2ZpbmFsaXplKG1fc3RhdGVt
ZW50KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6c3RlcCgpCiB7CiAgICAgTG9ja0hvbGRl
ciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwogCi0gICAgaWYgKCFt
X3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQogICAgIC8vIFRoZSBkYXRh
YmFzZSBuZWVkcyB0byB1cGRhdGUgaXRzIGxhc3QgY2hhbmdlcyBjb3VudCBiZWZvcmUgZWFjaCBz
dGF0ZW1lbnQKICAgICAvLyBpbiBvcmRlciB0byBjb21wdXRlIHByb3Blcmx5IHRoZSBsYXN0Q2hh
bmdlcygpIHJldHVybiB2YWx1ZS4KICAgICBtX2RhdGFiYXNlLnVwZGF0ZUxhc3RDaGFuZ2VzQ291
bnQoKTsKIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHN0ZXAgLSAlcyIsIG1fcXVlcnku
YXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBlcnJvciA9IHNxbGl0ZTNfc3RlcChtX3N0YXRlbWVu
dCk7Ci0gICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVwIGZhaWxlZCAoJWkpXG5R
dWVyeSAtICVzXG5FcnJvciAtICVzIiwgCi0gICAgICAgICAgICBlcnJvciwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsK
LSAgICB9CisgICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9S
T1cpCisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxu
RXJyb3IgLSAlcyIsIGVycm9yLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5k
bGUoKSkpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQotICAgIAotaW50IFNRTGl0ZVN0YXRlbWVu
dDo6ZmluYWxpemUoKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVkID0g
ZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FM
SVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIGZpbmFsaXplIC0gJXMiLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3FsaXRlM19maW5hbGl6ZSht
X3N0YXRlbWVudCk7Ci0gICAgbV9zdGF0ZW1lbnQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7Ci19
CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkgCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVw
YXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSByZXNldCAtICVzIiwgbV9xdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQobV9zdGF0ZW1lbnQpOwog
ICAgIHNxbGl0ZTNfY2xlYXJfYmluZGluZ3MobV9zdGF0ZW1lbnQpOwogICAgIHJldHVybiBzdGF0
dXM7CkBAIC0xMjksNDIgKzg0LDIxIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkKIAog
Ym9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKIHsKLSAgICBpZiAoIW1fc3Rh
dGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ET05F
KSB7Ci0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgZmluYWxpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RlcCgpID09IFNR
TElURV9ET05FOwogfQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuc0F0TGVhc3RPbmVS
ZXN1bHQoKQogewotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9P
SykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAg
IGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0KKyAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpCiB7
Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50
KCkpOwogICAgIEFTU0VSVChibG9iIHx8ICFzaXplKTsKICAgICBBU1NFUlQoc2l6ZSA+PSAwKTsK
IAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7Ci0K
ICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9iLCBz
aXplLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIApAQCAtMTg1LDcgKzExOSw2IEBAIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4
dCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTIwNCw3ICsxMzcsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
VGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludChpbnQgaW5kZXgsIGludCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJl
cGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjEzLDcgKzE0
NSw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdl
cikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBp
bnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+
IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJh
bWV0ZXJDb3VudCgpKTsKIApAQCAtMjIyLDcgKzE1Myw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0y
MzEsNyArMTYxLDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgs
IGRvdWJsZSBudW1iZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmROdWxsKGludCBpbmRl
eCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTI0OSwyNiArMTc4LDE5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmRWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSkKIAogdW5zaWduZWQgU1FM
aXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVCht
X2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KG1fc3RhdGVtZW50KTsKIH0K
IAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIEFTU0VSVChtX2lz
UHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBzcWxpdGUzX2RhdGFfY291bnQobV9zdGF0ZW1lbnQpOwogfQogCiBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAw
KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGVwKCkg
IT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChjb2x1bW5Db3Vu
dCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzgsMTkgKzIwMCwxNCBA
QCBib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5EZWNsYXJlZEFzQmxvYihpbnQgY29sKQogewogICAgIEFTU0VS
VChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkgewotICAgICAgICBpZiAocHJlcGFy
ZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAgICAg
cmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcoc3FsaXRlM19j
b2x1bW5fZGVjbHR5cGUobV9zdGF0ZW1lbnQsIGNvbCkpLCAiYmxvYiIpOwogfQogCiBTdHJpbmcg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNv
bCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlm
IChzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlm
IChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJl
dHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNfY29sdW1u
X25hbWUxNihtX3N0YXRlbWVudCwgY29sKSkpOwpAQCAtMjk5LDkgKzIxNiw4IEBAIFN0cmluZyBT
UUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIFNRTFZhbHVlIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDAp
OwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9
IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChjb2x1bW5D
b3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMCw5ICsyNDYs
OCBAQCBTUUxWYWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVlKGludCBjb2wpCiBT
dHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiB7CiAgICAgQVNT
RVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFy
ZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNf
Y29sdW1uX3RleHQxNihtX3N0YXRlbWVudCwgY29sKSksIHNxbGl0ZTNfY29sdW1uX2J5dGVzMTYo
bV9zdGF0ZW1lbnQsIGNvbCkgLyBzaXplb2YoVUNoYXIpKTsKQEAgLTM0MSw5ICsyNTYsOCBAQCBT
dHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiBkb3VibGUgU1FM
aXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29s
ID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gMC4wOworICAgIGlmIChzdGVw
KCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1uQ291
bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29s
dW1uX2RvdWJsZShtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM1Miw5ICsyNjYsOCBAQCBkb3VibGUg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0g
ICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FM
SVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmIChzdGVwKCkgIT0gU1FMSVRF
X1JPVykKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50KG1fc3RhdGVt
ZW50LCBjb2wpOwpAQCAtMzYzLDkgKzI3Niw4IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENv
bHVtbkludChpbnQgY29sKQogaW50NjRfdCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0
KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50
KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9pbnQ2NChtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM3
NSw3ICsyODcsNyBAQCBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJp
bmcoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRl
bWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKHN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoY29sdW1u
Q291bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA5LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6
OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkKIHsK
ICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJl
QW5kU3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MjMsNyArMzM1LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3Rv
cihpbnQgY29sLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49
IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKKyAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgcmVzdWx0
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NTEsMTkgKzM2MywxMyBAQCBi
b29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0
cmluZz4mIHYpCiAKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAg
ICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAg
ICAgdi5hcHBlbmQoZ2V0Q29sdW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7
CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRp
bmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4
dFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc3LDEzIEBAIGJvb2wgU1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+JiB2KQog
ewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxp
emUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVu
ZChnZXRDb2x1bW5JbnQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmICht
X2RhdGFiYXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMg
ZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHM6IEVy
cm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTQ5MSwxOSArMzkxLDEzIEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50
OjpyZXR1cm5JbnQ2NFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGludDY0X3Q+JiB2KQogewogICAg
IHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsK
LSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRD
b2x1bW5JbnQ2NChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgaWYgKG1fZGF0
YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVzdWx0cyBmcm9t
IGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExP
RyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzOiBFcnJv
ciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC01MTEsMjUgKzQwNSwxNCBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6
cmV0dXJuRG91YmxlUmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8ZG91YmxlPiYgdikKIHsKICAgICB2
LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0g
ICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29s
dW1uRG91YmxlKGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRh
YmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxz
ZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20g
ZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9H
KFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzOiBFcnJv
ciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1ib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNFeHBpcmVkKCkKLXsKLSAgICBy
ZXR1cm4gIW1fc3RhdGVtZW50OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKaW5kZXggYTdhY2RlNWNm
YzViMmQzNTYyYjFmYjUxZmQ2YTcxYmQ5NWNjZTQwOC4uZWY1ZWU4MzEwOGIxNWMzNGI1Y2IyMTI4
OTQ4ZDU4ZjlmZDdkN2EzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCArMzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBTUUxpdGVTdGF0ZW1lbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNR
TGl0ZVN0YXRlbWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYsIGNvbnN0IFN0cmlu
ZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAgIAotICAgIFdF
QkNPUkVfRVhQT1JUIGludCBwcmVwYXJlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpOwogICAgIFdFQkNPUkVf
RVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwpAQCAtNTAs
MjMgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBiaW5kUGFy
YW1ldGVyQ291bnQoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGludCBzdGVwKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgaW50IGZpbmFsaXplKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50
IHJlc2V0KCk7CiAgICAgCi0gICAgaW50IHByZXBhcmVBbmRTdGVwKCkgeyBpZiAoaW50IGVycm9y
ID0gcHJlcGFyZSgpKSByZXR1cm4gZXJyb3I7IHJldHVybiBzdGVwKCk7IH0KLSAgICAKLSAgICAv
LyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgorICAgIC8vIHN0ZXBz
IGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgogICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgMyBz
dGVwcyBzdWNjZWVkIHdpdGggc3RlcCgpIHJldHVybmluZyBTUUxJVEVfRE9ORQogICAgIC8vIHJl
dHVybnMgZmFsc2Ugb3RoZXJ3aXNlICAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVD
b21tYW5kKCk7CiAgICAgCi0gICAgLy8gcHJlcGFyZXMsIHN0ZXBzLCBhbmQgZmluYWxpemVzLiAg
CisgICAgLy8gc3RlcHMsIGFuZCBmaW5hbGl6ZXMuCiAgICAgLy8gcmV0dXJucyB0cnVlIGlzIHN0
ZXAoKSByZXR1cm5zIFNRTElURV9ST1cKICAgICAvLyByZXR1cm5zIGZhbHNlIG90aGVyd2lzZQog
ICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsKIAotICAgIGJvb2wgaXNFeHBpcmVk
KCk7Ci0KICAgICAvLyBSZXR1cm5zIC0xIG9uIGxhc3Qtc3RlcCBmYWlsaW5nLiAgT3RoZXJ3aXNl
LCByZXR1cm5zIG51bWJlciBvZiByb3dzCiAgICAgLy8gcmV0dXJuZWQgaW4gdGhlIGxhc3Qgc3Rl
cCgpCiAgICAgaW50IGNvbHVtbkNvdW50KCk7CkBAIC05MCwxNSArODQsMTQgQEAgcHVibGljOgog
CiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQog
ICAgIAotICAgIGNvbnN0IFN0cmluZyYgcXVlcnkoKSBjb25zdCB7IHJldHVybiBtX3F1ZXJ5OyB9
Ci0gICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTUUxpdGVEYXRhYmFzZTsKKyAgICBT
UUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBzcWxpdGUzX3N0bXQqKTsKKworICAgIGlu
dCBmaW5hbGl6ZSgpOworCiAgICAgU1FMaXRlRGF0YWJhc2UmIG1fZGF0YWJhc2U7Ci0gICAgU3Ry
aW5nIG1fcXVlcnk7CiAgICAgc3FsaXRlM19zdG10KiBtX3N0YXRlbWVudDsKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIGJvb2wgbV9pc1ByZXBhcmVkIHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAKaW5kZXggNmY3ZjRiYTE2NjBiNGY3YTk3NzIxMmM4NTYz
YTQzYzY2NWUzMGI1NC4uNDYxYTJjN2ZjZGE4OWI4MzdhNTk5MDNlYmNmYTNkNWIyODNjNTYyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURC
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIu
Y3BwCkBAIC0xMzAsMjUgKzEzMCwyNSBAQCBib29sIFNlYXJjaFBvcHVwTWVudURCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiU2VhcmNo
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3Jp
dHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFp
bnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9
IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAl
ZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGlu
dGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAg
IExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVj
aywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7Cisg
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAg
ICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiU2VhcmNoIGF1
dG9zYXZlIGRhdGFiYXNlIGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQu
YXNjaWkoKS5kYXRhKCkpOwpAQCAtMjI0LDE3ICsyMjQsMTkgQEAgYm9vbCBTZWFyY2hQb3B1cE1l
bnVEQjo6b3BlbkRhdGFiYXNlKCkKIAogdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6Y2xvc2VEYXRh
YmFzZSgpCiB7Ci0gICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgbV9sb2Fk
U2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX2luc2Vy
dFNlYXJjaFRlcm1TdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1fcmVtb3ZlU2VhcmNo
VGVybXNGb3JOYW1lU3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX2RhdGFiYXNlLmNs
b3NlKCk7Ci0gICAgfQorICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9sb2FkU2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50ID0gbnVsbHB0cjsK
KyAgICBtX2luc2VydFNlYXJjaFRlcm1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVtb3Zl
U2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlLmNs
b3NlKCk7CiB9CiAKIHZvaWQgU2VhcmNoUG9wdXBNZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24o
KQogewotICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFH
TUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAg
ICBpbnQgdmVyc2lvbiA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDog
MDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI3MSwyMyArMjczLDI1IEBAIHZvaWQgU2VhcmNoUG9wdXBNZW51REI6OmNoZWNrU1FMaXRl
UmV0dXJuQ29kZShpbnQgYWN0dWFsKQogCiBpbnQgU2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVT
aW1wbGVTcWwoY29uc3QgU3RyaW5nJiBzcWwsIGJvb2wgaWdub3JlRXJyb3IpCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBz
dGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAg
IGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1l
bnQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBzdGF0ZW1lbnQuZXJyb3IoKTsKKyAgICB9CiAK
LSAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KTsKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CiAgICAgaWYgKHJldCAhPSBTUUxJVEVfT0sgJiYgcmV0ICE9IFNRTElURV9ET05F
ICYmIHJldCAhPSBTUUxJVEVfUk9XICYmICFpZ25vcmVFcnJvcikKICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gZXhlY3V0ZSAlcyBlcnJvcjogJXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotCiAgICAgcmV0dXJuIHJldDsKIH0KIAogc3RkOjp1
bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gU2VhcmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBh
cmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJl
dCA9IHN0YXRlbWVudC0+cHJlcGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0g
U1FMSVRFX09LKTsKLSAgICByZXR1cm4gc3RhdGVtZW50OworICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1l
bnQpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gc3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25EYXRhYmFzZS5jcHAKaW5kZXggODkyYzNmNDllOTAxNGEzNWZlOTI5ODRlZjlhMjkw
NGE3YmRlZDU2MC4uYjBjNzE2MWE4MDZhODY4ZWM0ZmY0NDc2NTNiYjg1M2ZjMDk2ODQ1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRp
b25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKQEAgLTI4NSwxMSArMjg1LDExIEBAIFN0cmluZyBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKQogICAgIFN0cmlu
ZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3Ig
YW4gZXhpc3RpbmcgcmVjb3JkcyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudCgqbV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiI7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5
cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBw
cmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiJf
czsKIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFp
bC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzAxLDcg
KzMwMSw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRz
VGFibGUoKQogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAg
ICAgICByZXR1cm4gIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZv
ciB0aGUgUmVjb3JkcyB0YWJsZS4iOwogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNF
bXB0eSgpKTsKQEAgLTQyNywxOCArNDI3LDE4IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fZGF0YWJhc2UpOwogICAgIHRyYW5z
YWN0aW9uLmJlZ2luKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8pIl9zKTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIGluc2VydFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
KSJfcyk7CisgICAgaWYgKCFpbnNlcnRTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBzdG9y
ZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGF1dG8mIHNjcmlwdFN0b3JhZ2UgPSB0aGlzLT5z
Y3JpcHRTdG9yYWdlKCk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiByZW1vdmVkUmVn
aXN0cmF0aW9ucykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAi
REVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSA/Iik7Ci0gICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIHJlZ2lz
dHJhdGlvbi50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3Fs
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9
IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUg
a2V5ID0gPyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50CisgICAgICAgICAgICB8
fCBkZWxldGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNlS2V5
KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VX
b3JrZXIsICJGYWlsZWQgdG8gcmVtb3ZlIHJlZ2lzdHJhdGlvbiBkYXRhIGZyb20gcmVjb3JkcyB0
YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC00
NTcsMTkgKzQ1NywxOSBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2Vz
KGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgICAgICBXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyIGNlcnRpZmljYXRlSW5mb0VuY29kZXI7CiAgICAgICAgIGNlcnRp
ZmljYXRlSW5mb0VuY29kZXIgPDwgZGF0YS5jZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgaWYg
KHNxbC5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtleSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJh
dGlvbi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3FsLmJpbmRUZXh0KDMsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBhdGgo
KS50b1N0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg0
LCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmREb3VibGUoNSwgZGF0YS5yZWdp
c3RyYXRpb24ubGFzdFVwZGF0ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRv
U3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0
cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5i
aW5kQmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMTAsIGRhdGEucmVmZXJy
ZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDExLCBz
Y3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rl
ci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9i
KDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNv
ZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGlmIChpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJh
dGlvbi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgzLCBkYXRhLnJlZ2lzdHJhdGlvbi5z
Y29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmln
aW4oKS5kYXRhYmFzZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmREb3VibGUoNSwgZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVwZGF0
ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmlu
ZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5i
dWZmZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEx
LCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5j
b2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2Vy
dGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3RvcmUgcmVn
aXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUwMiwyNiArNTAyLDI2IEBAIFN0cmluZyBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAKICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmltcG9ydFJlY29yZHM6Iik7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9kYXRh
YmFzZSwgIlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHNxbCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3MpOworICAgIGlmICghc3FsKQogICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJldHJpZXZl
IHJlZ2lzdHJhdGlvbnMgZnJvbSByZWNvcmRzIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgIikgLSAiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBpbnQgcmVz
dWx0ID0gc3FsLnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAKLSAgICBm
b3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNxbC5zdGVwKCkpIHsKKyAgICBm
b3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNxbC0+c3RlcCgpKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1w
b3J0UmVjb3JkczogSW1wb3J0aW5nIGEgcmVnaXN0cmF0aW9uIGZyb20gdGhlIGRhdGFiYXNlIik7
Ci0gICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURh
dGFiYXNlS2V5KHNxbC5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICAgICAgYXV0byBvcmlnaW5VUkwg
PSBVUkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQoMSkgfTsKLSAgICAgICAgYXV0byBzY29w
ZVBhdGggPSBzcWwuZ2V0Q29sdW1uVGV4dCgyKTsKKyAgICAgICAgYXV0byBrZXkgPSBTZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uS2V5Ojpmcm9tRGF0YWJhc2VLZXkoc3FsLT5nZXRDb2x1bW5UZXh0
KDApKTsKKyAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRDb2x1
bW5UZXh0KDEpIH07CisgICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLT5nZXRDb2x1bW5UZXh0
KDIpOwogICAgICAgICBhdXRvIHNjb3BlVVJMID0gVVJMIHsgb3JpZ2luVVJMLCBzY29wZVBhdGgg
fTsKLSAgICAgICAgYXV0byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRh
YmFzZUlkZW50aWZpZXIoc3FsLmdldENvbHVtblRleHQoMykpOwotICAgICAgICBhdXRvIGxhc3RV
cGRhdGVDaGVja1RpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLmdldENvbHVtbkRv
dWJsZSg0KSk7Ci0gICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBzdHJpbmdUb1VwZGF0ZVZp
YUNhY2hlKHNxbC5nZXRDb2x1bW5UZXh0KDUpKTsKLSAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBV
UkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQoNikgfTsKLSAgICAgICAgYXV0byB3b3JrZXJU
eXBlID0gc3RyaW5nVG9Xb3JrZXJUeXBlKHNxbC5nZXRDb2x1bW5UZXh0KDcpKTsKKyAgICAgICAg
YXV0byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZp
ZXIoc3FsLT5nZXRDb2x1bW5UZXh0KDMpKTsKKyAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tU
aW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHNxbC0+Z2V0Q29sdW1uRG91YmxlKDQpKTsK
KyAgICAgICAgYXV0byB1cGRhdGVWaWFDYWNoZSA9IHN0cmluZ1RvVXBkYXRlVmlhQ2FjaGUoc3Fs
LT5nZXRDb2x1bW5UZXh0KDUpKTsKKyAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwgeyBVUkwo
KSwgc3FsLT5nZXRDb2x1bW5UZXh0KDYpIH07CisgICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0
cmluZ1RvV29ya2VyVHlwZShzcWwtPmdldENvbHVtblRleHQoNykpOwogCiAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhOwotICAgICAgICBzcWwuZ2V0Q29s
dW1uQmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEpOworICAgICAgICBz
cWwtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsK
ICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1
cml0eVBvbGljeURhdGEuZGF0YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSk7
CiAgICAgICAgIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4g
Y29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YS5zaXplKCkpIHsKQEAgLTUzMiwxMCArNTMyLDEwIEBAIFN0cmluZyBSZWdpc3RyYXRpb25E
YXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLmdldENvbHVtblRleHQoOSk7CisgICAgICAg
IGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwtPmdldENvbHVtblRleHQoOSk7CiAKICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHNjcmlwdFJlc291cmNlTWFwRGF0YTsKLSAgICAgICAgc3FsLmdldENv
bHVtbkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhKTsKKyAgICAgICAgc3Fs
LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7CiAgICAg
ICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0
PiBzY3JpcHRSZXNvdXJjZU1hcDsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
IHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGEuZGF0YSgpLCBz
Y3JpcHRSZXNvdXJjZU1hcERhdGEuc2l6ZSgpKTsKQEAgLTU1MCw3ICs1NTAsNyBAQCBTdHJpbmcg
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAgICB9CiAKICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlSW5mb0RhdGE7Ci0gICAgICAgIHNxbC5nZXRD
b2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRpZmljYXRlSW5mb0RhdGEpOworICAgICAgICBzcWwt
PmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgY2VydGlmaWNhdGVJbmZvRGF0YSk7CiAgICAgICAg
IE9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCiAgICAgICAgIFdU
Rjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0
ZUluZm9EYXRhLmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YS5zaXplKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXgg
MGQ3MjUyYjUzNWNhMmY3ZDA4OGVkOTRlYTI2NGM5NzZjNWQ0MzVjZC4uMTliMGEyMTQxNjJiYjYx
ZWE1Y2M2OTZlNWQ0MjYzZGNmOTg4MDY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0zODIsOCArMzgyLDggQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBzZXRCdXN5VGltZW91dChtX2RhdGFiYXNlLCAiUFJBR01BIGJ1c3lfdGltZW91dCA9
IDUwMDAiKTsKLSAgICBpZiAoc2V0QnVzeVRpbWVvdXQucHJlcGFyZSgpICE9IFNRTElURV9PSyB8
fCBzZXRCdXN5VGltZW91dC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8gc2V0QnVz
eVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVv
dXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3
b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0QnVzeVRp
bWVvdXQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDIyICs0MDEsMjIgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKIE9wdGlvbmFsPFZl
Y3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tG
b3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG1pc3NpbmdU
YWJsZXM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
IDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgdGJsX25hbWU9PyIp
OwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFi
bGVzSW5TY2hlbWEgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0
ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBpZiAoc3RhdGVtZW50
LmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgaWYgKHN0YXRlbWVu
dC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBiaW5kLCBlcnJv
ciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYg
KHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMgbWlzc2luZyB0YWJs
ZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAgICBtaXNzaW5n
VGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZW1l
bnQucmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0KICAgICBpZiAo
bWlzc2luZ1RhYmxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBA
IC00MjYsOCArNDI2LDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWIKIAogdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMoKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBlbmFibGVGb3JlaWduS2V5cyhtX2RhdGFiYXNlLCAiUFJBR01BIGZv
cmVpZ25fa2V5cyA9IE9OIik7Ci0gICAgaWYgKGVuYWJsZUZvcmVpZ25LZXlzLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sgfHwgZW5hYmxlRm9yZWlnbktleXMuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgYXV0byBlbmFibGVGb3JlaWduS2V5cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiUFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIl9zKTsKKyAgICBpZiAoIWVuYWJsZUZvcmVpZ25L
ZXlzIHx8IGVuYWJsZUZvcmVpZ25LZXlzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQzNiwz
MSArNDM2LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVu
YWJsZUZvcmVpZ25LZXlzKCkKIAogVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0VGFibGVTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUnIikpOwotICAg
IGlmIChnZXRUYWJsZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0
byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3Ry
aW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFi
bGVOYW1lLCAiJyBBTkQgdHlwZSA9ICd0YWJsZSciKSk7CisgICAgaWYgKCFnZXRUYWJsZVN0YXRl
bWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVz
IFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJs
ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVy
aWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2NoZW1hLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdldFRhYmxlU3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBn
ZXRUYWJsZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBnZXRJbmRleFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlw
ZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIGdldEluZGV4U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ2luZGV4JyIpKTsKKyAg
ICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5l
dHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50
VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IGluZGV4IGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIE9wdGlvbmFsPFN0
cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIGF1dG8gcmF3SW5kZXggPSBTdHJpbmcoZ2V0SW5kZXhTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgaWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3Rh
dGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwogICAgIH0KQEAgLTQ4MCwyMCArNDgw
LDIwIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBk
YXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKIHsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcyBVbmFibGUgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMgZXJyb3Ig
ZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVzc2FnZTog
JXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291bnQpCisgICAgaWYgKHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDApIDwgZXhwZWN0ZWRJbmRleENvdW50KQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTU1NCw4ICs1NTQsOCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVz
SWZOZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJ
bmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAgICAgYXV0byBxdWVyeSA9IG1ha2VTdHJpbmco
IkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpOwotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgYWx0ZXJUYWJsZShtX2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIGlm
IChhbHRlclRhYmxlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgYWx0ZXJUYWJsZS5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBhbHRlclRhYmxlID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVy
VGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gcmVuYW1lIHRhYmxl
LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC01NzAsMTYgKzU3MCwxNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRv
JiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAg
ICAgYXV0byBxdWVyeSA9IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVF1ZXJ5KHRhYmxlKTsK
LSAgICAgICAgU1FMaXRlU3RhdGVtZW50IG1pZ3JhdGVUYWJsZURhdGEobV9kYXRhYmFzZSwgcXVl
cnkpOwotICAgICAgICBpZiAobWlncmF0ZVRhYmxlRGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
IHx8IG1pZ3JhdGVUYWJsZURhdGEuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1
dG8gbWlncmF0ZVRhYmxlRGF0YSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7
CisgICAgICAgIGlmICghbWlncmF0ZVRhYmxlRGF0YSB8fCBtaWdyYXRlVGFibGVEYXRhLT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0
YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIG1pZ3JhdGUgc2NoZW1hLCBlcnJvciBt
ZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBhdXRvIGRyb3BRdWVyeSA9IG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRh
YmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRyb3BUYWJsZVF1ZXJ5KG1fZGF0YWJhc2Us
IGRyb3BRdWVyeSk7Ci0gICAgICAgIGlmIChkcm9wVGFibGVRdWVyeS5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LIHx8IGRyb3BUYWJsZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICBhdXRvIGRyb3BUYWJsZVF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGRyb3BR
dWVyeSk7CisgICAgICAgIGlmICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVE
YXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gZHJvcCB0ZW1wb3JhcnkgdGFibGVz
LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC01OTcsMTcgKzU5NywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiBWZWN0b3I8U3RyaW5n
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwgdGFibGVOYW1lLCAi
KSIpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCht
YWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0YWJsZU5hbWUsICIpIikpOwogCi0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdldENvbHVtbnNGcm9tVGFibGVJbmZvU3RhdGVt
ZW50IFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRhYmxl
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5zOwotICAgIHdo
aWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0byBuYW1l
ID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBuYW1lID0gc3RhdGVtZW50LT5nZXRD
b2x1bW5UZXh0KDEpOwogICAgICAgICBjb2x1bW5zLmFwcGVuZChuYW1lKTsKICAgICB9CiAKQEAg
LTYyMiwxOCArNjIyLDE4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZShTdHJpbmcmJiB0YWJsCiAgICAgICAgIGlmIChl
eGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1
bW4pKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VT
dHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNvbHVtbikp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFk
ZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gYWRk
IG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGlmIChz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRv
IGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwog
ICAgIH0KIH0KIApAQCAtNjQ4LDEzICs2NDgsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpCiAKIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbmFtZUNvbHVtbkluVGFibGUo
U3RyaW5nJiYgdGFibGVOYW1lLCBFeGlzdGluZ0NvbHVtbk5hbWUmJiBleGlzdGluZ0NvbHVtbk5h
bWUsIEV4cGVjdGVkQ29sdW1uTmFtZSYmIGV4cGVjdGVkQ29sdW1uTmFtZSkKIHsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxF
ICIsIHRhYmxlTmFtZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBU
TyAiLCBleHBlY3RlZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENP
TFVNTiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdD
b2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVt
biBpbiB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC03MTIs
MTUgKzcxMiwxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpv
cGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1h
OwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2Jz
ZXJ2ZWQgRG9tYWlucyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJs
X25hbWU9J09ic2VydmVkRG9tYWlucyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJsZSBhdCBh
bGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0ZSB0aGUg
ZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CiAgICAgICAgICAgICBjbG9zZSgpOwogICAg
ICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsK
QEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpA
QCAtNzUxLDEyICs3NTEsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRT
dGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mIHN0YXRl
bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0
CiB7CiAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1
ZTxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAg
QVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1f
ZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRl
bWVudE9yRXJyb3IpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlz
LCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU1FM
aXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OwogICAgICAgICB9CisgICAgICAgIHN0YXRl
bWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KQEAgLTEwMDQs
OSArMTAwNiw4IEBAIE9wdGlvbmFsPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0
YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5n
UXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElU
RV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9t
U3RyaW5nIGZhaWxlZC4gU3RhdGVtZW50OiAlcy4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBzY29wZWRTdGF0ZW1lbnQtPnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3Ry
aW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTAzOSwyMyArMTA0MCwy
MyBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFu
ZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmlu
ZyYgc3RhdGVtZW50LCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluTGlz
dCwgdW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFJlbGF0
aW9uc2hpcFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJl
QW5kTWFrZURvbWFpbkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRS
ZWxhdGlvbnNoaXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0
cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7
IikpOwogICAgIAotICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmlu
ZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
ICAgICAKICAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKLSAgICAgICAg
aWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpu
b3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgICAg
ICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIFdhbGxUaW1l
Ojpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMjI5LDE3ICsxMjMwLDE3IEBAIFZlY3Rv
cjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0CiAKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIGNvbnN0IGF1
dG8gcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIgPSB0aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsID8gIiUiIDogIjEi
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBzb3J0ZWRTdGF0aXN0aWNzKG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwotICAgIGlm
IChzb3J0ZWRTdGF0aXN0aWNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc29y
dGVkU3RhdGlzdGljcy5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikK
LSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5kVGV4dCgyLCAiJSIpICE9IFNRTElURV9P
SykgeworICAgIGF1dG8gc29ydGVkU3RhdGlzdGljcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudChtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkp
KTsKKyAgICBpZiAoIXNvcnRlZFN0YXRpc3RpY3MKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGlj
cy0+YmluZFRleHQoMSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCisgICAgICAgIHx8
IHNvcnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0Owog
ICAgIH0KLSAgICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1
bW5JbnQoMSkpKSB7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRl
ZFN0YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHko
c29ydGVkU3RhdGlzdGljcy0+Z2V0Q29sdW1uSW50KDEpKSkgeworICAgICAgICAgICAgYXV0byB0
aGlyZFBhcnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMCk7CiAg
ICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW4gPSBSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGdldERvbWFpblN0cmluZ0Zy
b21Eb21haW5JRCh0aGlyZFBhcnR5RG9tYWluSUQpKTsKICAgICAgICAgICAgIHRoaXJkUGFydHlE
YXRhTGlzdC5hcHBlbmQoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YSB7IHRoaXJkUGFydHlEb21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJz
dFBhcnR5RG9tYWlucyh0aGlyZFBhcnR5RG9tYWluSUQsIHRoaXJkUGFydHlEb21haW4pIH0pOwog
ICAgICAgICB9CkBAIC0xMjY1LDkgKzEyNjYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucwog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50
IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUg
T2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92
ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9t
YWlucyksICIpIikpOwotICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVS
RSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIp
KTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMjg1
LDMxICsxMjg1LDMwIEBAIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zCiAgICAgKytudW1iZXJPZlJl
Y3Vyc2l2ZUNhbGxzOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21h
aW5zOwotICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsICJT
RUxFQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBP
TiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20uZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZl
ZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFN1YnJlc291cmNlcy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRTdWJyZXNvdXJjZXMuYmluZElu
dCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFN1YnJl
c291cmNlcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5z
LmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBX
SEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFs
ZW50ID0gMCJfcyk7CisgICAgaWYgKCFmaW5kU3VicmVzb3VyY2VzIHx8IGZpbmRTdWJyZXNvdXJj
ZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERv
bWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgCi0gICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsK
LSAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQo
MCk7CisgICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7
CisgICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmdldENvbHVtbklu
dCgwKTsKICAgICAgICAgYXV0byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlv
blNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5z
ZWNvbmQpCiAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21h
aW5JRCk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRh
YmFzZSwgIlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZy
b20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5z
IE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJv
bS5mcm9tRG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFp
bnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRUb3BGcmFtZXMuYmluZEludCgxLCBwcmltYXJ5
RG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJv
bS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9J
TiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8g
QU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRv
cEZyYW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21h
aW5JRCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNE
b21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kVG9wRnJh
bWVzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZp
bmRUb3BGcmFtZXMuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9w
RnJhbWVzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9u
UHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgICAg
IGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9t
YWlucy5pbnNlcnQobmV3RG9tYWluSUQpOwpAQCAtMTM0MSwyMSArMTM0MCwyMCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAg
U3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElT
VElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZS
T00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBP
YnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRv
RG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlm
IChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsK
LSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJy
ZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJy
ZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURv
bWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9t
YWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3Mp
OworICAgIGlmIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
IChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJl
Y3RTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5D
VCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMu
ZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0
U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZy
YW1lUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSk7CisgICAgYXV0byB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8g
Sk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2
YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCkgeworICAg
ICAgICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJl
ZGlyZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBtYXJrUHJldmFsZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJ
TiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVy
YXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGly
ZWN0LmVuZCgpKSksICIpIikpOwotICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3Qo
V1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnRE
dWVUb1JlZGlyZWN0LmJlZ2luKCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIiki
KSk7CisgICAgaWYgKCFtYXJrUHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFp
bGVkIHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KQEAgLTEzNjYsMTIgKzEzNjQsMTIgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXMKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVt
ZW50IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAg
ICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7
Ci0gICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAg
ICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbklu
dCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpMb3cKKyAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVE
b21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZh
bGVudCA9IDAiX3MpOworICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50
KSB7CisgICAgICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgwKSk7CisgICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVl
KHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0
KDEpKQorICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291
cmNlTG9hZFByZXZhbGVuY2U6OkxvdwogICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsK
ICAgICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICB9CkBAIC0xMzg2
LDQzICsxMzg0LDQzIEBAIEhhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAKICAgICBhdXRvIGRvbWFp
bklEc09mSW50ZXJlc3QgPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21h
aW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291
cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJl
c291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3Vy
Y2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklE
c09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hp
bGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9t
YWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAg
ICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0Nv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZh
bHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3Ry
aW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4g
KCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQi
KSk7Ci0gICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5w
cmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAg
IGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFp
bklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8g
V0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikg
R1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgw
KSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAg
ICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3ViZnJhbWVEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklE
c09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFt
ZURvbWFpbklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJh
bWVEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJh
bWVEb21haW5JRCIpKTsKKyAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluc0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5U
KHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VE
b21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9t
YWluSUQiKSk7Ci0gICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1
dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQo
dG9Eb21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURv
bWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21h
aW5JRCIpKTsKKyAgICBpZiAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
KSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1l
bnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5J
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJl
c3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMu
ZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ5LDEwICsxNTQ3LDEwIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsICJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJ
ID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hF
UkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJ
bnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBp
bmNyZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vz
c0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWluY3JlbWVudFN0b3Jh
Z2VBY2Nlc3MKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAq
c3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50
U3RvcmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBA
IC0xNjQ2LDkgKzE2NDQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAg
IH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJl
ZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21h
aW5zKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwg
ZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJE
YXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTE3NzYsMTAgKzE3NzMsMTAgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBy
ZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hF
UkUgc291cmNlRG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0
c1RvU2luY2VTYW1lU2l0ZS5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURv
bWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUK
KyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0
YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTgzMiwxMCArMTgy
OSwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZQogICAgIH0KICAgICBzZXRVc2VySW50ZXJh
Y3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVT
dG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVN0b3Jh
Z2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdl
QWNjZXNzLmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
IGF1dG8gcmVtb3ZlU3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
REVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFp
bklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IHJl
bW92ZVN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNR
TElURV9PSworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlcklu
dGVyYWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xOTE4LDkgKzE5MTUsOCBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0
PHVuc2lnbmVkPgogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FM
aXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3Ry
aW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9t
YWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVk
Pjo6aXRlcmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKLSAg
ICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFs
ZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5n
ZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVu
ZCgpKSksICIpIikpOworICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjMwMSwxNiArMjI5NywxNSBAQCBDb29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rp
b24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Iik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09L
KSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwg
c3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FM
SVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nl
c3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KIAotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX1JPVzsKLSAgICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOwotICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0g
IWhhc05vRW50cnkgJiYgc3RhdGVtZW50LmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
KyAgICBib29sIGhhc05vRW50cnkgPSBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XOwor
ICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApOworICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYg
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CiAKICAgICBpZiAoIWFy
ZUFsbFRoaXJkUGFydHlDb29raWVzQmxvY2tlZFVuZGVyKHRvcEZyYW1lRG9tYWluKSAmJiAhaXNQ
cmV2YWxlbnQpCiAgICAgICAgIHJldHVybiBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xp
Y3k7CkBAIC0yMzMzLDE0ICsyMzI4LDE0IEBAIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTCiAKICAg
ICBhdXRvIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8g
QU5EIHRvcExldmVsRG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsIHJlcXVlc3RpbmdE
b21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsIGZp
cnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQg
PSA/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJ
bnQoMSwgcmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1
cm4gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKIAotICAgIHJldHVybiAhIXN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6
IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CisgICAgcmV0dXJuICEhc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0
b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURv
bWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2Nr
QW5kRGVsZXRlQ29va2llc0ZvcigpIGNvbnN0CkBAIC0yMzQ4LDEyICsyMzQzLDEyIEBAIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmRvbWFpbnNUb0Jsb2NrQW5kCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
CiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9N
IE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFj
dGlvbiA9IDAiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50
ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9t
YWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hl
Y2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCkpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNjMsMTIgKzIz
NTgsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXQKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVE
b21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRV
c2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBp
c1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICgh
c3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5n
KHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9t
YWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNzgs
MTIgKzIzNzMsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW4KICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0
cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9u
ID0gMSJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVn
aXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0
aW9uID0gMSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRz
OwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAg
ICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0
cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJs
ZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVy
biByZXN1bHRzOwogfQpAQCAtMjM5MywxMyArMjM4OCwxMiBAQCBIYXNoTWFwPFRvcEZyYW1lRG9t
YWluLCBTdWJSZXNvdXJjZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3Vs
dHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1
YkZyYW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJs
ZURvbWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRvcExldmVs
RG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nl
c3NVbmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRvbWFpbklE
KSBhcyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50b3BMZXZl
bERvbWFpbklEOyJfcyk7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVn
aXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0
b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5k
b21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHou
dG9wTGV2ZWxEb21haW5JRDsiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1
cm4gcmVzdWx0czsKIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
Ci0gICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpLCBS
ZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3Ry
aW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9t
YWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZy
b21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsK
IAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMjQ0NSwxOSArMjQzOSwxOCBAQCBWZWN0b3I8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAog
ICAgIFZlY3RvcjxEb21haW5EYXRhPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0
aGVyZWQsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BG
cmFtZVJlZGlyZWN0cyBGUk9NIE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3Vy
Y2VEb21haW5JRCwgQ09VTlQoKikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9V
UCBCWSBzb3VyY2VEb21haW5JRCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQi
X3MpOwotCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWlu
SUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFk
VXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFp
bnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZU
b3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5z
b3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKQotICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHMoc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSgyKSkKLSAgICAgICAgICAgICwgc3RhdGVt
ZW50LmdldENvbHVtbkludCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoNSkgPyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNikpCisgICAgd2hpbGUgKHN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAg
ICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVE
b21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBX
YWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUoMikpCisg
ICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisg
ICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisg
ICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisg
ICAgICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbklu
dCg2KSkKICAgICAgICAgfSk7CiAgICAgfQogICAgIApAQCAtMjQ3MywxMSArMjQ2NiwxMSBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVy
aW5nKFZlY3Rvcjx1bnNpZ25lZD4mJgogCiAgICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlz
dChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklE
c1RvQ2xlYXIuYmVnaW4oKSwgZG9tYWluSURzVG9DbGVhci5lbmQoKSkpOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUg
ZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtl
U3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVS
RSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmICghY2xlYXJHcmFu
ZGZhdGhlcmluZ1N0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGVh
ckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlm
IChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcg
ZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KQEAgLTI2MTcsMjMgKzI2MTAsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIHNpemVf
dCBjb3VudExlZnRUb1BydW5lID0gY291bnQgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93
blRvOwogICAgIEFTU0VSVChjb3VudExlZnRUb1BydW5lKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCByZWNvcmRzVG9QcnVuZShtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RT
ZWVuIExJTUlUID8iKTsKLSAgICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCByZWNvcmRzVG9QcnVuZS5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1
bmUpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcmVjb3Jkc1RvUHJ1bmUgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBP
UkRFUiBCWSBoYWRVc2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/
Il9zKTsKKyAgICBpZiAoIXJlY29yZHNUb1BydW5lIHx8IHJlY29yZHNUb1BydW5lLT5iaW5kSW50
KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gZW50cmllc1RvUHJ1bmU7Ci0gICAgd2hpbGUgKHJlY29yZHNUb1BydW5l
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVj
b3Jkc1RvUHJ1bmUuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVj
b3Jkc1RvUHJ1bmUtPmdldENvbHVtbkludCgwKSk7CiAKICAgICBhdXRvIGxpc3RUb1BydW5lID0g
YnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4o
ZW50cmllc1RvUHJ1bmUuYmVnaW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBwcnVuZUNvbW1hbmQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRF
IGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwg
IikiKSk7Ci0gICAgaWYgKHBydW5lQ29tbWFuZC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHBydW5lQ29tbWFuZC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHBy
dW5lQ29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJERUxF
VEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5l
LCAiKSIpKTsKKyAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1
bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNywzNSArMjcwOCwzMyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVj
b3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cgogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppc0NvcnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHN1YmZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50
KG1fZGF0YWJhc2UsIGNvdW50U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3Vu
dFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9RdWVyeSk7CisgICAgYXV0byBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3Vu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZVF1ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkp
OworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CiAg
ICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNv
dW50IHx8ICFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291
bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwg
ZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1l
RG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lQ291bnQuYmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50
LmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMSwgZG9t
YWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVE
b21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgIGlmIChzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5k
SW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWlu
SUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURv
bWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8tPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5i
aW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGlj
c1Rlc3RpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlm
IChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAg
ICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElU
RV9ST1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAh
PSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0
dXJuIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldENvbHVtbkludCgwKSA9PSAxKTsKKyAgICByZXR1
cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Z2V0Q29sdW1uSW50KDApID09IDEpOwogfQogCiBz
dGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0
cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKQEAgLTI4MTIsMjcgKzI4MDEsMjYgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChT
dHJpbmdCdWlsZGVyJgogICAgIGlmIChxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAg
YXV0byBkYXRhID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKICAgICAKLSAg
ICBpZiAoZGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRhdGEuYmluZElu
dCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qo
ZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEt
PmJpbmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZy
b21Ib3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZh
aWxlZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChkYXRh
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChkYXRhLT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAg
ICIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKHRhYmxlTmFtZSk7CiAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI6XG4iKTsKICAgICAKLSAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zy
b21Eb21haW5JRChkYXRhLmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byByZXN1bHQgPSBnZXRE
b21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICBhcHBl
bmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKICAgICAKLSAgICB3aGlsZSAoZGF0YS5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9t
RG9tYWluSUQoZGF0YS5nZXRDb2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChkYXRhLT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1
aWxkZXIsIHJlc3VsdCk7CiAgICAgfQogfQpAQCAtMjk0NiwyOCArMjkzNCwyNiBAQCBib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJh
c2UoaW50IGRvbWFpbklEKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIFNRTGl0ZVN0YXRl
bWVudCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09V
TlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUICogRlJP
TSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5
IERFU0MgTElNSVQgMTsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVz
IE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9G
RlNFVCA/OyJfcyk7CisgICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOworICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKKyAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKIAotICAgIGlmIChjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVu
dCB8fCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0
ZXNQYXJhbWV0ZXJzIGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBtX29wZXJhdGluZ0RhdGVzU2l6
ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKIAotICAg
IGlmIChnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudCB8fCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVw
ZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGlu
Z0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LmdldENvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMikpOworICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRl
KGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdl
dE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogCi0gICAg
aWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgIGlmICghZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCkgewogICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0
ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIGR1cmluZyB0aGUgY2Fs
bCB0byBwcmVwYXJlKCkgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcg
Ii4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI5NzYsMjYgKzI5NjIsMjYgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0
ZXNQYXJhbWV0ZXJzKCkKICAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5n
RGF0ZXNXaW5kb3dTaG9ydCAtIDEpCiAgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRl
ID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2UgewotICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0
ZVdpbmRvd1N0YXRlbWVudC5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAx
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAt
IDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0byBiaW5k
KCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgICAgICBtX3Nob3J0V2luZG93T3Bl
cmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgyKSk7CiAgICAgfQogCiAgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGlu
Z0RhdGVzV2luZG93TG9uZyAtIDEpCiAgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUg
PSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQucmVzZXQoKTsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQuYmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudC0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1l
bnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3Rh
dGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAi
LiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2xv
bmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50LmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudC5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDIpKTsKKyAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJh
dGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
LCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogfQog
CkBAIC0zMDExLDIxICsyOTk3LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAKICAgICBp
bnQgcm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2lu
ZG93TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9u
dGhEYXkgTElNSVQgPzsiX3MpOwotICAgICAgICBpZiAoZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRl
bGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEsIHJvd3NUb1By
dW5lKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBk
ZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1v
bnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNl
bnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2Vu
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxl
dGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRl
bWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5
ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgdG9kYXkueWVhcigpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5k
SW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5n
RGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICBp
ZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIHRvZGF5
Lm1vbnRoKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5iaW5kSW50KDMsIHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3Bl
cmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVk
IHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KQEAgLTMwNjksMTYgKzMwNTUsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAg
ICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKICAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQg
PSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRh
eXNBZ29JblNlY29uZHMpKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJh
dGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0g
ICAgICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZElu
dCgxLCBkYXRlVG9JbnNlcnQueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5n
RGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICAg
ICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBpbnNl
cnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC0+YmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIGRhdGVUb0lu
c2VydC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAg
ICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdXBkYXRlT3Bl
cmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CkBAIC0zMjAxLDM2ICszMTg3LDM2IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1
cmVtZW50KFByaXZhdGVDCiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcg
YW4gYXR0cmlidXRlZCBwcml2YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRh
dGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVwb3J0IHRpbWVzLgogICAgICAgICBBU1NFUlQoc291cmNl
RWFybGllc3RUaW1lVG9TZW5kICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5k
ICE9IC0xKTsKIAotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0g
ICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0
aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJp
bmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDUsIHByaW9yaXR5KSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIGF0dHJp
YnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNywgc291cmNlRWFy
bGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5i
aW5kVGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4t
PnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxMCwgc291cmNlVW5s
aW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVt
cHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRE
b3VibGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0QXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dAorICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29u
ZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0
dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNCwgYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmRJbnQoNSwgcHJpb3JpdHkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50
LT5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kRG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/
IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOSwgc291cmNl
VW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRV
UkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZFRleHQoMTAsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVU
b2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRp
bWVUb1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNv
dXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBhdHRyaWJ1
dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVU
b2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmlu
ZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDYsIHNvdXJj
ZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0
VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5i
aW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4t
PmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5z
ZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0
cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCg1LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRv
a2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZFRleHQoNiwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5r
YWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9r
ZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmco
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CkBAIC0zNDM1LDE0ICszNDIxLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTCiAKIFN0
cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRUb1N0cmluZygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHByaXZhdGVDbGlja01l
YXN1cmVtZW50RGF0YUV4aXN0cyhtX2RhdGFiYXNlLCAiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikg
RlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVD
VCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250
MiJfcyk7Ci0gICAgaWYgKHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LIHx8IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRh
RXhpc3RzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VO
VCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAo
U0VMRUNUIENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBh
cyBjbnQyIl9zKTsKKyAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8
fCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDEpKQorICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnREYXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVt
ZW50RGF0YUV4aXN0cy0+Z2V0Q29sdW1uSW50KDEpKQogICAgICAgICByZXR1cm4gIlxuTm8gc3Rv
cmVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgZGF0YS5cbiJfczsKIAogICAgIGF1dG8gdW5h
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQsIGFs
bFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25zUXVlcnksICJw
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKQEAgLTM1NzMsMTEgKzM1NTksMTEg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0
cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUMKICAgICBpZiAoZGVzdGluYXRpb25FYXJsaWVzdFRp
bWVUb1NlbmQgfHwgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291
cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsK
LSAgICBpZiAoY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZVNp
dGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRl
bWVudC5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
ID0gPyJfcyk7CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwg
Y2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJ
bnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
Y2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxl
ZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CkBAIC0zNTg3LDE4ICszNTczLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7
CiAgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAot
ICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBTUUxpdGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyIpOwotICAgIGF1dG8gZWFybGll
c3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFy
bGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiKTsKKyAgICBhdXRvIGVhcmxpZXN0
VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRp
bWVUb1NlbmRUb1NvdXJjZSA9ID8iX3MpOworICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRF
IEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5k
VG9EZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGll
c3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQuYmluZEludCgxLCBleHBpcmVkVGltZVRvU2Vu
ZC5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBl
YXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAg
IHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGly
ZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAg
aWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9T
ZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRz
QXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggNTIz
MjMzZDE4YjA0MDAzZWYzMGQzMzYzMmNmZTYyZjAyZjI3YTM0OC4uM2E2NWZjY2VmMTg5ZjA3Yzg5
MTY1YTljNjIyN2E1Y2FkMTQwNzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3Bw
CkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1zdGF0aWMgY29uc3QgY2hhciBnZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAiU0VM
RUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJh
bCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxl
Il9zIH07CiAKIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmNyZWF0ZShTdHJpbmcmJiBkYXRhYmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsK
QEAgLTk5LDEwICs5OSwxMCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRl
bVRhYmxlSWZOZWVkZWQoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRh
YmxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAg
IGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBG
Uk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKIAogICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZl
ciBleGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAg
IGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgIGlmIChxdWVyeSAmJiBx
dWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgd2l0aCB0aGUgcmlnaHQgdHlwZSwgY29weSBhbGwg
dGhlIGRhdGEgb3ZlciB0byBpdCBhbmQgdGhlbiByZXBsYWNlIHRoZSBuZXcgdGFibGUgd2l0aCB0
aGUgb2xkIHRhYmxlLgpAQCAtMzAyLDE5ICszMDIsMTggQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeSht
X2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1
ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOwor
ICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVt
YmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcg
bnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gIXF1ZXJ5LmdldENvbHVtbkludCgw
KTsKKyAgICByZXR1cm4gIXF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CiB9CiAKIHZvaWQgTG9jYWxT
dG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKQEAgLTMzMCwxNCArMzI5LDE1IEBAIHZv
aWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKICAgICAgICAgc2NvcGVk
U3RhdGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOwogfQog
Ci1TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQs
IGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxT
UUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBpZiAoIXN0YXRlbWVudCkgewot
ICAgICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFz
ZSwgcXVlcnkpOwotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAg
IGlmIChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gc3Rh
dGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOwor
ICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OworICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1l
bnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2Rh
dGFiYXNlLmlzT3BlbigpKTsKICAgICB9CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5oCmluZGV4IGI3ZWYwMzRkMmE4NmMyNGJkMDRkZjc5NDMxN2NhYmFmYzAzZTc0NmMuLjM5OGRh
N2RjZmIyOGRkMzBkMmU2MGE1MTRkZGU5YjE5ZDU1MzYyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VE
YXRhYmFzZS5oCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtaWdyYXRlSXRl
bVRhYmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0g
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50
KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5n
JiBxdWVyeSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2Nv
cGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+JiwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25zdDsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNl
UGF0aDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcApp
bmRleCBmNDUwNmY4YmQxNDBmZDQ5NGMxMTAwYWNmYTQ0NTM0ZDA0YTFlN2RiLi4yNDdjYzIzZTdi
YzQ5NDUyNDczYzJhZTY5MjhjMDY5MzFjMjg0YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKQEAgLTY2LDcgKzY2LDggQEAgSWNv
bkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNl
V3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0gU1FMaXRlU3RhdGVtZW50KG1fZGIs
ICJTRUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdWZXJzaW9u
JzsiKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1f
ZGIucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBX
SEVSRSBrZXkgPSAnVmVyc2lvbic7Il9zKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25O
dW1iZXIgPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDApIDogMDsKICAgICAgICAgaWYgKGRhdGFiYXNlVmVyc2lvbk51bWJlciA+IGN1cnJlbnREYXRh
YmFzZVZlcnNpb24pIHsKICAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJEYXRhYmFzZSB2
ZXJzaW9uIG51bWJlciAlZCBpcyBncmVhdGVyIHRoYW4gb3VyIGN1cnJlbnQgdmVyc2lvbiBudW1i
ZXIgJWQgLSBjbG9zaW5nIHRoZSBkYXRhYmFzZSB0byBwcmV2ZW50IG92ZXJ3cml0aW5nIG5ld2Vy
IHZlcnNpb25zIiwKICAgICAgICAgICAgICAgICBkYXRhYmFzZVZlcnNpb25OdW1iZXIsIGN1cnJl
bnREYXRhYmFzZVZlcnNpb24pOwpAQCAtODQsNyArODUsNyBAQCBJY29uRGF0YWJhc2U6Okljb25E
YXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFi
YXNlVwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmVkdWNlIHNxbGl0ZSBSQU0gY2FjaGUgc2l6
ZSBmcm9tIGRlZmF1bHQgMjAwMCBwYWdlcyAofjEuNWtCIHBlciBwYWdlKS4gM01CIG9mIGNhY2hl
IGZvciBpY29uIGRhdGFiYXNlIGlzIG92ZXJraWxsLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQo
bV9kYiwgIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyIpLmV4ZWN1dGVDb21tYW5kKCk7CisgICAg
ICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyJfcyk7CiAK
ICAgICAgICAgaWYgKGFsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6Olll
cykgewogICAgICAgICAgICAgbV9wcnVuZVRpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1l
cjxJY29uRGF0YWJhc2U+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZJY29uRGF0YWJhc2U6
OnBydW5lVGltZXJGaXJlZCk7CkBAIC0xNzUsMTcgKzE3NiwxNyBAQCB2b2lkIEljb25EYXRhYmFz
ZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
U3RyaW5nIGltcG9ydFF1ZXJ5ID0gbWFrZVN0cmluZygiU0VMRUNUIFBhZ2VVUkwudXJsLCBJY29u
SW5mby51cmwsIEljb25JbmZvLnN0YW1wIEZST00gUGFnZVVSTCBJTk5FUiBKT0lOIEljb25JbmZv
IE9OIFBhZ2VVUkwuaWNvbklEPUljb25JbmZvLmljb25JRCBXSEVSRSBJY29uSW5mby5zdGFtcCA+
ICIsIGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBub3RVc2VkSWNvbkV4cGlyYXRpb25UaW1lKS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSksICc7Jyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IHF1ZXJ5KG1fZGIsIGltcG9ydFF1ZXJ5KTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoaW1wb3J0
UXVlcnkpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
cHJlcGFyZSBpY29uIHVybCBpbXBvcnQgcXVlcnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGF1dG8gcmVzdWx0ID0gcXVl
cnktPnN0ZXAoKTsKICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9wYWdlVVJMVG9JY29uVVJM
TWFwTG9jayk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIG1f
cGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0
Q29sdW1uVGV4dCgxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAg
bV9wYWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkt
PmdldENvbHVtblRleHQoMSkpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAg
IH0KIAogICAgIHN0YXJ0UHJ1bmVUaW1lcigpOwpAQCAtMjE0LDEyICsyMTUsMTIgQEAgdm9pZCBJ
Y29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkp
OwogCiAgICAgaWYgKCFtX3BydW5lSWNvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9wcnVuZUlj
b25zU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUg
RlJPTSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX3BydW5l
SWNvbnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBw
cnVuZUljb25zU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZS
T00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8pOyJfcyk7CisgICAgICAgIGlmICghcHJ1bmVJ
Y29uc1N0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVt
ZW50IHBydW5lSWNvbnMgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1l
bnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1f
cHJ1bmVJY29uc1N0YXRlbWVudCA9IHBydW5lSWNvbnNTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9V
bmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRp
bWUpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSkgIT0gU1FMSVRFX09LKSB7CkBAIC0y
MzAsOCArMjMxLDggQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYik7CiAgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX0RP
TkUpIHsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEg
V0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiKTsKLSAg
ICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29u
SUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyIpOworICAgICAgICBtX2Ri
LmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJY29uRGF0YSBXSEVSRSBpY29uSUQgTk9UIElO
IChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyJfcyk7CisgICAgICAgIG1fZGIuZXhlY3V0
ZUNvbW1hbmQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNU
IGljb25JRCBGUk9NIEljb25JbmZvKTsiX3MpOwogICAgIH0KICAgICBtX3BydW5lSWNvbnNTdGF0
ZW1lbnQtPnJlc2V0KCk7CiAKQEAgLTI4NSwxMiArMjg2LDEyIEBAIE9wdGlvbmFsPGludDY0X3Q+
IEljb25EYXRhYmFzZTo6aWNvbklERm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGJv
b2wmIGV4CiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25JREZv
ckljb25VUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJTRUxFQ1QgSWNvbkluZm8uaWNv
bklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/
KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25JREZvckljb25VUkxTdGF0ZW1lbnQg
PSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29u
SW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiX3MpOwor
ICAgICAgICBpZiAoIWljb25JREZvckljb25VUkxTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBpY29uSURGb3JJY29uVVJMIGZhaWxlZCIpOwot
ICAgICAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uSURG
b3JJY29uVVJMU3RhdGVtZW50ID0gaWNvbklERm9ySWNvblVSTFN0YXRlbWVudC52YWx1ZSgpLm1v
dmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2ljb25JREZvckljb25VUkxTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIGljb25VUkwpICE9IFNRTElURV9PSykgewpAQCAtMzE1LDEyICsz
MTYsMTIgQEAgYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwoaW50NjRfdCBp
Y29uSUQsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNl
V3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3NldEljb25J
REZvclBhZ2VVUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3Rh
dGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBQ
YWdlVVJMICh1cmwsIGljb25JRCkgVkFMVUVTICgoPyksID8pOyIpOwotICAgICAgICBpZiAobV9z
ZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGF1dG8gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhl
YXBTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFBhZ2VVUkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/
KSwgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgc2V0SWNvbklERm9y
UGFnZVVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRl
bWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAg
ICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gc2V0SWNvbklERm9yUGFnZVVS
TFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmICht
X3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHBhZ2VVUkwpICE9IFNR
TElURV9PSwpAQCAtMzQyLDEyICszNDMsMTIgQEAgVmVjdG9yPGNoYXI+IEljb25EYXRhYmFzZTo6
aWNvbkRhdGEoaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAg
ICAgaWYgKCFtX2ljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1faWNvbkRhdGFTdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVDVCBJY29uRGF0YS5k
YXRhIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyIpOwotICAgICAg
ICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
ICAgICBhdXRvIGljb25EYXRhU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgi
U0VMRUNUIEljb25EYXRhLmRhdGEgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQg
PSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGljb25EYXRhIGZhaWxlZCIpOwotICAg
ICAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgICAgICB9CisgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBpY29uRGF0
YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmICht
X2ljb25EYXRhU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgaWNvbklEKSAhPSBTUUxJVEVfT0spIHsK
QEAgLTM3MCwyMCArMzcxLDIwIEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6YWRk
SWNvbihjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFZlY3RvcjxjaGFyCiAgICAgQVNTRVJU
KG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAg
IGlmICghbV9hZGRJY29uU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9
IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiSU5TRVJUIElOVE8gSWNvbkluZm8g
KHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25TdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBhZGRJY29uU3Rh
dGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkluZm8g
KHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uU3Rh
dGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgYWRk
SWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG51bGxwdHI7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAgICAgIG1f
YWRkSWNvblN0YXRlbWVudCA9IGFkZEljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQ
dHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2FkZEljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAg
IG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9k
YiwgIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVFUyAoPywgPyk7Iik7
Ci0gICAgICAgIGlmIChtX2FkZEljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIGF1dG8gYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVI
ZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29uRGF0YSAoaWNvbklELCBkYXRhKSBWQUxVRVMg
KD8sID8pOyJfcyk7CisgICAgICAgIGlmICghYWRkSWNvbkRhdGFTdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBhZGRJY29uRGF0YSBmYWlsZWQi
KTsKLSAgICAgICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQorICAgICAgICBtX2FkZEljb25E
YXRhU3RhdGVtZW50ID0gYWRkSWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQ
dHIoKTsKICAgICB9CiAKICAgICBpZiAobV9hZGRJY29uU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBp
Y29uVVJMKSAhPSBTUUxJVEVfT0spIHsKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgSWNvbkRh
dGFiYXNlOjp1cGRhdGVJY29uVGltZXN0YW1wKGludDY0X3QgaWNvbklELCBpbnQ2NF90IHRpbWVz
dGFtcCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdy
aXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsK
LSAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGIsICJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBp
Y29uSUQgPSA/OyIpOwotICAgICAgICBpZiAobV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gdXBkYXRlSWNvblRpbWVz
dGFtcFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlVQREFURSBJY29uSW5m
byBTRVQgc3RhbXAgPSA/IFdIRVJFIGljb25JRCA9ID87Il9zKTsKKyAgICAgICAgaWYgKCF1cGRh
dGVJY29uVGltZXN0YW1wU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBh
cmluZyBzdGF0ZW1lbnQgdXBkYXRlSWNvblRpbWVzdGFtcCBmYWlsZWQiKTsKLSAgICAgICAgICAg
IG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50
ID0gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KIAogICAgIGlmIChtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgxLCB0aW1lc3RhbXApICE9IFNRTElURV9PSyB8fCBtX3VwZGF0ZUljb25UaW1lc3RhbXBT
dGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBpY29uSUQpICE9IFNRTElURV9PSykgewpAQCAtNDM3LDI4
ICs0MzgsMjggQEAgdm9pZCBJY29uRGF0YWJhc2U6OmRlbGV0ZUljb24oaW50NjRfdCBpY29uSUQp
CiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6
WWVzKTsKIAogICAgIGlmICghbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKLSAg
ICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29u
SUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVu
dC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVBhZ2VVUkxz
Rm9ySWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9N
IFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFk
ZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
UHJlcGFyaW5nIHN0YXRlbWVudCBkZWxldGVQYWdlVVJMc0Zvckljb24gZmFpbGVkIik7Ci0gICAg
ICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvcklj
b25TdGF0ZW1lbnQgPSBkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3Zl
VG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50
KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmlj
b25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxldGVJY29uRGF0YVN0YXRl
bWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdI
RVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZUljb25E
YXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1l
bnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0
ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAg
IG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBkZWxldGVJY29uRGF0YVN0YXRlbWVudC52YWx1
ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNvblN0YXRl
bWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLmlj
b25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlSWNvblN0YXRlbWVudC0+cHJlcGFy
ZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZUljb25TdGF0ZW1lbnQgPSBt
X2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29u
SW5mby5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVJY29uU3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNv
biBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG51bGxwdHI7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVJY29uU3Rh
dGVtZW50ID0gZGVsZXRlSWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwog
ICAgIH0KIAogICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+YmluZElu
dDY0KDEsIGljb25JRCkgIT0gU1FMSVRFX09LCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IGNlNWMyOWJhYTU4MDVjYTQyZjQ4ZWYwNTBi
ODMyZDBjZDVjY2UxMWMuLmNhZTA4MmYxM2RjZDM2OGM0ODE5NWJlMzExZjIwYTViNjY0NDhmYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
CkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFi
bGVJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElN
SVQgMSIpOworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAgICAgICAgIC8vIHRo
aXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZC4KLSAgICAgICAgaWYgKHF1ZXJ5LmlzQ29sdW1u
RGVjbGFyZWRBc0Jsb2IoMCkpCisgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5E
ZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyNiw4
ICszMjYsOCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwg
IlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYg
KCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJv
bSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSwxMCArMzM1LDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFT
eW5jOjpwZXJmb3JtSW1wb3J0KCkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1N
YXA7CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBx
dWVyeS0+c3RlcCgpOwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAg
ICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5CbG9i
QXNTdHJpbmcoMSkpOwotICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGl0
ZW1NYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFz
U3RyaW5nKDEpKTsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC00MTIsMjcgKzQxMiwyNyBAQCB2b2lk
IFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBpdGVtcwogCiAgICAgLy8gSWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0
aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBp
bi4KICAgICBpZiAoY2xlYXJJdGVtcykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIo
bV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAgICBpZiAoY2xlYXIu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGNsZWFyID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBp
ZiAoIWNsZWFyKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNs
ZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0g
Y2xlYXIuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXItPnN0ZXAoKTsKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0g
JWkiLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRh
YmxlIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBhdXRvIGluc2VydCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5T
RVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0KSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAt
IGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlKG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKLSAgICBpZiAocmVtb3ZlLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJlbW92ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAo
IXJlbW92ZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBz
dGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNDQzLDIxICs0NDMsMjEgQEAgdm9pZCBTdG9yYWdlQXJl
YVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29u
ZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUu
Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyBy
ZW1vdmUgOiBpbnNlcnQ7CisgICAgICAgIGF1dG8mIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgp
ID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkp
OworICAgICAgICBxdWVyeS0+YmluZFRleHQoMSwgaXQtPmtleSk7CiAKICAgICAgICAgLy8gSWYg
dGhlIHNlY29uZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBz
byBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4KICAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkp
Ci0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOworICAgICAgICAgICAg
cXVlcnktPmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHF1
ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCBy
ZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBxdWVyeS5y
ZXNldCgpOworICAgICAgICBxdWVyeS0+cmVzZXQoKTsKICAgICB9CiAgICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CiB9CkBAIC00OTksMzEgKzQ5OSwzMyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
ZGVsZXRlRW1wdHlEYXRhYmFzZSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNF
TEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJl
ciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGF1dG8gY291bnQgPSBbJl0geworICAgICAgICBhdXRvIHF1ZXJ5ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFi
bGUiX3MpOworICAgICAgICBpZiAoIXF1ZXJ5KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3Jh
Z2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBy
ZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJl
ciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwot
ICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0dfRVJST1IoIk5vIHJl
c3VsdHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2Fs
IHN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CisgICAg
fSgpOworICAgIGlmIChjb3VudCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGludCBj
b3VudCA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAg
IHF1ZXJ5LmZpbmFsaXplKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAg
aWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZp
ZXIuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcik7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBkYXRh
YmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRh
YmFzZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGRhdGFiYXNlRmlsZW5hbWUpKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICB9CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIGlmIChTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5
KCldIHsKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2lu
V2l0aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAgfSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5m
dWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgIGlmICgh
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKKyAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZp
bGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKaW5kZXggMDYxMGM5NDZmMmVkZjk4NmViY2E5
OGI2YTdkMjFiZjBhOTMzOTY0Ni4uYzdmMzBjMzA5MTk0NDljZjkxZDBhNWMzMDQ3YzBlNjllMDhi
ZGZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwCkBAIC0xODksOCArMTg5LDggQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCkKICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKICAg
ICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKIAotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBP
cmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTk5LDggKzE5OSw4IEBAIHZvaWQgU3Rv
cmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tPcmlnaW5zKG1f
b3JpZ2luU2V0TXV0ZXgpOwotICAgICAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5T
ZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50LT5nZXRD
b2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMzE2LDE2ICsz
MTYsMTYgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdAogICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVT
ICg/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VG
aWxlKTsKICAgICAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKKyAg
ICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdp
bklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAgewpAQCAtNDA0LDIzICs0MDQsMjMg
QEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgIGlmICgh
bV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBP
cmlnaW5zIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoIWNhbkRl
bGV0ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpCisgICAgd2hpbGUgKChyZXN1
bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoIWNh
bkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2NsaWVudE11dGV4KTsKICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1v
ZGlmeU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICB9CiAgICAg
fQogICAgIApAQCAtNDQxLDEyICs0NDEsMTIgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0Rl
bGV0ZUFsbE9yaWdpbnMoKQogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAg
ICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUg
RlJPTSBPcmlnaW5zIik7Ci0gICAgICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgIGlmICgh
ZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVw
YXJlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewor
ICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lu
cyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MTksMTMgKzUxOSwxMyBA
QCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5z
IHdoZXJlIG9yaWdpbj0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7CisgICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iX3MpOworICAg
IGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHBy
ZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCku
ZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWxldGVTdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhl
Y3V0ZUNvbW1hbmQoKSkgeworICAgIGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmln
aW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtNjE0LDE3ICs2MTQsMTcgQEAgU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjpk
YXRhYmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogCiAg
ICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3Vu
dGVyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmIChwYXRoU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHBhdGhTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBX
SEVSRSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCFwYXRoU3RhdGVtZW50KSB7CiAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAn
JXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKICAgICB9Ci0gICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgcGF0
aFN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaW50IHJlc3Vs
dCA9IHBhdGhTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBwYXRoU3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCk7CisgICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCk7CiB9CiAgICAgCiBsb25nIGxvbmcgU3RvcmFnZVRyYWNrZXI6OmRpc2tVc2FnZUZvck9yaWdp
bihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgxNTc0N2NlNzQ2Y2QxYTM5NTk0ODI2NGE3Nzg3YjA5YTJj
OTg5NTYuLjJhNDIxOTY1MmMxNWQxNDRkZmQ3MmRkM2IxOWZhYzNjMDc3MWNjODYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFy
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVt
ZW50IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxz
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNl
VHJhY2tlclRlc3QubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGRUb0RhdGFiYXNlc1Rh
YmxlKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlua0NvdW50KCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJU
ZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNl
VHJhY2tlclRlc3QubW0KaW5kZXggNjY4MmJmNDU4NjY2MTE1NTNmMTBhMTdlNzJhNzI5ZWNhYTY5
NThjNC4uMmM3ZjQ0NGU4YmM4YWViOTA2YzBiYjkwYTY5Yjk1NTNjNzE4MTMxNiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tl
clRlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0Rh
dGFiYXNlVHJhY2tlclRlc3QubW0KQEAgLTY2LDEyICs2NiwxMiBAQCBzdGF0aWMgdm9pZCBhZGRU
b0RhdGFiYXNlc1RhYmxlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBjb25zdCBTZWN1cml0
eU9yaWdpbgogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwogICAgIGRhdGFiYXNlLm9wZW4o
ZGF0YWJhc2VQYXRoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBhZGREYXRhYmFzZVN0YXRlbWVu
dChkYXRhYmFzZSwgIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyIpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LnByZXBhcmUoKTsK
LSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIG5ld0RhdGFi
YXNlTmFtZSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMywgbmV3RGF0YWJh
c2VQYXRoKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAg
IGlmIChhdXRvIGFkZERhdGFiYXNlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywg
PywgPyk7Il9zKSkgeworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1l
bnQtPmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFtZSk7CisgICAgICAgIGFkZERhdGFiYXNlU3Rh
dGVtZW50LT5iaW5kVGV4dCgzLCBuZXdEYXRhYmFzZVBhdGgpOworICAgICAgICBhZGREYXRhYmFz
ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICB9CiAKICAgICBkYXRhYmFzZS5jbG9z
ZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428587</attachid>
            <date>2021-05-13 18:08:08 -0700</date>
            <delta_ts>2021-05-13 18:11:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513180808.patch</filename>
            <type>text/plain</type>
            <size>268720</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3MmQ3MjVjNzQxODM3YmVhZmYyN2Zl
Nzk1ZWI3NDIyZDg3ZjdhMDYuLmRmMDZmOTY3ZGY2OWQ2YWE1OGNlNDIyMDAyNWY5ZWU1ZDcyNmNm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlu
a0NvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDZkN2Q2NTdmOWExNmUzYmRhOWUwYmU0MDQ1NGI3ZGIx
ODE4NDcxLi5lYTllZTA2MzkzZTNjNmM0Y2MwOTRhOWYxNzZiZDAzNTVkYzIxMGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNy
ZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBUaGUgU1FMaXRlU3RhdGVtZW50IGNv
bnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2UgbmV2ZXIgaGF2ZSBhCisgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVuICJwcmVwYXJlZCIuIE9ubHkgdGhl
IFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBjb25zdHJ1Y3QgU1FMaXRlU3RhdGVt
ZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBhc3MKKyAgICAgICAgICBhIFNRTGl0
ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgU1FMaXRlU3RhdGVtZW50
IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFORCBwcmVwYXJlIGEgU1FMaXRlU3Rh
dGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisgICAgICAgICAgU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEgaGVhcCBvbmUuIFRoZXNlIGZ1bmN0
aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+IHR5cGUgc28gdGhleSB3aWxsIGVp
dGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9yIGFu
IHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAgICAgIC0gVGhlIHByZXBhcmUqU3Rh
dGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcgYWxsb2NhdGlvbnMgaW4gbW9zdAor
ICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMgdGFraW5nIGluIHRoZSBxdWVyeSBh
cyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBmaW5hbGl6ZSgpIGZ1bmN0aW9uIG9u
IFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cworICAgICAgICAgIGFy
ZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0
ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlvbnMuIFRoZSBTUUxpdGVTdGF0ZW1l
bnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVtZW50CisgICAgICAgICAgc28gdXNl
cnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0ZW1lbnQgaWYgdGhleSBuZWVkIHRo
ZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBhdCBhIGNlcnRhaW4gcG9pbnQgKGUu
Zy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAgICAgIC0gRHJvcCB0aGUgcHJlcGFy
ZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1lbnQgbWVtYmVyIGZ1bmN0aW9ucyBu
b3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBhcmUgYWx3YXlzIHByZXBhcmVkLgor
ICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5IGFzIGEgU3RyaW5nIGRhdGEgbWVt
YmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAgICAgICBUaGlzIGlzIG5vIGxvbmdl
ciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUgcHJlcGFyZSBzdGVwIGFmdGVyIHRo
ZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtlcyB0aGUgU1FMaXRlU3RhdGVtZW50
IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Y3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVG
b3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpyZXNldEFuZFJlYmluZFByZUlu
ZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRW
YWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVO
YW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5v
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFu
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnF1b3RhTm9Mb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1wdHkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRp
bmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNlYXJjaENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERvbWFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZXhl
Y3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJldHVybnNB
dExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0YWJs
ZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZE51bGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVu
dURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OnZlcmlm
eVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmV4
ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmNy
ZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisKIDIwMjEtMDUtMTMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBXazIgXSBtZWRp
YS9tZWRpYS1mcmFnbWVudHMvVEMwMDUxLmh0bWwgaXMgZmxha2V5IGNyYXNoaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MjJmMTI1OWM4NjE5N2Y4YTdlZTg4NjQ3NGE0ZjMwOWQzM2VmMjEuLmVmZTRmYjZmZjUy
OGI1MDc4OWM0NWI3YWRjMGFkZDVhOWQwNmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0
ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFN0
b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKToK
KyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0
OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxldGVJY29uKToKKwog
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBy
b2Nlc3Mgc3VzcGVuc2lvbiBtYXkgYmUgZGVsYXllZCBieSB1cCB0byA1IHNlY29uZHMgYWZ0ZXIg
dGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkYXRhYmFzZSBhY3Rpdml0eQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBmYmI0MWUyNmFhMDFlMDZiMzQ4YjJmZTM5ODc5ZWFjZjM3NDBkMjdhLi40MjRiYmFk
MDk1MGIxNmYwMmVjNGVkY2Y0YTc3ZDRhNzZiZjI5NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNr
ZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IFdURjo6RmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
aXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2MGNm
ZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNmMjM3
YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVSZWYo
VCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVybiAq
bV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxj
bGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1
ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBj
bGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDogbV9y
ZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUuLmNj
ZDYzYjNkZmFiNGEzYTY5ZWFhZjkyODFkZWE2NDNlZThmZmVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2No
ZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVt
YTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAog
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM1
OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgsMTMg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiAK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2Ig
ZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVu
IGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM5
MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBp
ZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hl
bWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0Mjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
VGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNv
cmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcgKzQ1
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVj
b3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyArNTgz
LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50
TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0
YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxp
dGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVF
UyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIo
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNpb25z
IGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBkb2Vz
bid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgICAg
IC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFi
YXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFi
YXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBz
cWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUlu
Zm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVS
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJvb2wg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZShj
b25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9i
amVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZv
OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4SW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsK
LSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1h
cC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8gX1Rl
bXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgICAg
IGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAgICAg
fQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAi
U0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3JlUmVj
b3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFs
dWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5nZXQo
eyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtl
eUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZl
cik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJl
Y29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7
Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNv
bnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYgKHNx
bC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRoZSBp
bmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVz
JykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDAw
LDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVpbnQ2
NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNp
b24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9l
cyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNp
b24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwxNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9
IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBr
ZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0g
c3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5h
bWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBr
ZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBr
ZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmpl
Y3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtl
eVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDExICsx
MDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZN
b3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTEw
NTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwg
bmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJ
bmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBG
Uk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9t
IHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAg
ICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKICAg
ICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4S2V5
UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wg
bXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVuaXF1
ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0g
c3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBk
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQpOwog
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8
IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSArMTE2
MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUn
OyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3MpOwor
ICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJl
IHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7
Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJf
cyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENvbHVt
blRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRv
ZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJz
aW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQsMTAg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaW5m
by5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAgICAg
IG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVlID0g
PyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJp
bmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAoIXNx
bAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5l
d1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMTcsMTIgKzMwMjEsMTIgQEAgdm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3Jl
ZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmls
ZXM7Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0
byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJP
TSBCbG9iRmlsZXM7Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQo
c3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwu
c3RlcCgpOworICAgICAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0RPTkUpCkBAIC0zMDYxLDE0ICszMDY1LDEzIEBAIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhCiAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQog
Ci0gICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7
CisgICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQog
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAg
IGlmIChtX3NxbGl0ZURCKSB7Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURC
LCBzdGF0ZW1lbnQpOwotICAgICAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0
PHNpemVfdD4oc3FsKV0tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2Nh
Y2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAg
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3RhdGVtZW50KTsKKyAgICAgICAgaWYgKHNxbFN0YXRlbWVudCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gc3FsU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0uZ2V0KCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggYzJjZWQ4NDE5MzAw
YjVhOGM1OGE4ZTg0MDIyMmYyNTU2MTI1YjM1Yy4uZjI4OTA4Y2E1MTVlN2I5YjJmZmY4NDg4YzAw
NmQyYjBlODFiYmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVTUUxpdGVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRVcHBlcktleS5pc051bGwoKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOwogCi0gICAgbV9zdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKSwgc3FsKTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChwcmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBtX3N0YXRlbWVudCA9IHN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogCiAgICAgcmV0dXJuIGJpbmRBcmd1bWVudHMo
KTsKIH0KQEAgLTM0MSwxMiArMzQxLDEyIEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpyZXNldEFu
ZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkoKQogCiAgICAgYXV0byYgZGF0YWJh
c2UgPSBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpOwogICAg
IGlmICghbV9wcmVJbmRleFN0YXRlbWVudCkgewotICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCBidWlsZFByZUluZGV4U3Rh
dGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcmVJbmRleFN0
YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKKyAgICAgICAgaWYgKCFwcmVJbmRleFN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBwcmUgc3RhdGVt
ZW50IC0gJyVzJyIsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50ID0gcHJlSW5k
ZXhTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVJbmRleFN0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTU4OCw5ICs1
ODgsOCBAQCBTUUxpdGVJREJDdXJzb3I6OkZldGNoUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50
ZXJuYWxGZXRjaE5leHRSZWNvcmQoU1FMaXRlQ3VycwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50IHx8IG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5k
IG9iamVjdFN0b3JlSUQgPSA/OyIpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0
byBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhU
KSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAppbmRleCBhYjQ3ODI2YzgzZWJiNThiNzdiNGE2MTUyNzEzOTIxMzNjZjg0
MGU2Li5lNzRlMjhmNWI5ZTVmNzlmYzVkNWNkMGNlNzY2Y2EwZGRmMWJmNDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTEzLDE4
ICsxMTMsMTUgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
bWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHZhbHVlKTsKIAotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0
YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNCwxNyArMTMxLDE1IEBA
IHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zCiAKIHN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3Vs
dEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHN0YXRlbWVudC5lcnJvcigpLCBxdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTcxNCw4ICs3MDksOCBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gc3FsaXRlRGF0YWJhc2UoKS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CkBAIC03MjMsOCArNzE4LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFt
ZXM7CiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAobmFtZSAhPSB1bnF1YWxpZmllZEluZm9UYWJsZU5hbWUp
CiAgICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChuYW1lKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
aW5kZXggMGFkM2I0ODAyM2YxZjk2ZWFiOWJjZjRmNzcyZGU0OTMzMDdlYmY4NC4uYjdlMTdhODc0
ZDk3MGJlNmJjNWQzMTk2NzYzMWIyYmYzYTNjZDQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjM1LDE1
ICsyMzUsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2Nr
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3Jp
Z2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCkBAIC0yNTYsMTUgKzI1NiwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzRW50cnlGb3JEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0YWJhc2UuIFNldCB1cCBh
IHF1ZXJ5IHRvIGFzayBmb3IgdGhlIGRiIG9mIGludGVyZXN0OgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAotICAgIHJldHVybiBzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1c7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0
aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87
Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICgh
Y3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUg
JXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
RmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3Rz
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVu
dC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZp
bGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0g
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwor
ICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkp
OwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNR
TElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9N
IERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZE
b2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
IApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFz
ZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdp
biwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5h
bWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewot
ICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
Y2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRh
YmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGlu
IHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBp
cyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIg
Y29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQot
ICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNl
dCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBu
ZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMg
Zm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIK
KyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRl
cm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQn
cyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAg
ICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9
PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5h
bWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAg
IHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0
YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVu
dC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3
MSwxNSArNjczLDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3Rh
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luCiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBx
dW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBsCiAK
ICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2lu
ICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5l
d09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9
PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAgICBpZiAoIWVy
cm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
Ci0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
c3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRp
bCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21t
YW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBk
YXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIG9yaWdpblN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBv
cmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0
YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwot
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAg
ICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyAr
MTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Ug
JXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
OTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRh
dGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
ID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmls
ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0x
MjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZp
bGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQg
d2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3Jp
dGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9
IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsi
X3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVk
MS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAt
MTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRi
KQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlm
eSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1l
bnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHBy
ZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBj
b3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQu
YXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAi
aW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0
ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90
IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUs
IHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVt
YmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkg
bWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBp
ZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkg
eworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRT
ZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0
Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1l
bnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5j
b2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVt
blZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYjA4MDMwYzliNDFmMjcxZTdhYTMyN2MzYWU0
ZWM0ZjYzMGE3MDcyMS4uNWYwNGE3MmZjYjRjN2ExZGQ5MzkyMjAwOTM0NTFiNTM3ODgzZTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJM
JiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBu
ZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAg
ICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25z
dCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3Jh
Z2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIp
KTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICBncm91cC5z
ZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3Vw
OwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
ZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RI
YXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVy
bCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNo
ZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
aW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1l
bW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAg
IC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhl
IG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcg
VVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2Vz
dENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFu
aWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkp
KTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5n
KCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25z
dCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAg
IGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0
b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
KSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNo
ZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNl
dChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3Jk
IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBi
ZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhp
c3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3Rh
IG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVv
dGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hF
UkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhl
IHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZh
dWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJv
b2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
cXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAs
MTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2Fn
ZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmln
aW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAg
IC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8g
YSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2lu
ID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hl
R3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBD
YWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1c2FnZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4Nywy
MyArNDg3LDIzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFp
bmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAgICAgICAgICAgICAgICAgIiBX
SEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDAp
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVy
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0
aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZv
ciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9m
Q2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51
bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1h
aW5pbmdTaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVt
YWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMg
U0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRh
KCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0
KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50
KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3Rh
dGVtZW50LnZhbHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01B
IHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VE
KHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkp
ID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1p
dCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0
b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBA
IC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5
IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVz
dFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwg
bWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RV
UkwoKSkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQo
c3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAg
LTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91
cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNh
Y2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFs
bG93bGlzdCgpOwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOwor
ICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUg
b25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAg
ICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAg
ICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFs
bGJhY2tVUkxzKCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFs
bGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkws
IGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFy
ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwg
Y2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQs
MTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwg
cGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxl
U3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRh
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5n
IHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2Ug
ZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJl
LCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgx
MywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAg
ICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0Rmls
ZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsK
LSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxv
YigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwor
ICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQt
PmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2gg
d2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0Mywz
NiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhl
YWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAg
ICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRv
IHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVy
cywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywg
PywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
YXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBj
YWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2Ug
YWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICBy
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRh
SWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291
cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Cisg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVy
cyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChy
ZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxh
c3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hl
IGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/
LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMg
KD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFn
ZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVt
ZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
QEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJU
KHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRh
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
Q2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRy
eVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VU
IHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwg
cmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNl
LT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUo
KSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2
LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBB
IHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBz
aXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYg
KCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6
ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEz
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwot
ICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGlu
c2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3
ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
Q2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1
cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlv
bkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2
LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4g
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7
CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29k
ZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5O
RVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNv
dXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVz
Q29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVz
b3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMg
SU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVS
ZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAg
IGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2Fj
aGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURp
cmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0Owot
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2Fj
aGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwot
ICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7Cisg
ICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAg
ICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAt
MTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgz
KTsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAot
ICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7
CisgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
NSk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAog
ICAgICAgICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
dXJsLCByZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsx
MTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBj
YWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAg
YWxsb3dsaXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBW
ZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVS
TCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgYWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0
KGFsbG93bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxh
Zy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3Rz
IFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAg
Ci0gICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJl
c3VsdCA9IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hl
IG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVl
c3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBj
YWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBt
YW55IHJvd3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8g
TG9hZCBmYWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFj
a1VSTHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFs
bGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBzdG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cp
IAotICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZh
bGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tT
dGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkp
OwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0
YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hl
cyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRs
eSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5
IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
X3MpOworICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1l
bnQpOworICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAg
ICAgfQpAQCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hl
R3JvdXBzIik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0g
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMu
YXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxl
IChzZWxlY3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVy
bHM7CiB9CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAg
aWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZl
c3RVUkwpOworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAg
ICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNh
Y2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdI
RVJFIGNhY2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdy
b3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwot
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVt
ZW50KTsKKyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3Rh
dGVtZW50LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDEx
LDIwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBp
biBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVS
ZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0
aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAg
ICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENh
Y2hlUmVzb3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldI
RVJFIChTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURh
dGEucGF0aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAg
ICAKLSAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAo
IXNlbGVjdFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhz
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNR
TElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSBzZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgp
ID09IFNRTElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0
ZWRDYWNoZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEs
IGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgcGF0
aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOwog
ICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUgPSAwOwogICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCAyNDI1ZjgzZDcy
NjI2ZTBlNTBkZmM2YzZjYjk1MDY3ZjA2ZjU3NWY1Li42ODA4YjE0M2RkNDY5OTRkZmJhYjY4ZWZi
ODQ4ODJmOTdiNDE5YmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKQEAgLTE5Myw3ICsxOTMsOCBAQCB2b2lkIENvb2tp
ZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpZiAoaXNPbk1lbW9yeSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lv
biJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzMsMjUgKzI3NCwyNSBAQCBib29sIENvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiQ29va2ll
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3Jp
dHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFp
bnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9
IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAl
ZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGlu
dGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAg
IExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVj
aywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7Cisg
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAg
ICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiQ29va2llIGRh
dGFiYXNlIGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5k
YXRhKCkpOwpAQCAtMzg2LDIwICszODcsMTYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENv
b2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKIAog
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdFVybCB9Owog
Ci0gICAgY29uc3QgU3RyaW5nIHNxbCA9Ci0gICAgICAgICJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRv
bWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tp
ZSBXSEVSRSAiXAorICAgIGF1dG8gcHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2Vj
dXJlLCBzZXNzaW9uIEZST00gQ29va2llIFdIRVJFICJcCiAgICAgICAgICIoTk9UICgoc2Vzc2lv
biA9IDApIEFORCAoZXhwaXJlcyA8ID8pKSkiCiAgICAgICAgICJBTkQgKGh0dHBvbmx5ID0gQ09B
TEVTQ0UoTlVMTElGKD8sIC0xKSwgaHR0cG9ubHkpKSAiXAogICAgICAgICAiQU5EIChzZWN1cmUg
PSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBzZWN1cmUpKSAiXAogICAgICAgICAiQU5EIChzZXNz
aW9uID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2Vzc2lvbikpICJcCiAgICAgICAgICJBTkQg
KChkb21haW4gPSA/KSBPUiAoZG9tYWluIEdMT0IgPykpICJcCi0gICAgICAgICJPUkRFUiBCWSBs
ZW5ndGgocGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiOwotCi0gICAgYXV0byBwc3RtdCA9IG1ha2VV
bmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworICAgICAgICAiT1JERVIg
QlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIl9zKTsKICAgICBpZiAoIXBzdG10KQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcHN0bXQtPnByZXBhcmUoKTsKICAg
ICBwc3RtdC0+YmluZEludDY0KDEsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
Lm1pbGxpc2Vjb25kcygpKTsKICAgICBwc3RtdC0+YmluZEludCgyLCBodHRwT25seSA/ICpodHRw
T25seSA6IC0xKTsKICAgICBwc3RtdC0+YmluZEludCgzLCBzZWN1cmUgPyAqc2VjdXJlIDogLTEp
OwpAQCAtNDExLDkgKzQwOCw2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJE
Qjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgZWxzZQog
ICAgICAgICBwc3RtdC0+YmluZFRleHQoNiwgU3RyaW5nKCIqLiIpICsgcmVnaXN0cmFibGVEb21h
aW4uc3RyaW5nKCkpOwogCi0gICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQogICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGlsZSAocHN0bXQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CkBAIC00NTMsNyArNDQ3LDYgQEAgT3B0aW9uYWw8VmVj
dG9yPENvb2tpZT4+IENvb2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QKICAgICAgICAgY29va2llLnNlc3Npb24gPSBjb29raWVTZXNzaW9uOwogICAg
ICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwogICAgIH0KLSAgICBwc3RtdC0+
ZmluYWxpemUoKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtNDYzLDExICs0NTYsMTEg
QEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgIFZlY3Rv
cjxDb29raWU+IHJlc3VsdDsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZyBzcWwgPSAi
U0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1
cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3M7Ci0gICAgYXV0byBwc3RtdCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworCisgICAgYXV0byBwc3RtdCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBh
dGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3MpOwog
ICAgIGlmICghcHN0bXQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcHN0bXQtPnByZXBh
cmUoKTsKKwogICAgIHdoaWxlIChwc3RtdC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKICAgICAg
ICAgQ29va2llIGNvb2tpZTsKICAgICAgICAgY29va2llLm5hbWUgPSBwc3RtdC0+Z2V0Q29sdW1u
VGV4dCgwKTsKQEAgLTQ4Miw3ICs0NzUsNiBAQCBWZWN0b3I8Q29va2llPiBDb29raWVKYXJEQjo6
Z2V0QWxsQ29va2llcygpCiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gKHBzdG10LT5nZXRDb2x1
bW5JbnQoNykgPT0gMSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsK
ICAgICB9Ci0gICAgcHN0bXQtPmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNTcxLDE2ICs1NjMsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYKIAogSGFzaFNldDxT
dHJpbmc+IENvb2tpZUphckRCOjphbGxEb21haW5zKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOwotICAgIHN0YXRl
bWVudC5wcmVwYXJlKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBIYXNoU2V0PFN0cmluZz4gZG9tYWluczsKLSAgICB3
aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gZG9t
YWluID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBkb21haW4gPSBzdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIGRvbWFpbnMuYWRkKGRvbWFpbik7CiAgICAgfQot
Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIGRvbWFpbnM7CiB9CiAKQEAg
LTYzNywxMCArNjI4LDkgQEAgYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCiAK
IHZvaWQgQ29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBz
cWwpCiB7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBTUUxJVEVfT0spOwotICAgIG1fc3RhdGVtZW50
cy5hZGQoc3FsLCBXVEZNb3ZlKHN0YXRlbWVudCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQp
OworICAgIG1fc3RhdGVtZW50cy5hZGQoc3FsLCBzdGF0ZW1lbnQubW92ZVRvVW5pcXVlUHRyKCkp
OwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChj
b25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQzLDEzIEBAIFNRTGl0ZVN0YXRlbWVudCYg
Q29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogCiBib29s
IENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3Rh
dGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5lcnJvcigp
KSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9yOiAlcyIs
IHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
ICAgICBpZiAoIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0YSgpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggYzIzOWI0
NDIwYjMyNWIwMDY0YzRmNmFiNjliMWI4MWI3YTBhZDdiZi4uYjZkZTMxZDEyYzlhNzBmNzAxYzMw
NjQ5MTVkY2I3ODUxNzMzNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiAKICAgICB7
CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKLSAgICAgICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
dGVtcF9zdG9yZSA9IE1FTU9SWTsiX3MpLmV4ZWN1dGVDb21tYW5kKCkpCisgICAgICAgIGlmICgh
ZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykpCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3RvcmUg
dG8gbWVtb3J5Iik7CiAgICAgfQogCkBAIC0xOTcsMTAgKzE5NywxMCBAQCB2b2lkIFNRTGl0ZURh
dGFiYXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiB7CiAgICAgbV91c2VXQUwgPSB0cnVlOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHdhbFN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBq
b3VybmFsX21vZGU9V0FMOyJfcyk7Ci0gICAgICAgIGlmICh3YWxTdGF0ZW1lbnQucHJlcGFyZUFu
ZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gd2FsU3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKKyAgICAgICAgaWYg
KHdhbFN0YXRlbWVudCAmJiB3YWxTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAj
aWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtb2RlLCAid2FsIikpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJqb3VybmFs
X21vZGUgb2YgZGF0YWJhc2Ugc2hvdWxkIGJlICdXQUwnLCBidXQgaXMgJyVzJyIsIG1vZGUudXRm
OCgpLmRhdGEoKSk7CiAjZW5kaWYKQEAgLTIxMCw5ICsyMTAsOSBAQCB2b2lkIFNRTGl0ZURhdGFi
YXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiAKICAgICB7CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGNoZWNrcG9pbnRTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgd2FsX2NoZWNr
cG9pbnQoVFJVTkNBVEUpIl9zKTsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQucHJl
cGFyZUFuZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBpZiAoY2hlY2twb2lu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgIGF1dG8gY2hlY2twb2ludFN0YXRl
bWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSki
X3MpOworICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudCAmJiBjaGVja3BvaW50U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnRT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSkKICAgICAgICAgICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJTUUxpdGUgZGF0YWJhc2UgY2hlY2twb2ludCBpcyBibG9ja2VkIik7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGNo
ZWNrcG9pbnQ6ICVzIiwgbGFzdEVycm9yTXNnKCkpOwpAQCAtMjcyLDggKzI3Miw4IEBAIGludDY0
X3QgU1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKCkKICAgICB7CiAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZh
bHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBt
YXhfcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOworICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0
ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxl
QXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTI5Myw5ICsyOTMsOCBAQCB2b2lkIFNRTGl0
ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpCiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCBtYWtlU3RyaW5nKCJQUkFHTUEg
bWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKLSAgICBzdGF0ZW1lbnQucHJl
cGFyZSgpOwotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSBtYXhfcGFn
ZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCBtYXhpbXVtIHNpemUgb2YgZGF0YWJhc2UgdG8gJWxsaSBieXRlcyIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oc2l6ZSkpOwogCiAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKQEAg
LTMxMCw4ICszMDksOCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhv
cml6ZXIoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqdGhpcywgIlBSQUdNQSBwYWdlX3NpemUiX3MpOwotICAgICAgICBtX3BhZ2VTaXplID0gc3Rh
dGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgcGFnZV9zaXplIl9zKTsKKyAgICAgICAgbV9wYWdlU2l6ZSA9IHN0
YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgCiAgICAg
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQpAQCAtMzI3LDggKzMyNiw4IEBAIGlu
dDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUoKQogICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxz
ZSk7CiAgICAgICAgIC8vIE5vdGU6IGZyZWVsaXN0X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUg
My40LjEuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
ZnJlZWxpc3RfY291bnQiX3MpOwotICAgICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1l
bnQoIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7CisgICAgICAgIGZyZWVsaXN0Q291bnQgPSBz
dGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5h
YmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTM0Miw4ICszNDEsOCBAQCBpbnQ2NF90
IFNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUoKQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2Up
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vf
Y291bnQiX3MpOwotICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBh
Z2VfY291bnQiX3MpOworICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsK
ICAgICB9CiAKQEAgLTM3MSwxNCArMzcwLDIyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEJ1
c3lIYW5kbGVyKGludCgqaGFuZGxlcikodm9pZCosIGludCkpCiAgICAgICAgIExPRyhTUUxEYXRh
YmFzZSwgIkJ1c3kgaGFuZGxlciBzZXQgb24gbm9uLW9wZW4gZGF0YWJhc2UiKTsKIH0KIAotYm9v
bCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCitib29s
IFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIHF1ZXJ5KQogewot
ICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCkuZXhlY3V0ZUNvbW1hbmQoKTsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIHJldHVy
biBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworfQorCitib29sIFNR
TGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3Rh
dGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKIH0KIAogYm9vbCBTUUxpdGVE
YXRhYmFzZTo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0g
ICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5yZXR1cm5zQXRMZWFzdE9uZVJl
c3VsdCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChzcWwpOworICAg
IHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5yZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgp
OwogfQogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRh
YmxlbmFtZSkKQEAgLTM4NiwxOCArMzkzLDE1IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxl
RXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQogICAgIGlmICghaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBzdGF0ZW1lbnQgPSAiU0VMRUNUIG5hbWUg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1lID0gJyIgKyB0
YWJsZW5hbWUgKyAiJzsiOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqdGhpcywgc3RhdGVt
ZW50KTsKLSAgICBzcWwucHJlcGFyZSgpOwotICAgIHJldHVybiBzcWwuc3RlcCgpID09IFNRTElU
RV9ST1c7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFt
ZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAnIiAr
IHRhYmxlbmFtZSArICInOyIpOworICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogdm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxU
YWJsZXMoKQogewotICAgIFN0cmluZyBxdWVyeSA9ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfczsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZXM7
Ci0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5KS5yZXR1cm5UZXh0UmVzdWx0
cygwLCB0YWJsZXMpKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQgfHwgIXN0YXRlbWVudC0+cmV0dXJuVGV4dFJlc3VsdHMoMCwgdGFi
bGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NTgzLDEwICs1ODcsMTAgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6aXNBdXRvQ29tbWl0T24oKSBj
b25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0o
KQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgYXV0b192
YWN1dW0iX3MpOwotICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCk7CisgICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gMDsKKyAgICBpZiAoYXV0byBzdGF0ZW1l
bnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYXV0b192YWN1dW0iX3MpKQorICAgICAgICBh
dXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOwogICAgIGludCBlcnJv
ciA9IGxhc3RFcnJvcigpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgLy8gQ2hl
Y2sgaWYgd2UgZ290IGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byBnZXQgdGhlIHZhbHVlIG9mIHRo
ZSBhdXRvX3ZhY3V1bSBmbGFnLgogICAgIC8vIElmIHdlIGdvdCBhIFNRTElURV9CVVNZIGVycm9y
LCB0aGVuIHRoZXJlJ3MgcHJvYmFibHkgYW5vdGhlciB0cmFuc2FjdGlvbiBpbgpAQCAtNjQzLDQg
KzY0Nyw3MiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpyZWxlYXNlTWVtb3J5KCkKICAgICBzcWxp
dGUzX2RiX3JlbGVhc2VfbWVtb3J5KG1fZGIpOwogfQogCitzdGF0aWMgRXhwZWN0ZWQ8c3FsaXRl
M19zdG10KiwgaW50PiBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNl
JiBkYXRhYmFzZSwgY29uc3QgY2hhciogcXVlcnksIHNpemVfdCBxdWVyeUxlbmd0aCkKK3sKKyAg
ICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhkYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOworICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIsIHF1ZXJ5KTsKKworICAgIC8v
IFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluY2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0
ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOworICAgIC8vIHRoaXMgbGV0cyBTUUxpdGUgYXZvaWQg
YW4gZXh0cmEgc3RyaW5nIGNvcHkuCisgICAgc2l6ZV90IGxlbmd0aEluY2x1ZGluZ051bGxDaGFy
YWN0ZXIgPSBxdWVyeUxlbmd0aCArIDE7CisKKyAgICBzcWxpdGUzX3N0bXQqIHN0YXRlbWVudCB7
IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiB0YWlsID0gbnVsbHB0cjsKKyAgICBpbnQgZXJy
b3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVyeSwg
bGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciwgJnN0YXRlbWVudCwgJnRhaWwpOworCisgICAg
aWYgKGVycm9yICE9IFNRTElURV9PSykgeworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxp
dGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5LCBzcWxpdGUz
X2Vycm1zZyhkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yKTsKKyAgICB9CisKKyAgICBpZiAodGFpbCAmJiAqdGFpbCkgeworICAg
ICAgICBzcWxpdGUzX2ZpbmFsaXplKHN0YXRlbWVudCk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTUUxJVEVfRVJST1IpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9
CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJpbmcgcXVl
cnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0byBzcWxT
dGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5kYXRh
KCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRh
dGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3Io
KSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3FsU3RhdGVt
ZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBh
dXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1
ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1Ymxp
Y31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxVbmlxdWVS
ZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0g
cXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBx
dWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FM
aXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVy
cygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVl
cnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRl
bWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1l
bnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIwZmE2M2E5
OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdv
b2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsOCArMjgs
MTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFz
dENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFu
ZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5k
KEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0
IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29u
c3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB0
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBp
bnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoQVND
SUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8
U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3Rh
dGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOwor
CiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhpcyBpcyB0
aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IGRl
YThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLjcyYWNjYzA4NmY4YjRiNzE4
ZjA5MThiZGJkNTU0ZDkxYTM5ZjMxN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQ6OlNR
TGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50
KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwgbV9zdGF0
ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NFUlQoc3Rh
dGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkKK1NRTGl0
ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVyKQorICAg
IDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQoc3RkOjpl
eGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxpemUoKTsK
IH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1lbnQ6On5T
UUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQotICAgIExv
Y2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLQotICAg
IENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKLSAgICAK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5kYXRhKCkp
OwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBu
dWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBsZXRzIFNR
TGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3RoSW5jbHVk
aW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0IGNoYXIq
IHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRpbmdOdWxs
Q2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAhPSBTUUxJ
VEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxl
ZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwpCi0gICAg
ICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lz
UHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXJyb3I7
CisgICAgaWYgKG1fc3RhdGVtZW50KQorICAgICAgICBzcWxpdGUzX2ZpbmFsaXplKG1fc3RhdGVt
ZW50KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6c3RlcCgpCiB7CiAgICAgTG9ja0hvbGRl
ciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwogCi0gICAgaWYgKCFt
X3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQogICAgIC8vIFRoZSBkYXRh
YmFzZSBuZWVkcyB0byB1cGRhdGUgaXRzIGxhc3QgY2hhbmdlcyBjb3VudCBiZWZvcmUgZWFjaCBz
dGF0ZW1lbnQKICAgICAvLyBpbiBvcmRlciB0byBjb21wdXRlIHByb3Blcmx5IHRoZSBsYXN0Q2hh
bmdlcygpIHJldHVybiB2YWx1ZS4KICAgICBtX2RhdGFiYXNlLnVwZGF0ZUxhc3RDaGFuZ2VzQ291
bnQoKTsKIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHN0ZXAgLSAlcyIsIG1fcXVlcnku
YXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBlcnJvciA9IHNxbGl0ZTNfc3RlcChtX3N0YXRlbWVu
dCk7Ci0gICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVwIGZhaWxlZCAoJWkpXG5R
dWVyeSAtICVzXG5FcnJvciAtICVzIiwgCi0gICAgICAgICAgICBlcnJvciwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsK
LSAgICB9CisgICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9S
T1cpCisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxu
RXJyb3IgLSAlcyIsIGVycm9yLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5k
bGUoKSkpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQotICAgIAotaW50IFNRTGl0ZVN0YXRlbWVu
dDo6ZmluYWxpemUoKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVkID0g
ZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FM
SVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIGZpbmFsaXplIC0gJXMiLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3FsaXRlM19maW5hbGl6ZSht
X3N0YXRlbWVudCk7Ci0gICAgbV9zdGF0ZW1lbnQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7Ci19
CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkgCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVw
YXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSByZXNldCAtICVzIiwgbV9xdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQobV9zdGF0ZW1lbnQpOwog
ICAgIHNxbGl0ZTNfY2xlYXJfYmluZGluZ3MobV9zdGF0ZW1lbnQpOwogICAgIHJldHVybiBzdGF0
dXM7CkBAIC0xMjksNDIgKzg0LDIxIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkKIAog
Ym9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKIHsKLSAgICBpZiAoIW1fc3Rh
dGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ET05F
KSB7Ci0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgZmluYWxpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RlcCgpID09IFNR
TElURV9ET05FOwogfQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuc0F0TGVhc3RPbmVS
ZXN1bHQoKQogewotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9P
SykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAg
IGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0KKyAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpCiB7
Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50
KCkpOwogICAgIEFTU0VSVChibG9iIHx8ICFzaXplKTsKICAgICBBU1NFUlQoc2l6ZSA+PSAwKTsK
IAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7Ci0K
ICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9iLCBz
aXplLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIApAQCAtMTg1LDcgKzExOSw2IEBAIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4
dCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTIwNCw3ICsxMzcsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
VGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludChpbnQgaW5kZXgsIGludCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJl
cGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjEzLDcgKzE0
NSw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdl
cikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBp
bnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+
IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJh
bWV0ZXJDb3VudCgpKTsKIApAQCAtMjIyLDcgKzE1Myw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0y
MzEsNyArMTYxLDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgs
IGRvdWJsZSBudW1iZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmROdWxsKGludCBpbmRl
eCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTI0OSwyNiArMTc4LDE5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmRWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSkKIAogdW5zaWduZWQgU1FM
aXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVCht
X2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KG1fc3RhdGVtZW50KTsKIH0K
IAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIEFTU0VSVChtX2lz
UHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBzcWxpdGUzX2RhdGFfY291bnQobV9zdGF0ZW1lbnQpOwogfQogCiBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAw
KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGFzU3Rh
cnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMjc4LDE5ICsyMDAsMTQgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1u
TnVsbChpbnQgY29sKQogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Js
b2IoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1l
bnQpIHsKLSAgICAgICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShTdHJpbmdWaWV3KHNxbGl0ZTNfY29sdW1uX2RlY2x0eXBlKG1fc3RhdGVtZW50LCBjb2wp
KSwgImJsb2IiKTsKIH0KIAogU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShp
bnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkK
LSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNvbHVt
bkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fbmFtZTE2
KG1fc3RhdGVtZW50LCBjb2wpKSk7CkBAIC0yOTksOSArMjE2LDggQEAgU3RyaW5nIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogU1FMVmFsdWUgU1FMaXRlU3RhdGVtZW50
OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRF
X1JPVykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaGFzU3RhcnRlZFN0
ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTMzMCw5ICsyNDYsOCBAQCBTUUxWYWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVt
blZhbHVlKGludCBjb2wpCiBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGlu
dCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQot
ICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoY29sdW1u
Q291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4gU3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzcWxpdGUzX2NvbHVtbl90ZXh0MTYo
bV9zdGF0ZW1lbnQsIGNvbCkpLCBzcWxpdGUzX2NvbHVtbl9ieXRlczE2KG1fc3RhdGVtZW50LCBj
b2wpIC8gc2l6ZW9mKFVDaGFyKSk7CkBAIC0zNDEsOSArMjU2LDggQEAgU3RyaW5nIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogZG91YmxlIFNRTGl0ZVN0YXRlbWVudDo6
Z2V0Q29sdW1uRG91YmxlKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBp
ZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQotICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGlu
ZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gMC4wOwogICAgIGlm
IChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICByZXR1cm4g
c3FsaXRlM19jb2x1bW5fZG91YmxlKG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzUyLDkgKzI2Niw4
IEBAIGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQgY29sKQogaW50
IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNv
bCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYXNT
dGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzYzLDkg
KzI3Niw4IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQogaW50
NjRfdCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KGludCBjb2wpCiB7CiAgICAgQVNT
RVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFy
ZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50NjQobV9zdGF0ZW1lbnQsIGNvbCk7CkBA
IC0zNzUsNyArMjg3LDcgQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFz
U3RyaW5nKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9z
dGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmICghaGFz
U3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKQEAgLTM5Nyw3ICsz
MDksNyBAQCB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKGludCBj
b2wsIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAg
ICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MjMs
NyArMzM1LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3Rvcihp
bnQgY29sLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49IDAp
OwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9S
T1cpIHsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CiAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtNDUxLDE5ICszNjMsMTMgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1
bHRzKGludCBjb2wsIFZlY3RvcjxTdHJpbmc+JiB2KQogCiAgICAgdi5jbGVhcigpOwogCi0gICAg
aWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICB3aGlsZSAoc3RlcCgp
ID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtblRleHQoY29sKSk7CiAg
ICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBMT0coU1FM
RGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIs
IG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsK
ICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NzEs
MTkgKzM3NywxMyBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50UmVzdWx0cyhpbnQg
Y29sLCBWZWN0b3I8aW50PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0
ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRF
X1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uSW50KGNvbCkpOwogICAgIGJvb2wgcmVz
dWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAi
RXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50
OjpyZXR1cm5JbnRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAg
ZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00OTEsMTkgKzM5MSwxMyBA
QCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzKGludCBjb2wsIFZlY3Rv
cjxpbnQ2NF90PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQp
Ci0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykK
ICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uSW50NjQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQg
PSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7
CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJv
ciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJl
dHVybkludDY0UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZp
bmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTExLDI1ICs0MDUsMTkgQEAg
Ym9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkRvdWJsZVJlc3VsdHMoaW50IGNvbCwgVmVjdG9y
PGRvdWJsZT4mIHYpCiB7CiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50KQot
ICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICB3aGlsZSAoc3RlcCgpID09IFNRTElURV9ST1cpCiAg
ICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkRvdWJsZShjb2wpKTsKICAgICBib29sIHJlc3VsdCA9
IHRydWU7CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9y
IHJlYWRpbmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0
dXJuRG91YmxlUmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZp
bmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6
OmlzRXhwaXJlZCgpCitib29sIFNRTGl0ZVN0YXRlbWVudDo6aGFzU3RhcnRlZFN0ZXBwaW5nKCkK
IHsKLSAgICByZXR1cm4gIW1fc3RhdGVtZW50OworICAgIHJldHVybiBzcWxpdGUzX3N0bXRfYnVz
eShtX3N0YXRlbWVudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCBhN2FjZGU1Y2ZjNWIy
ZDM1NjJiMWZiNTFmZDZhNzFiZDk1Y2NlNDA4Li42MzUxMmJiNmViNDlhNmVlMTllNzFmMWM2N2Ix
ZmU4ZjI5ZjY1YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEwICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIFNRTGl0ZVN0YXRlbWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMaXRl
U3RhdGVtZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiwgY29uc3QgU3RyaW5nJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgflNRTGl0ZVN0YXRlbWVudCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmJik7CiAgICAgCi0gICAgV0VCQ09S
RV9FWFBPUlQgaW50IHByZXBhcmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2Io
aW50IGluZGV4LCBjb25zdCB2b2lkKiBibG9iLCBpbnQgc2l6ZSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgaW50IGJpbmRUZXh0KGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CkBAIC01MCwyMyAr
NDksMTggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGJpbmRQYXJhbWV0
ZXJDb3VudCgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHN0ZXAoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBpbnQgZmluYWxpemUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcmVz
ZXQoKTsKICAgICAKLSAgICBpbnQgcHJlcGFyZUFuZFN0ZXAoKSB7IGlmIChpbnQgZXJyb3IgPSBw
cmVwYXJlKCkpIHJldHVybiBlcnJvcjsgcmV0dXJuIHN0ZXAoKTsgfQotICAgIAotICAgIC8vIHBy
ZXBhcmVzLCBzdGVwcywgYW5kIGZpbmFsaXplcyB0aGUgcXVlcnkuCisgICAgLy8gc3RlcHMgYW5k
IGZpbmFsaXplcyB0aGUgcXVlcnkuCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCAzIHN0ZXBz
IHN1Y2NlZWQgd2l0aCBzdGVwKCkgcmV0dXJuaW5nIFNRTElURV9ET05FCiAgICAgLy8gcmV0dXJu
cyBmYWxzZSBvdGhlcndpc2UgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZUNvbW1h
bmQoKTsKICAgICAKLSAgICAvLyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMuICAKKyAg
ICAvLyBzdGVwcywgYW5kIGZpbmFsaXplcy4KICAgICAvLyByZXR1cm5zIHRydWUgaXMgc3RlcCgp
IHJldHVybnMgU1FMSVRFX1JPVwogICAgIC8vIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlCiAgICAg
Ym9vbCByZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgpOwogCi0gICAgYm9vbCBpc0V4cGlyZWQoKTsK
LQogICAgIC8vIFJldHVybnMgLTEgb24gbGFzdC1zdGVwIGZhaWxpbmcuICBPdGhlcndpc2UsIHJl
dHVybnMgbnVtYmVyIG9mIHJvd3MKICAgICAvLyByZXR1cm5lZCBpbiB0aGUgbGFzdCBzdGVwKCkK
ICAgICBpbnQgY29sdW1uQ291bnQoKTsKQEAgLTkwLDE1ICs4NCwxNSBAQCBwdWJsaWM6CiAKICAg
ICBTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlOyB9CiAgICAg
Ci0gICAgY29uc3QgU3RyaW5nJiBxdWVyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcnk7IH0KLSAg
ICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFNRTGl0ZURhdGFiYXNlOworICAgIFNRTGl0
ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYsIHNxbGl0ZTNfc3RtdCopOworCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgaGFzIGJlZW4gc3RlcHBlZCBhdCBs
ZWFzdCBvbmNlIHVzaW5nIHN0ZXAoKSBidXQgaGFzIG5laXRoZXIgcnVuIHRvIGNvbXBsZXRpb24g
KHJldHVybmVkIFNRTElURV9ET05FIGZyb20gc3RlcCgpKSBub3IgYmVlbiByZXNldCgpLgorICAg
IGJvb2wgaGFzU3RhcnRlZFN0ZXBwaW5nKCk7CisKICAgICBTUUxpdGVEYXRhYmFzZSYgbV9kYXRh
YmFzZTsKLSAgICBTdHJpbmcgbV9xdWVyeTsKICAgICBzcWxpdGUzX3N0bXQqIG1fc3RhdGVtZW50
OwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2lzUHJlcGFyZWQgeyBmYWxzZSB9Owot
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcAppbmRleCA2ZjdmNGJhMTY2MGI0
ZjdhOTc3MjEyYzg1NjNhNDNjNjY1ZTMwYjU0Li40NjFhMmM3ZmNkYTg5YjgzN2E1OTkwM2ViY2Zh
M2Q1YjI4M2M1NjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Vh
cmNoUG9wdXBNZW51REIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFy
Y2hQb3B1cE1lbnVEQi5jcHAKQEAgLTEzMCwyNSArMTMwLDI1IEBAIGJvb2wgU2VhcmNoUG9wdXBN
ZW51REI6OmNoZWNrRGF0YWJhc2VWYWxpZGl0eSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxl
RXhpc3RzKCJTZWFyY2giKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGludGVncml0eShtX2RhdGFiYXNlLCAiUFJBR01BIHF1aWNrX2NoZWNrOyIpOwotICAg
IGlmIChpbnRlZ3JpdHkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW50ZWdy
aXR5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgcXVpY2tfY2hlY2s7Il9z
KTsKKyAgICBpZiAoIWludGVncml0eSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBl
eGVjdXRlIGRhdGFiYXNlIGludGVncml0eSBjaGVjayIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAgIGlu
dCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdENvZGUgIT0g
U1FMSVRFX1JPVykgewogICAgICAgICBMT0dfRVJST1IoIkludGVncml0eSBxdWlja19jaGVjayBz
dGVwIHJldHVybmVkICVkIiwgcmVzdWx0Q29kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpbnQgY29sdW1ucyA9IGludGVncml0eS5jb2x1bW5Db3VudCgpOworICAgIGlu
dCBjb2x1bW5zID0gaW50ZWdyaXR5LT5jb2x1bW5Db3VudCgpOwogICAgIGlmIChjb2x1bW5zICE9
IDEpIHsKICAgICAgICAgTE9HX0VSUk9SKCJSZWNlaXZlZCAlaSBjb2x1bW5zIHBlcmZvcm1pbmcg
aW50ZWdyaXR5IGNoZWNrLCBzaG91bGQgYmUgMSIsIGNvbHVtbnMpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHkuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAogICAgIGlmIChyZXN1bHRUZXh0ICE9ICJvayIpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJTZWFyY2ggYXV0b3NhdmUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCAtICVz
IiwgcmVzdWx0VGV4dC5hc2NpaSgpLmRhdGEoKSk7CkBAIC0yMjQsMTcgKzIyNCwxOSBAQCBib29s
IFNlYXJjaFBvcHVwTWVudURCOjpvcGVuRGF0YWJhc2UoKQogCiB2b2lkIFNlYXJjaFBvcHVwTWVu
dURCOjpjbG9zZURhdGFiYXNlKCkKIHsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewot
ICAgICAgICBtX2xvYWRTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0g
ICAgICAgIG1faW5zZXJ0U2VhcmNoVGVybVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAg
bV9yZW1vdmVTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAg
IG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICB9CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xvYWRTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1faW5zZXJ0U2VhcmNoVGVybVN0YXRlbWVudCA9IG51bGxwdHI7
CisgICAgbV9yZW1vdmVTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1fZGF0YWJhc2UuY2xvc2UoKTsKIH0KIAogdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6dmVyaWZ5
U2NoZW1hVmVyc2lvbigpCiB7Ci0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3Zl
cnNpb24iX3MpOworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQoMCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjcxLDIzICsyNzMsMjUgQEAgdm9pZCBTZWFyY2hQb3B1cE1lbnVE
Qjo6Y2hlY2tTUUxpdGVSZXR1cm5Db2RlKGludCBhY3R1YWwpCiAKIGludCBTZWFyY2hQb3B1cE1l
bnVEQjo6ZXhlY3V0ZVNpbXBsZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJv
cikKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7Ci0g
ICAgaW50IHJldCA9IHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpOwotICAgIHN0YXRlbWVudC5m
aW5hbGl6ZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KHNxbCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tTUUxpdGVSZXR1
cm5Db2RlKHN0YXRlbWVudC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlbWVudC5lcnJv
cigpOworICAgIH0KIAotICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpOworICAgIGludCBy
ZXQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmV0ICE9IFNRTElURV9PSyAmJiByZXQg
IT0gU1FMSVRFX0RPTkUgJiYgcmV0ICE9IFNRTElURV9ST1cgJiYgIWlnbm9yZUVycm9yKQogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2Np
aSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0KICAgICByZXR1cm4gcmV0
OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiBTZWFyY2hQb3B1cE1lbnVE
Qjo6Y3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0gICAgYXV0
byBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3Fs
KTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChyZXQsIHJldCA9PSBTUUxJVEVfT0spOwotICAgIHJldHVybiBzdGF0ZW1lbnQ7CisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7CisgICAg
QVNTRVJUKHN0YXRlbWVudCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBzdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAppbmRleCA4OTJjM2Y0OWU5MDE0YTM1
ZmU5Mjk4NGVmOWEyOTA0YTdiZGVkNTYwLi5iMGM3MTYxYTgwNmE4NjhlYzRmZjQ0NzY1M2JiODUz
ZmMwOTY4NDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcApAQCAtMjg1LDExICsyODUs
MTEgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJs
ZSgpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KCptX2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgIHJldHVybiAiVW5hYmxl
IHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFi
bGUuIjsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0n
UmVjb3JkcyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgICAgIHJldHVy
biAiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJl
Y29yZHMgdGFibGUuIl9zOwogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQu
c3RlcCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAK
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBp
dCBhbmQgdGhlbiBiYWlsLgogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05F
KSB7CkBAIC0zMDEsNyArMzAxLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1
cmVWYWxpZFJlY29yZHNUYWJsZSgpCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRF
X1JPVykKICAgICAgICAgICAgIHJldHVybiAiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiI7CiAKLSAgICAgICAgY3VycmVudFNj
aGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3Vy
cmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNDI3LDE4ICs0MjcsMTggQEAgYm9vbCBSZWdpc3Ry
YXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNv
bnRleHREYXRhPiYKICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9kYXRhYmFz
ZSk7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPykiX3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gaW5zZXJ0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0
YXRlbWVudCgiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8pIl9zKTsKKyAgICBpZiAoIWluc2VydFN0YXRlbWVudCkgewogICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50IHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkp
IC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYXV0byYgc2NyaXB0U3Rv
cmFnZSA9IHRoaXMtPnNjcmlwdFN0b3JhZ2UoKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlv
biA6IHJlbW92ZWRSZWdpc3RyYXRpb25zKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iKTsKLSAgICAg
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmlu
ZFRleHQoMSwgcmVnaXN0cmF0aW9uLnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gZGVs
ZXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
UmVjb3JkcyBXSEVSRSBrZXkgPSA/Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQK
KyAgICAgICAgICAgIHx8IGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgcmVnaXN0cmF0aW9u
LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBkZWxldGVTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byByZW1vdmUgcmVnaXN0cmF0aW9uIGRhdGEg
ZnJvbSByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KQEAgLTQ1NywxOSArNDU3LDE5IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAg
ICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgY2VydGlmaWNhdGVJbmZvRW5jb2RlcjsK
ICAgICAgICAgY2VydGlmaWNhdGVJbmZvRW5jb2RlciA8PCBkYXRhLmNlcnRpZmljYXRlSW5mbzsK
IAotICAgICAgICBpZiAoc3FsLmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0Rh
dGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIs
IGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMywgZGF0YS5yZWdpc3RyYXRpb24u
c2NvcGVVUkwucGF0aCgpLnRvU3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
c3FsLmJpbmRUZXh0KDQsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmlnaW4oKS5kYXRhYmFz
ZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZERvdWJs
ZSg1LCBkYXRhLnJlZ2lzdHJhdGlvbi5sYXN0VXBkYXRlVGltZS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDYsIHVw
ZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVS
TC5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoOCwg
d29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3FsLmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIu
YnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
MCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVz
b3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuYmluZEJsb2IoMTIsIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRp
ZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgaWYgKGluc2VydFN0YXRl
bWVudC0+YmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvRGF0YWJhc2VLZXkoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIs
IGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRhdGEu
cmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBhdGgoKS50b1N0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNCwgZGF0YS5yZWdpc3RyYXRp
b24ua2V5LnRvcE9yaWdpbigpLmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZERvdWJsZSg1LCBkYXRhLnJlZ2lzdHJh
dGlvbi5sYXN0VXBkYXRlVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg2LCB1cGRhdGVW
aWFDYWNoZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIGRhdGEu
c2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0
YXRlbWVudC0+YmluZFRleHQoOCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5
LCBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJl
ZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0
UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVy
LmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxl
ZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVz
IiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNTAyLDI2ICs1MDIsMjYg
QEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczoiKTsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3FsKCptX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBSZWNvcmRzOyJfcyk7Ci0gICAgaWYg
KHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3FsID0gbV9kYXRhYmFzZS0+
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJPTSBSZWNvcmRzOyJfcyk7CisgICAgaWYgKCFz
cWwpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmcm9tIHJlY29yZHMgdGFibGUgKCIsIG1fZGF0
YWJhc2UtPmxhc3RFcnJvcigpLCAiKSAtICIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
IAotICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzcWwtPnN0
ZXAoKTsKIAotICAgIGZvciAoOyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0gc3FsLnN0
ZXAoKSkgeworICAgIGZvciAoOyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0gc3FsLT5z
dGVwKCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBJbXBvcnRpbmcgYSByZWdpc3RyYXRpb24gZnJvbSB0
aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgYXV0byBrZXkgPSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uS2V5Ojpmcm9tRGF0YWJhc2VLZXkoc3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICBh
dXRvIG9yaWdpblVSTCA9IFVSTCB7IFVSTCgpLCBzcWwuZ2V0Q29sdW1uVGV4dCgxKSB9OwotICAg
ICAgICBhdXRvIHNjb3BlUGF0aCA9IHNxbC5nZXRDb2x1bW5UZXh0KDIpOworICAgICAgICBhdXRv
IGtleSA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtleShzcWwt
PmdldENvbHVtblRleHQoMCkpOworICAgICAgICBhdXRvIG9yaWdpblVSTCA9IFVSTCB7IFVSTCgp
LCBzcWwtPmdldENvbHVtblRleHQoMSkgfTsKKyAgICAgICAgYXV0byBzY29wZVBhdGggPSBzcWwt
PmdldENvbHVtblRleHQoMik7CiAgICAgICAgIGF1dG8gc2NvcGVVUkwgPSBVUkwgeyBvcmlnaW5V
UkwsIHNjb3BlUGF0aCB9OwotICAgICAgICBhdXRvIHRvcE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
RGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihzcWwuZ2V0Q29sdW1uVGV4dCgzKSk7Ci0gICAg
ICAgIGF1dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhz
cWwuZ2V0Q29sdW1uRG91YmxlKDQpKTsKLSAgICAgICAgYXV0byB1cGRhdGVWaWFDYWNoZSA9IHN0
cmluZ1RvVXBkYXRlVmlhQ2FjaGUoc3FsLmdldENvbHVtblRleHQoNSkpOwotICAgICAgICBhdXRv
IHNjcmlwdFVSTCA9IFVSTCB7IFVSTCgpLCBzcWwuZ2V0Q29sdW1uVGV4dCg2KSB9OwotICAgICAg
ICBhdXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLmdldENvbHVtblRleHQo
NykpOworICAgICAgICBhdXRvIHRvcE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURh
dGFiYXNlSWRlbnRpZmllcihzcWwtPmdldENvbHVtblRleHQoMykpOworICAgICAgICBhdXRvIGxh
c3RVcGRhdGVDaGVja1RpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLT5nZXRDb2x1
bW5Eb3VibGUoNCkpOworICAgICAgICBhdXRvIHVwZGF0ZVZpYUNhY2hlID0gc3RyaW5nVG9VcGRh
dGVWaWFDYWNoZShzcWwtPmdldENvbHVtblRleHQoNSkpOworICAgICAgICBhdXRvIHNjcmlwdFVS
TCA9IFVSTCB7IFVSTCgpLCBzcWwtPmdldENvbHVtblRleHQoNikgfTsKKyAgICAgICAgYXV0byB3
b3JrZXJUeXBlID0gc3RyaW5nVG9Xb3JrZXJUeXBlKHNxbC0+Z2V0Q29sdW1uVGV4dCg3KSk7CiAK
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGE7Ci0gICAg
ICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOCwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0
YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRTZWN1cml0
eVBvbGljeURhdGEpOwogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29k
ZXIoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eURhdGEuc2l6ZSgpKTsKICAgICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGlmIChjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSkgewpAQCAtNTMyLDEwICs1MzIsMTAgQEAgU3RyaW5n
IFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwuZ2V0Q29sdW1uVGV4
dCg5KTsKKyAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCg5
KTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gc2NyaXB0UmVzb3VyY2VNYXBEYXRhOwotICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDEwLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEp
OworICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVzb3VyY2VN
YXBEYXRhKTsKICAgICAgICAgSGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6
SW1wb3J0ZWRTY3JpcHQ+IHNjcmlwdFJlc291cmNlTWFwOwogCiAgICAgICAgIFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFw
RGF0YS5kYXRhKCksIHNjcmlwdFJlc291cmNlTWFwRGF0YS5zaXplKCkpOwpAQCAtNTUwLDcgKzU1
MCw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAg
ICAgIH0KIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVJbmZvRGF0YTsKLSAg
ICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgY2VydGlmaWNhdGVJbmZvRGF0YSk7
CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0ZUluZm9E
YXRhKTsKICAgICAgICAgT3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87
CiAKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNv
ZGVyKGNlcnRpZmljYXRlSW5mb0RhdGEuZGF0YSgpLCBjZXJ0aWZpY2F0ZUluZm9EYXRhLnNpemUo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcAppbmRleCAwZDcyNTJiNTM1Y2EyZjdkMDg4ZWQ5NGVhMjY0Yzk3NmM1ZDQzNWNkLi4x
OWIwYTIxNDE2MmJiNjFlYTVjYzY5NmU1ZDQyNjNkY2Y5ODgwNjQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTM4Miw4
ICszODIsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVu
SVRQRGF0YWJhc2UoKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAg
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNldEJ1c3lUaW1lb3V0KG1fZGF0YWJhc2UsICJQUkFHTUEg
YnVzeV90aW1lb3V0ID0gNTAwMCIpOwotICAgIGlmIChzZXRCdXN5VGltZW91dC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LIHx8IHNldEJ1c3lUaW1lb3V0LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgYXV0byBzZXRCdXN5VGltZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJB
R01BIGJ1c3lfdGltZW91dCA9IDUwMDAiX3MpOworICAgIGlmICghc2V0QnVzeVRpbWVvdXQgfHwg
c2V0QnVzeVRpbWVvdXQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRCdXN5VGltZW91dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC00MDEsMjIgKzQwMSwyMiBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2Uo
KQogT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpCiB7CiAgICAgVmVjdG9yPFN0
cmluZz4gbWlzc2luZ1RhYmxlczsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIGFu
ZCB0YmxfbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgYW5kIHRibF9uYW1l
PT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVj
a0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGZvciAoYXV0byYg
dGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7Ci0gICAgICAg
IGlmIChzdGF0ZW1lbnQuYmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgeworICAgICAg
ICBpZiAoc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FMSVRFX09LKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEgZmFpbGVk
IHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIHNjaGVtYSBp
cyBtaXNzaW5nIHRhYmxlOiAlcyIsIHRoaXMsIHRhYmxlLmFzY2lpKCkuZGF0YSgpKTsKICAgICAg
ICAgICAgIG1pc3NpbmdUYWJsZXMuYXBwZW5kKFN0cmluZyh0YWJsZSkpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAg
ICAgfQogICAgIGlmIChtaXNzaW5nVGFibGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKQEAgLTQyNiw4ICs0MjYsOCBAQCBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYgog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWdu
S2V5cygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVuYWJsZUZvcmVpZ25LZXlzKG1fZGF0YWJh
c2UsICJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iKTsKLSAgICBpZiAoZW5hYmxlRm9yZWlnbktl
eXMucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBlbmFibGVGb3JlaWduS2V5cy5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3MpOworICAgIGlmICgh
ZW5hYmxlRm9yZWlnbktleXMgfHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDM2LDMxICs0MzYsMzEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMoKQogCiBUYWJsZUFuZEluZGV4UGFpciBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVy
aWVzKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRU
YWJsZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3Fs
aXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICd0
YWJsZSciKSk7Ci0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBhdXRvIGdldFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRi
bF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ3RhYmxlJyIpKTsKKyAgICBpZiAo
IWdldFRhYmxlU3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVB
bmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVt
YSBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoZ2V0VGFibGVTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFi
bGVBbmRJbmRleFF1ZXJpZXMgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCB0YWJs
ZSBzY2hlbWEsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIFN0cmluZyBjcmVhdGVUYWJsZVF1ZXJ5
ID0gZ2V0VGFibGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICBTdHJpbmcgY3JlYXRl
VGFibGVRdWVyeSA9IGdldFRhYmxlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IGdldEluZGV4U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5h
bWUsICInIEFORCB0eXBlID0gJ2luZGV4JyIpKTsKLSAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZ2V0SW5kZXhTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAn
aW5kZXgnIikpOworICAgIGlmICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggaW5kZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleDsKLSAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0byByYXdJbmRleCA9IFN0cmluZyhnZXRJ
bmRleFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1l
bnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gcmF3SW5kZXggPSBTdHJp
bmcoZ2V0SW5kZXhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICBpZiAoIXJh
d0luZGV4LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGluZGV4ID0gcmF3SW5kZXg7CiAgICAgfQpA
QCAtNDgwLDIwICs0ODAsMjAgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bmVlZHNVcGRhdGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2gKIAogYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMoKQog
ewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygi
U0VMRUNUIENPVU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyIp
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCop
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIFVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVz
c2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYg
KHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVl
SW5kaWNlcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNvdW50LCBl
cnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBpZiAoc3RhdGVtZW50LmdldENvbHVtbkludCgwKSA8IGV4cGVjdGVkSW5kZXhDb3VudCkK
KyAgICBpZiAoc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291bnQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1
NCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVE
YXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhw
ZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewogICAgICAgICBhdXRvIHF1ZXJ5
ID0gbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGUsICIgUkVOQU1FIFRPIF8iLCB0YWJs
ZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBhbHRlclRhYmxlKG1fZGF0YWJhc2UsIHF1ZXJ5
KTsKLSAgICAgICAgaWYgKGFsdGVyVGFibGUucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBhbHRl
clRhYmxlLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGFsdGVyVGFibGUg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIWFsdGVy
VGFibGUgfHwgYWx0ZXJUYWJsZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0
byByZW5hbWUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTU3MCwxNiArNTcwLDE2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAK
ICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtl
eXMoKSkgewogICAgICAgICBhdXRvIHF1ZXJ5ID0gaW5zZXJ0RGlzdGluY3RWYWx1ZXNJblRhYmxl
UXVlcnkodGFibGUpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgbWlncmF0ZVRhYmxlRGF0YSht
X2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIGlmIChtaWdyYXRlVGFibGVEYXRhLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sgfHwgbWlncmF0ZVRhYmxlRGF0YS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgYXV0byBtaWdyYXRlVGFibGVEYXRhID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFtaWdyYXRlVGFibGVEYXRhIHx8IG1pZ3JhdGVU
YWJsZURhdGEtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gbWlncmF0ZSBz
Y2hlbWEsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gZHJvcFF1ZXJ5ID0gbWFrZVN0cmluZygiRFJP
UCBUQUJMRSBfIiwgdGFibGUpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZHJvcFRhYmxlUXVl
cnkobV9kYXRhYmFzZSwgZHJvcFF1ZXJ5KTsKLSAgICAgICAgaWYgKGRyb3BUYWJsZVF1ZXJ5LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgZHJvcFRhYmxlUXVlcnkuc3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIGF1dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoZHJvcFF1ZXJ5KTsKKyAgICAgICAgaWYgKCFkcm9wVGFibGVRdWVyeSB8fCBkcm9w
VGFibGVRdWVyeS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIHRl
bXBvcmFyeSB0YWJsZXMsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTU5NywxNyArNTk3LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAK
IFZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb2x1
bW5zRm9yVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygi
LCB0YWJsZU5hbWUsICIpIikpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwg
IikiKSk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0Q29sdW1uc0Zyb21U
YWJsZUluZm9TdGF0ZW1lbnQgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IGNv
bHVtbnM7Ci0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICB3aGlsZSAo
c3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIG5hbWUgPSBz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgICAgIGNvbHVtbnMuYXBwZW5kKG5hbWUp
OwogICAgIH0KIApAQCAtNjIyLDE4ICs2MjIsMTggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwK
ICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQg
Q09MVU1OICIsIGNvbHVtbikpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIEFERCBDT0xV
TU4gIiwgY29sdW1uKSk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBhZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGlu
ZyBzdGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBzdGF0ZW1l
bnQtPnJlc2V0KCk7CiAgICAgfQogfQogCkBAIC02NDgsMTMgKzY0OCwxMyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNz
YXJ5KCkKIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVuYW1l
Q29sdW1uSW5UYWJsZShTdHJpbmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29sdW1uTmFtZSYmIGV4
aXN0aW5nQ29sdW1uTmFtZSwgRXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0ZWRDb2x1bW5OYW1l
KQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmlu
ZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4gIiwgZXhpc3RpbmdD
b2x1bW5OYW1lLCAiIFRPICIsIGV4cGVjdGVkQ29sdW1uTmFtZSkpOwotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFt
ZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3Rl
ZENvbHVtbk5hbWUpKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoc3RhdGVtZW50
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1Rh
YmxlIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVtbiBpbiB0YWJsZSwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTcxMiwxNSArNzEyLDE1IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCiAgICAgU3RyaW5n
IGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBh
biBleGlzdGluZyBPYnNlcnZlZCBEb21haW5zIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxp
dGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIl9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9ic2VydmVkRG9tYWlucyB0YWJs
ZS4iKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gT2JzZXJ2ZWREb21h
aW5zIHRhYmxlIGF0IGFsbCwgb3IgdGhlcmUgaXMgYW4gZXJyb3IgZXhlY3V0aW5nIHRoZSBmZXRj
aCwgZGVsZXRlIHRoZSBmaWxlLgotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0
Y2ggc2NoZW1hIGZvciB0aGUgT2JzZXJ2ZWQgRG9tYWlucyB0YWJsZS4iKTsKICAgICAgICAgICAg
IGNsb3NlKCk7CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3RvcmFnZURp
cmVjdG9yeVBhdGgpOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1h
LmlzRW1wdHkoKSk7CkBAIC03NTEsMTIgKzc1MSwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogU1FM
aXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiYgc3RhdGVtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIGxv
Z1N0cmluZykgY29uc3QKIHsKICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVl
cnkpOwotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1l
bnRPckVycm9yID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50T3JFcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiVz
IGZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xP
R19TVFJJTkcsIHRoaXMsIGxvZ1N0cmluZy5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgICAgIH0K
KyAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50T3JFcnJvci52YWx1ZSgpLm1vdmVUb1VuaXF1
ZVB0cigpOworICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgfQogICAg
IHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQoKSB9
OwogfQpAQCAtMTAwNCw5ICsxMDA2LDggQEAgT3B0aW9uYWw8dW5zaWduZWQ+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpc3RyYWIKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0g
dGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LCBkb21h
aW5JREZyb21TdHJpbmdRdWVyeSwgImRvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRl
bWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpkb21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBTdGF0ZW1lbnQ6ICVzLiBFcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIHNjb3BlZFN0YXRlbWVudC0+cXVlcnkoKS51
dGY4KCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICBpZiAoIXNjb3Bl
ZFN0YXRlbWVudCB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBAIC0x
MDM5LDIzICsxMDQwLDIzIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNlCiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3QoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+JiBkb21haW5MaXN0LCB1bnNpZ25lZCBkb21haW5JRCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoc3Rh
dGVtZW50LCBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChkb21haW5MaXN0KSwgIiApOyIpKTsKKyAg
ICBhdXRvIGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoZG9t
YWluTGlzdCksICIgKTsiKSk7CiAgICAgCi0gICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydFJlbGF0aW9uc2hp
cFN0YXRlbWVudC5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAo
IWluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudAorICAgICAgICB8fCBpbnNlcnRSZWxhdGlvbnNo
aXBTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogICAgIAogICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExBQ0Ui
KSkgewotICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LmJpbmREb3VibGUo
MiwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPmJpbmREb3Vi
bGUoMiwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FM
SVRFX09LKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMjksMTcgKzEy
MzAsMTcgQEAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXQKIAogICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxpc3Q7
CiAgICAgY29uc3QgYXV0byBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpB
bGwgPyAiJSIgOiAiMSI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNvcnRlZFN0YXRpc3RpY3MobV9k
YXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUICIsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGlu
ZygpKSk7Ci0gICAgaWYgKHNvcnRlZFN0YXRpc3RpY3MucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLmJpbmRUZXh0KDEsIHByZXZhbGVudERvbWFpbnNC
aW5kUGFyYW1ldGVyKQotICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLmJpbmRUZXh0KDIsICIl
IikgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlzdGlj
c0ZvclNvcnRpbmcoKSkpOworICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8fCBz
b3J0ZWRTdGF0aXN0aWNzLT5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRl
cikKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBTUUxJ
VEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEsIGVycm9y
IG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB0aGlyZFBh
cnR5RGF0YUxpc3Q7CiAgICAgfQotICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGlmIChoYXNCZWVuVGhpcmRQYXJ0eShzb3J0ZWRTdGF0
aXN0aWNzLmdldENvbHVtbkludCgxKSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURv
bWFpbklEID0gc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKHNv
cnRlZFN0YXRpc3RpY3MtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChoYXNC
ZWVuVGhpcmRQYXJ0eShzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMSkpKSB7CisgICAg
ICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MtPmdldENv
bHVtbkludCgwKTsKICAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbiA9IFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHRoaXJkUGFydHlEb21haW5JRCkpOwogICAgICAgICAg
ICAgdGhpcmRQYXJ0eURhdGFMaXN0LmFwcGVuZChXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhIHsgdGhpcmRQYXJ0eURvbWFpbiwgZ2V0VGhpcmRQYXJ0eURhdGFG
b3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHRoaXJkUGFydHlEb21haW5JRCwgdGhpcmRQYXJ0
eURvbWFpbikgfSk7CiAgICAgICAgIH0KQEAgLTEyNjUsOSArMTI2Niw4IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291
bnRGb3JEb21haW5zCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRh
dGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFp
bnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1Jl
bW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmco
ZG9tYWlucyksICIpIikpOworICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRv
bWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9yRG9tYWlu
cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KQEAgLTEyODUsMzEgKzEyODUsMzAgQEAgdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnMKICAg
ICArK251bWJlck9mUmVjdXJzaXZlQ2FsbHM7CiAKICAgICBTdGRTZXQ8dW5zaWduZWQ+IG5ld2x5
SWRlbnRpZmllZERvbWFpbnM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNvdXJjZXMo
bV9kYXRhYmFzZSwgIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURv
bWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2Jz
ZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9
ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChmaW5k
U3VicmVzb3VyY2VzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFN1YnJl
c291cmNlcy5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBmaW5kU3VicmVzb3VyY2VzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBP
YnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20u
ZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERv
bWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAoIWZpbmRTdWJyZXNvdXJjZXMgfHwg
ZmluZFN1YnJlc291cmNlcy0+YmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9P
SykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5k
Tm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICAKLSAgICB3aGlsZSAoZmluZFN1YnJlc291cmNlcy5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3VyY2Vz
LmdldENvbHVtbkludCgwKTsKKyAgICB3aGlsZSAoZmluZFN1YnJlc291cmNlcy0+c3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNl
cy0+Z2V0Q29sdW1uSW50KDApOwogICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZh
bGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgICAgICBpZiAo
aW5zZXJ0UmVzdWx0LnNlY29uZCkKICAgICAgICAgICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMu
aW5zZXJ0KG5ld0RvbWFpbklEKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFRv
cEZyYW1lcyhtX2RhdGFiYXNlLCAiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChmaW5kVG9wRnJh
bWVzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFRvcEZyYW1lcy5iaW5k
SW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBmaW5kVG9w
RnJhbWVzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
RnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWlu
SUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRhcmdl
dERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7Cisg
ICAgaWYgKCFmaW5kVG9wRnJhbWVzCisgICAgICAgIHx8IGZpbmRUb3BGcmFtZXMtPmJpbmRJbnQo
MSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgd2hp
bGUgKGZpbmRUb3BGcmFtZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50IG5l
d0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKGZp
bmRUb3BGcmFtZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdEb21h
aW5JRCA9IGZpbmRUb3BGcmFtZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0byBpbnNl
cnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFp
bklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAgICBuZXds
eUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7CkBAIC0xMzQxLDIxICsxMzQw
LDIwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1By
ZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBTdGRTZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1ZVRvUmVkaXJlY3Q7Ci0g
ICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJlc291
cmNlRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2
ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0g
MSJfcyk7Ci0gICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJl
Y3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsK
KyAgICBhdXRvIHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
LnN1YnJlc291cmNlRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpP
SU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJl
dmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQpIHsK
KyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3Vi
cmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICB9CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQg
RlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21h
aW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAg
ICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHRvcEZyYW1lUmVkaXJlY3RT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBESVNUSU5DVCBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVk
RG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3Rh
dGVtZW50KSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5z
ZXJ0KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdI
RVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1
bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHByZXZh
bGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7Ci0gICAgaWYgKG1hcmtQcmV2YWxlbnRT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBtYXJrUHJldmFsZW50
U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gbWFya1ByZXZhbGVu
dFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4g
KCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0
b3I+KHByZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVj
dC5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFy
a1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRU
b1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTM2NiwxMiArMTM2NCwxMiBAQCBIYXNoTWFw
PHVuc2lnbmVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVBy
ZXZhbGVudFJlc291cmNlcwogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQg
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7Ci0gICAg
aWYgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElU
RV9PSykgewotICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKTsKLSAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFs
dWUoeyBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4
dCgxKSkKLSAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291
cmNlTG9hZFByZXZhbGVuY2U6OkxvdworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNl
c1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklE
LCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKG5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXMgdmFsdWUoeyBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJl
Z2lzdHJhYmxlRG9tYWluU3RyaW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
OjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93CiAgICAgICAgICAgICAgICAgLCAw
LCAwLCAwLCAwIH0pOwogICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5LCB2YWx1ZSk7CiAgICAg
ICAgIH0KQEAgLTEzODYsNDMgKzEzODQsNDMgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKIAog
ICAgIGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VO
VCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikg
R1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKLSAgICBpZiAoc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAg
ICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50
LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNF
TEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJ
TiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5J
RCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCkg
eworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklE
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJl
c3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMu
ZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0
ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KG1fZGF0
YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0Rv
bWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3Vy
Y2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVz
b3VyY2VEb21haW5JRCIpKTsKLSAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVt
bkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHN1
YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNP
ZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hp
bGUgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5k
KGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAg
ICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQt
PnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBG
Uk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJ
TiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIp
KTsKLSAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LnBy
ZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAg
ICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAg
YXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHN1YmZyYW1lRG9tYWluSUQs
IENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyBXSEVSRSBzdWJmcmFtZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBH
Uk9VUCBCWSBzdWJmcmFtZURvbWFpbklEIikpOworICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsK
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAg
ICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1
bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
IFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9V
UCBCWSBzb3VyY2VEb21haW5JRCIpKTsKLSAgICBpZiAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbklu
dCgwKSk7CisgICAgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURv
bWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8g
V0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQ
IEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1
bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NDksMTAg
KzE1NDcsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVx
dWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0
b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNj
ZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iKTsKLSAgICBpZiAoaW5jcmVtZW50U3RvcmFn
ZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3Jh
Z2VBY2Nlc3MuYmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBhdXRvIGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICgh
aW5jcmVtZW50U3RvcmFnZUFjY2VzcworICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNz
LT5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTE2NDYsOSArMTY0NCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNl
CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRh
Rm9yRG9tYWlucyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWlu
c1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRl
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlmICgh
ZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTc3NiwxMCArMTc3MywxMCBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9TaW5jZVNhbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FM
aXRlU3RhdGVtZW50IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZShtX2RhdGFiYXNlLCAi
REVMRVRFIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iKTsKLSAgICBpZiAocmVtb3ZlUmVk
aXJlY3RzVG9TaW5jZVNhbWVTaXRlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
cmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5z
ZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2Ft
ZVNpdGUuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byByZW1vdmVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9N
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQg
V0hFUkUgc291cmNlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZQorICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUt
PmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8
fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBA
IC0xODMyLDEwICsxODI5LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlCiAgICAgfQogICAg
IHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIGZhbHNlLCB7IH0pOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHJlbW92ZVN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iKTsKLSAgICBp
ZiAocmVtb3ZlU3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHJlbW92ZVN0b3JhZ2VBY2Nlc3MuYmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgYXV0byByZW1vdmVTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVN0b3JhZ2VBY2Nlc3MK
KyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0
LnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE5MTgsOSArMTkxNSw4IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1By
ZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0
YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50
ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxT
dGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgp
KSksICIpIikpOwotICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RG
OjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2lu
KCksIGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0
ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZh
bGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47CkBAIC0yMzAxLDE2ICsyMjk3LDE1IEBAIENvb2tpZUFjY2VzcyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzKGNvbnN0IFN1
YlJlc291cmNlCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhh
ZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0cmluZygp
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBP
YnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvb2tpZUFjY2VzcyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgYm9vbCBoYXNOb0VudHJ5ID0gc3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XOwotICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhaGFz
Tm9FbnRyeSAmJiAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRVc2Vy
SW50ZXJhY3Rpb24gPSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpID8g
dHJ1ZSA6IGZhbHNlOworICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ST1c7CisgICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYmICEhc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7CisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSAh
aGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
IAogICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKICAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKQEAgLTIzMzMsMTQgKzIzMjgsMTQgQEAgU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNVc2Vy
R3JhbnRlZFMKIAogICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9ICpyZXN1bHQu
c2Vjb25kOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJF
IGRvbWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8iKTsKLSAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQo
MSwgcmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50
LmJpbmRJbnQoMiwgZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCopIEZST00gU3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyBBTkQgdG9w
TGV2ZWxEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghc3RhdGVtZW50CisgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cp
CiAgICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOwogCi0gICAg
cmV0dXJuICEhc3RhdGVtZW50LmdldENvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6WWVzIDogU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKyAgICByZXR1
cm4gISFzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93bjo6WWVzIDogU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKIH0KIAogVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yKCkgY29uc3QKQEAgLTIzNDgsMTIgKzIz
NDMsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmQKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKICAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0g
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHJlZ2lzdHJh
YmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQg
aGFkVXNlckludGVyYWN0aW9uID0gMCJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUg
KHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQo
UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0
cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHRzOwogfQpA
QCAtMjM2MywxMiArMjM1OCwxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0J1dAogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBy
ZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVu
dCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJf
cyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAot
ICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3Vs
dHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAo
c3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQo
UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0
cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRz
OwogfQpAQCAtMjM3OCwxMiArMjM3MywxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFVzZXJJbgogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRV
c2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBo
YWRVc2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hl
Y2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRl
RnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkp
OwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yMzkzLDEzICsyMzg4LDEyIEBAIEhhc2hN
YXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gKFNFTEVD
VCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVsRG9tYWlu
SUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElOTkVSIEpP
SU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5kb21haW5J
RCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gZG9tYWlu
SUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHN1YkZyYW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFpbiBGUk9N
IChTRUxFQ1Qgby5yZWdpc3RyYWJsZURvbWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50b3BMZXZl
bERvbWFpbklEIGFzIHRvcExldmVsRG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgYXMgbyBJ
Tk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdIRVJFIG8u
ZG9tYWluSUQgPSBzLmRvbWFpbklEKSBhcyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9O
IGRvbWFpbklEID0gei50b3BMZXZlbERvbWFpbklEOyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKSksIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0
cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGls
ZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hZGQo
UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0
cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29s
dW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yNDQ1LDE5ICsyNDM5
LDE4IEBAIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6RG9tYWlu
RGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCiAgICAgVmVjdG9yPERvbWFpbkRhdGE+IHJlc3VsdHM7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3Ry
YWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFj
dGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9J
TiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRp
cmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWlu
SUQgPSBkb21haW5JRCJfcyk7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9N
IE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQo
KikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21haW5J
RCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3MpOworICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCi0gICAgICAgICAg
ICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21h
aW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAsIFdhbGxU
aW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQotICAgICAg
ICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAg
ICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKLSAgICAgICAg
ICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCg1KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAg
ICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludCg2KSkKKyAg
ICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1
bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgwKSkKKyAgICAgICAgICAgICwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZy
b21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpCisg
ICAgICAgICAgICAsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQtPmdldENvbHVt
bkRvdWJsZSgyKSkKKyAgICAgICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMykgPyB0
cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCkgPyB0
cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNSkgPyB0
cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDYpKQogICAgICAgICB9KTsKICAgICB9CiAgICAgCkBAIC0yNDczLDEx
ICsyNDY2LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmCiAKICAgICBhdXRvIGxpc3RUb0Ns
ZWFyID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVy
YXRvcj4oZG9tYWluSURzVG9DbGVhci5iZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgpKSk7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhl
cmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOwotICAgIGlm
IChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisg
ICAgYXV0byBjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIikiKSk7CisgICAg
aWYgKCFjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJH
cmFuZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMjYxNywyMyArMjYxMCwyMSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRl
ZCgpCiAgICAgc2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5w
cnVuZUVudHJpZXNEb3duVG87CiAgICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHJlY29yZHNUb1BydW5lKG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBpc1By
ZXZhbGVudCwgbGFzdFNlZW4gTElNSVQgPyIpOwotICAgIGlmIChyZWNvcmRzVG9QcnVuZS5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlY29yZHNUb1BydW5lLmJpbmRJbnQoMSwg
Y291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byByZWNvcmRzVG9QcnVu
ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklEIEZST00gT2Jz
ZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxh
c3RTZWVuIExJTUlUID8iX3MpOworICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwgcmVjb3Jkc1Rv
UHJ1bmUtPmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAgICB3aGlsZSAo
cmVjb3Jkc1RvUHJ1bmUuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGVudHJpZXNUb1By
dW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS5nZXRDb2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChy
ZWNvcmRzVG9QcnVuZS0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGVudHJpZXNUb1By
dW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS0+Z2V0Q29sdW1uSW50KDApKTsKIAogICAgIGF1dG8g
bGlzdFRvUHJ1bmUgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25l
ZD46Oml0ZXJhdG9yPihlbnRyaWVzVG9QcnVuZS5iZWdpbigpLCBlbnRyaWVzVG9QcnVuZS5lbmQo
KSkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBydW5lQ29tbWFuZChtX2RhdGFiYXNlLCBtYWtl
U3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIs
IGxpc3RUb1BydW5lLCAiKSIpKTsKLSAgICBpZiAocHJ1bmVDb21tYW5kLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgcHJ1bmVDb21tYW5kLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgIGF1dG8gcHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1h
a2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAo
IiwgbGlzdFRvUHJ1bmUsICIpIikpOworICAgIGlmICghcHJ1bmVDb21tYW5kIHx8IHBydW5lQ29t
bWFuZC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
X0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0yNzE3
LDM1ICsyNzA4LDMzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyCiAKIGJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViZnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9t
YWluJiB0b3BGcmFtZURvbWFpbikKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3ViRnJhbWVVbmRl
clRvcEZyYW1lQ291bnQobV9kYXRhYmFzZSwgY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVy
eSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50KG1f
ZGF0YWJhc2UsIGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIGNvdW50
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5KTsKKyAgICBhdXRvIHN1YkZyYW1lVW5k
ZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3ViZnJh
bWVVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
Q291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5KTsKICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVD
b3VudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8ucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
X0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBwcmVwYXJlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291
bnQuYmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwgZG9t
YWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1l
RG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lQ291bnQuYmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8u
YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYmluZEludCgyLCBkb21h
aW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKHN1
YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9t
YWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZy
YW1lQ291bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURv
bWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8tPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkp
ICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291
bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LnN0ZXAoKSAh
PSBTUUxJVEVfUk9XCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3Rl
cCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVD
b3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmdldENvbHVtbklu
dCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmdldENvbHVtbkludCgw
KSA9PSAxICYmIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uZ2V0Q29sdW1uSW50KDApID09
IDEpOworICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmdldENvbHVtbklu
dCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQo
MCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5nZXRDb2x1bW5JbnQoMCkg
PT0gMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVuZEJvb2xlYW4oU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCBmbGFnKQpAQCAtMjgxMiwyNyArMjgwMSwy
NiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxkZXImCiAgICAgaWYgKHF1ZXJ5LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhKG1fZGF0YWJhc2Us
IHF1ZXJ5KTsKKyAgICBhdXRvIGRhdGEgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVl
cnkpOwogICAgIAotICAgIGlmIChkYXRhLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgZGF0YS5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAo
IWRhdGEgfHwgZGF0YS0+YmluZEludCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0
LiBTdGF0ZW1lbnQgZmFpbGVkIHRvIHByZXBhcmUgb3IgYmluZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgaWYgKGRhdGEuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKGRhdGEtPnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgICAgIik7CiAgICAgYnVpbGRlci5hcHBlbmQodGFibGVOYW1lKTsKICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIjpcbiIpOwogICAgIAotICAgIGF1dG8gcmVzdWx0ID0gZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRv
IHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5nZXRDb2x1bW5JbnQo
MCkpOwogICAgIGFwcGVuZE5leHRFbnRyeShidWlsZGVyLCByZXN1bHQpOwogICAgIAotICAgIHdo
aWxlIChkYXRhLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdldERv
bWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLmdldENvbHVtbkludCgwKSk7CisgICAgd2hpbGUg
KGRhdGEtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdCA9IGdldERvbWFp
blN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICBhcHBl
bmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKICAgICB9CiB9CkBAIC0yOTQ2LDI4ICsyOTM0
LDI2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklE
RXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQpCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpCiB7Ci0g
ICAgU1FMaXRlU3RhdGVtZW50IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIE9wZXJhdGluZ0RhdGVzOyJfcyk7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGgg
REVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZST00g
T3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBE
RVNDIExJTUlUIDEgT0ZGU0VUID87Il9zKTsKKyAgICBhdXRvIGNvdW50T3BlcmF0aW5nRGF0ZXNT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBG
Uk9NIE9wZXJhdGluZ0RhdGVzOyJfcyk7CisgICAgYXV0byBnZXRNb3N0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJP
TSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5
IERFU0MgTElNSVQgMTsiX3MpOworICAgIGF1dG8gZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJPTSBPcGVyYXRp
bmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElN
SVQgMSBPRkZTRVQgPzsiX3MpOwogCi0gICAgaWYgKGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjb3VudE9wZXJhdGluZ0RhdGVz
U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50IHx8IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRh
dGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCBm
YWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9
IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgIG1fb3Bl
cmF0aW5nRGF0ZXNTaXplID0gY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC0+Z2V0Q29sdW1u
SW50KDApOwogCi0gICAgaWYgKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWdldE1vc3RSZWNl
bnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IHx8IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldEZpcnN0T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9tb3N0
UmVjZW50T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJlY2VudE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZSA9
IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgxKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgyKSk7CiAKLSAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRp
bmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQg
ZHVyaW5nIHRoZSBjYWxsIHRvIHByZXBhcmUoKSB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORyAiLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3NiwyNiAr
Mjk2MiwyNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRh
dGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogICAgIGlmIChtX29wZXJhdGluZ0RhdGVzU2l6
ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkKICAgICAgICAgbV9zaG9ydFdpbmRv
d09wZXJhdGluZ0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNX
aW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5n
RGF0ZVdpbmRvd1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAo
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+YmluZEludCgxLCBvcGVyYXRpbmdEYXRl
c1dpbmRvd1Nob3J0IC0gMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1l
dGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhl
IGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9w
ZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgICAgIG1f
c2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDIpKTsKICAgICB9CiAKICAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1Np
emUgPD0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkKICAgICAgICAgbV9sb25nV2luZG93
T3BlcmF0aW5nRGF0ZSA9IFdURjo6bnVsbG9wdDsKICAgICBlbHNlIHsKLSAgICAgICAgZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5yZXNldCgpOwotICAgICAgICBpZiAoZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93TG9u
ZyAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LT5yZXNldCgpOworICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0
ZVdpbmRvd1N0YXRlbWVudC0+YmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAx
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGlu
Z0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HICIuIFRoZSBlcnJvciBjb3VsZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmluZCgp
IG9yIHN0ZXAoKS4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRp
bmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIp
KTsKICAgICB9CiB9CiAKQEAgLTMwMTEsMjEgKzI5OTcsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNl
c3NhcnkKIAogICAgIGludCByb3dzVG9QcnVuZSA9IG1fb3BlcmF0aW5nRGF0ZXNTaXplIC0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nICsgMTsKICAgICBpZiAocm93c1RvUHJ1bmUgPiAwKSB7Ci0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHll
YXIsIG1vbnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmIChkZWxldGVMZWFz
dFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJ
bnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZGVsZXRlTGVh
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBhdXRvIGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JE
RVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKKyAgICAgICAgaWYgKCFk
ZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IGRl
bGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCByb3dzVG9Q
cnVuZSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlm
TmVjZXNzYXJ5IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQg
dG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3Bl
cmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsK
LSAgICBpZiAoaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCB0
b2RheS55ZWFyKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LmJpbmRJbnQoMiwgdG9kYXkubW9udGgoKSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgzLCB0b2RheS5tb250aERh
eSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUg
SU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywg
PzsiX3MpOworICAgIGlmICghaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAgICB8
fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIHRvZGF5LnllYXIoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJp
bmRJbnQoMiwgdG9kYXkubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzA2OSwxNiArMzA1NSwxNiBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVz
dGluZyhjb25zdAogICAgICAgICBkYXlzQWdvSW5TZWNvbmRzID0gV2FsbFRpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSAtIGRheXNUb1N1YnRyYWN0OwogICAgICAgICBhdXRv
IGRhdGVUb0luc2VydCA9IE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6ZnJv
bVJhd1NlY29uZHMoZGF5c0Fnb0luU2Vjb25kcykpOwogCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgT1IgSUdO
T1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8s
ID8sID87Il9zKTsKLSAgICAgICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIGRhdGVU
b0luc2VydC5tb250aCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgzLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUg
SU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywg
PzsiX3MpOworICAgICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAg
ICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZGF0ZVRv
SW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJ
bnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8g
c3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9Ci0gICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucmVzZXQoKTsK
KyAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiAK
ICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKQEAgLTMyMDEsMzYgKzMxODcs
MzYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQoUHJpdmF0ZUMKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVy
IGJlIGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHByaXZhdGUgY2xpY2sgbWVhc3VyZW1lbnQgdmFs
dWUgaW50byB0aGUgZGF0YWJhc2Ugd2l0aG91dCB2YWxpZCByZXBvcnQgdGltZXMuCiAgICAgICAg
IEFTU0VSVChzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEgJiYgZGVzdGluYXRpb25FYXJs
aWVzdFRpbWVUb1NlbmQgIT0gLTEpOwogCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gU1FMaXRl
U3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFF1ZXJ5KTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0dHJp
YnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDQsIGF0dHJpYnV0aW9uVHJp
Z2dlckRhdGEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQo
NSwgcHJpb3JpdHkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRE
b3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJs
ZSg3LCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3RhdGVtZW50LmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg5LCBzb3VyY2VVbmxpbmthYmxl
VG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5
U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0
KDEwLCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlE
QmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBz
dGF0ZW1lbnQuYmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAgICAg
IGlmICghc3RhdGVtZW50CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNv
dXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3Vy
Y2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygp
LnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5s
aW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVt
cHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCg5LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNp
Z25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5h
dGlvbkVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydEF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gc3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
IGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOwotICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQu
YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
dGF0ZW1lbnQuYmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRpb24u
c291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91
YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNSwgc291
cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVS
TCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZFRleHQoNiwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5z
aWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc3RhdGVtZW50LmJpbmRUZXh0KDcsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgIGlmICghc3RhdGVtZW50Cisg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNR
TElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVz
dGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2so
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlu
a2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4g
PyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5n
KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIHNvdXJj
ZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwg
OiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTM0MzUsMTQgKzM0MjEsMTQgQEAgU3RyaW5nIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphdHRyaWJ1dGlvblRvU3RyaW5nKFdlYkNvcmU6
OlNRTGl0ZVMKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzKG1fZGF0YWJhc2UsICJTRUxFQ1QgKFNF
TEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBh
cyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50KSBhcyBjbnQyIl9zKTsKLSAgICBpZiAocHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRh
RXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRE
YXRhRXhpc3RzLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgYXV0byBwcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudERhdGFFeGlzdHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCAoU0VMRUNUIENPVU5UKCopIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQpIGFzIGNudDEsIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQpIGFzIGNudDIiX3MpOworICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnREYXRhRXhpc3RzIHx8IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+c3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1
cmVtZW50VG9TdHJpbmcgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoIXByaXZh
dGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5nZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVD
bGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5nZXRDb2x1bW5JbnQoMSkpCisgICAgaWYgKCFwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmdldENvbHVtbkludCgwKSAmJiAhcHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQoMSkpCiAgICAgICAgIHJl
dHVybiAiXG5ObyBzdG9yZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zOwog
CiAgICAgYXV0byB1bmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0
ZW1lbnQobV9hbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
c1N0YXRlbWVudCwgYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1
dGlvbnNRdWVyeSwgInByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmciX3MpOwpAQCAtMzU3
MywxMSArMzU1OSwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQwogICAgIGlmIChkZXN0aW5h
dGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCA9ID8iX3MpOwotICAgIGlmIChjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuYmluZElu
dCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRp
b25TaXRlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWNsZWFyQXR0cmlidXRlZFN0YXRlbWVu
dAorICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJj
ZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0
YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0
cmlidXRpb24gZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTM1ODcsMTggKzM1NzMsMTcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudHMKIHsKICAgICBhdXRvIGV4cGlyZWRUaW1lVG9TZW5kID0gV2FsbFRpbWU6Om5v
dygpIC0gMV9oOwogCi0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVu
dCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Iik7Ci0g
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gU1FMaXRl
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCIpOworICAg
IGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
U0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyJfcyk7CisgICAgYXV0byBlYXJsaWVz
dFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCJfcyk7CiAKLSAgICBpZiAoZWFybGll
c3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEsIGV4
cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0
ZW1lbnQKKyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9J
Rl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRG
b3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAKLSAgICBpZiAoZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRv
RGVzdGluYXRpb25TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKCFl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50IHx8IGVhcmxpZXN0VGltZVRv
U2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNl
LmNwcAppbmRleCA1MjMyMzNkMThiMDQwMDNlZjMwZDMzNjMyY2ZlNjJmMDJmMjdhMzQ4Li4zYTY1
ZmNjZWYxODlmMDdjODkxNjVhOWM2MjI3YTVjYWQxNDA3MDIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGdldEl0ZW1zUXVlcnlT
dHJpbmdbXSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSI7CitzdGF0aWMgY29u
c3QgQVNDSUlMaXRlcmFsIGdldEl0ZW1zUXVlcnlTdHJpbmcgeyAiU0VMRUNUIGtleSwgdmFsdWUg
RlJPTSBJdGVtVGFibGUiX3MgfTsKIAogUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFN0cmluZyYmIGRhdGFiYXNlUGF0aCwgdW5zaWduZWQgcXVv
dGFJbkJ5dGVzKQogewpAQCAtOTksMTAgKzk5LDEwIEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxl
RXhpc3RzKCJJdGVtVGFibGUiKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBM
SU1JVCAxIik7CisgICAgYXV0byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIExJTUlUIDEiX3MpOwogCiAgICAgLy8gVGhpcyBx
dWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLCBpdCdzIGp1c3QgdXNlZCB0byBjaGVjayB0aGUgY29s
dW1uIHR5cGUuCi0gICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCisgICAg
aWYgKHF1ZXJ5ICYmIHF1ZXJ5LT5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyB0YWJsZSB3aXRoIHRoZSByaWdodCB0
eXBlLCBjb3B5IGFsbCB0aGUgZGF0YSBvdmVyIHRvIGl0IGFuZCB0aGVuIHJlcGxhY2UgdGhlIG5l
dyB0YWJsZSB3aXRoIHRoZSBvbGQgdGFibGUuCkBAIC0zMDIsMTkgKzMwMiwxOCBAQCBib29sIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUi
KTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVl
cnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0
ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2Ui
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCByZXN1bHQgPSBxdWVy
eS5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKHF1ZXJ5
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMg
d2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3Jh
Z2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiAhcXVlcnku
Z2V0Q29sdW1uSW50KDApOworICAgIHJldHVybiAhcXVlcnktPmdldENvbHVtbkludCgwKTsKIH0K
IAogdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6b3BlbklmRXhpc3RpbmcoKQpAQCAtMzMwLDE0
ICszMjksMTUgQEAgdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6b3BlbklmRXhpc3RpbmcoKQog
ICAgICAgICBzY29wZWRTdGF0ZW1lbnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVy
eVN0cmluZyk7CiB9CiAKLVNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIExvY2FsU3RvcmFn
ZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVu
dD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3QKK1NRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlIExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQoc3Rk
Ojp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgQVNDSUlMaXRlcmFsIHF1
ZXJ5KSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlmICgh
c3RhdGVtZW50KSB7Ci0gICAgICAgIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihtX2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3Bl
bigpKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnRPckVycm9yID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRl
bWVudChxdWVyeSk7CisgICAgICAgIGlmICghc3RhdGVtZW50T3JFcnJvcikKICAgICAgICAgICAg
IHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CisgICAgICAgIHN0YXRl
bWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VE
YXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlLmgKaW5kZXggYjdlZjAzNGQyYTg2YzI0YmQwNGRmNzk0MzE3Y2FiYWZj
MDNlNzQ2Yy4uMzk4ZGE3ZGNmYjI4ZGQzMGQyZTYwYTUxNGRkZTliMTlkNTUzNjIyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpOwogICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5
KCkgY29uc3Q7CiAKLSAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBz
Y29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4m
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4mLCBBU0NJSUxpdGVyYWwgcXVlcnkpIGNvbnN0OwogCiAgICAgU3Ry
aW5nIG1fZGF0YWJhc2VQYXRoOwogICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2Ug
bV9kYXRhYmFzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L0ljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29u
RGF0YWJhc2UuY3BwCmluZGV4IGY0NTA2ZjhiZDE0MGZkNDk0YzExMDBhY2ZhNDQ1MzRkMDRhMWU3
ZGIuLjI0N2NjMjNlN2JjNDk0NTI0NzNjMmFlNjkyOGMwNjkzMWMyODRiNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcApAQCAtNjYs
NyArNjYsOCBAQCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgs
IEFsbG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSBTUUxpdGVT
dGF0ZW1lbnQobV9kYiwgIlNFTEVDVCB2YWx1ZSBGUk9NIEljb25EYXRhYmFzZUluZm8gV0hFUkUg
a2V5ID0gJ1ZlcnNpb24nOyIpLmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byB2ZXJzaW9u
U3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJY29u
RGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdWZXJzaW9uJzsiX3MpOworICAgICAgICBhdXRvIGRh
dGFiYXNlVmVyc2lvbk51bWJlciA9IHZlcnNpb25TdGF0ZW1lbnQgPyB2ZXJzaW9uU3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwogICAgICAgICBpZiAoZGF0YWJhc2VWZXJzaW9uTnVtYmVy
ID4gY3VycmVudERhdGFiYXNlVmVyc2lvbikgewogICAgICAgICAgICAgTE9HKEljb25EYXRhYmFz
ZSwgIkRhdGFiYXNlIHZlcnNpb24gbnVtYmVyICVkIGlzIGdyZWF0ZXIgdGhhbiBvdXIgY3VycmVu
dCB2ZXJzaW9uIG51bWJlciAlZCAtIGNsb3NpbmcgdGhlIGRhdGFiYXNlIHRvIHByZXZlbnQgb3Zl
cndyaXRpbmcgbmV3ZXIgdmVyc2lvbnMiLAogICAgICAgICAgICAgICAgIGRhdGFiYXNlVmVyc2lv
bk51bWJlciwgY3VycmVudERhdGFiYXNlVmVyc2lvbik7CkBAIC04NCw3ICs4NSw3IEBAIEljb25E
YXRhYmFzZTo6SWNvbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgcGF0aCwgQWxsb3dEYXRhYmFzZVdy
aXRlIGFsbG93RGF0YWJhc2VXCiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWR1Y2Ugc3FsaXRl
IFJBTSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCAyMDAwIHBhZ2VzICh+MS41a0IgcGVyIHBhZ2Up
LiAzTUIgb2YgY2FjaGUgZm9yIGljb24gZGF0YWJhc2UgaXMgb3ZlcmtpbGwuCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudChtX2RiLCAiUFJBR01BIGNhY2hlX3NpemUgPSAyMDA7IikuZXhlY3V0ZUNv
bW1hbmQoKTsKKyAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIGNhY2hlX3NpemUg
PSAyMDA7Il9zKTsKIAogICAgICAgICBpZiAoYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0
YWJhc2VXcml0ZTo6WWVzKSB7CiAgICAgICAgICAgICBtX3BydW5lVGltZXIgPSBtYWtlVW5pcXVl
PFJ1bkxvb3A6OlRpbWVyPEljb25EYXRhYmFzZT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywg
Jkljb25EYXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKTsKQEAgLTE3NSwxNyArMTc2LDE3IEBAIHZv
aWQgSWNvbkRhdGFiYXNlOjpwb3B1bGF0ZVBhZ2VVUkxUb0ljb25VUkxNYXAoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBTdHJpbmcgaW1wb3J0UXVlcnkgPSBtYWtlU3RyaW5nKCJTRUxFQ1QgUGFn
ZVVSTC51cmwsIEljb25JbmZvLnVybCwgSWNvbkluZm8uc3RhbXAgRlJPTSBQYWdlVVJMIElOTkVS
IEpPSU4gSWNvbkluZm8gT04gUGFnZVVSTC5pY29uSUQ9SWNvbkluZm8uaWNvbklEIFdIRVJFIElj
b25JbmZvLnN0YW1wID4gIiwgZmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhw
aXJhdGlvblRpbWUpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSwgJzsnKTsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgaW1wb3J0UXVlcnkpOwotICAgIGlmIChxdWVyeS5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBxdWVyeSA9IG1fZGIucHJlcGFyZVN0
YXRlbWVudChpbXBvcnRRdWVyeSk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwcmVwYXJlIGljb24gdXJsIGltcG9ydCBxdWVyeSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgYXV0
byByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX3Bh
Z2VVUkxUb0ljb25VUkxNYXBMb2NrKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cp
IHsKLSAgICAgICAgbV9wYWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0
KDApLCBxdWVyeS5nZXRDb2x1bW5UZXh0KDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnkuc3Rl
cCgpOworICAgICAgICBtX3BhZ2VVUkxUb0ljb25VUkxNYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5U
ZXh0KDApLCBxdWVyeS0+Z2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5
LT5zdGVwKCk7CiAgICAgfQogCiAgICAgc3RhcnRQcnVuZVRpbWVyKCk7CkBAIC0yMTQsMTIgKzIx
NSwxMiBAQCB2b2lkIEljb25EYXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKCkKICAgICBBU1NFUlQo
bV9kYi5pc09wZW4oKSk7CiAKICAgICBpZiAoIW1fcHJ1bmVJY29uc1N0YXRlbWVudCkgewotICAg
ICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYiwgIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIHN0YW1wIDw9ICg/KTsiKTsKLSAgICAg
ICAgaWYgKG1fcHJ1bmVJY29uc1N0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICBhdXRvIHBydW5lSWNvbnNTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFwcnVuZUljb25zU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlBy
ZXBhcmluZyBzdGF0ZW1lbnQgcHJ1bmVJY29ucyBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fcHJ1
bmVJY29uc1N0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKyAgICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50ID0gcHJ1bmVJY29uc1N0YXRlbWVudC52
YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3BydW5lSWNvbnNT
dGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBmbG9vcigoV2FsbFRpbWU6Om5vdygpIC0gbm90VXNlZElj
b25FeHBpcmF0aW9uVGltZSkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpKSAhPSBTUUxJ
VEVfT0spIHsKQEAgLTIzMCw4ICsyMzEsOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6cHJ1bmVUaW1l
ckZpcmVkKCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKICAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnN0ZXAo
KSA9PSBTUUxJVEVfRE9ORSkgewotICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUg
RlJPTSBJY29uRGF0YSBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNv
bkluZm8pOyIpOwotICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBQYWdl
VVJMIFdIRVJFIGljb25JRCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Iik7
CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJF
IGljb25JRCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Il9zKTsKKyAgICAg
ICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQg
Tk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyJfcyk7CiAgICAgfQogICAgIG1f
cHJ1bmVJY29uc1N0YXRlbWVudC0+cmVzZXQoKTsKIApAQCAtMjg1LDEyICsyODYsMTIgQEAgT3B0
aW9uYWw8aW50NjRfdD4gSWNvbkRhdGFiYXNlOjppY29uSURGb3JJY29uVVJMKGNvbnN0IFN0cmlu
ZyYgaWNvblVSTCwgYm9vbCYgZXgKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7CiAKICAgICBp
ZiAoIW1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudCkgewotICAgICAgICBtX2ljb25JREZvcklj
b25VUkxTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVD
VCBJY29uSW5mby5pY29uSUQsIEljb25JbmZvLnN0YW1wIEZST00gSWNvbkluZm8gV0hFUkUgSWNv
bkluZm8udXJsID0gKD8pOyIpOwotICAgICAgICBpZiAobV9pY29uSURGb3JJY29uVVJMU3RhdGVt
ZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gaWNvbklERm9ySWNv
blVSTFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlNFTEVDVCBJY29uSW5m
by5pY29uSUQsIEljb25JbmZvLnN0YW1wIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8udXJs
ID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghaWNvbklERm9ySWNvblVSTFN0YXRlbWVudCkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGljb25JREZvckljb25V
UkwgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBu
dWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQorICAg
ICAgICBtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBpY29uSURGb3JJY29uVVJMU3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1faWNvbklE
Rm9ySWNvblVSTFN0YXRlbWVudC0+YmluZFRleHQoMSwgaWNvblVSTCkgIT0gU1FMSVRFX09LKSB7
CkBAIC0zMTUsMTIgKzMxNiwxMiBAQCBib29sIEljb25EYXRhYmFzZTo6c2V0SWNvbklERm9yUGFn
ZVVSTChpbnQ2NF90IGljb25JRCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQogICAgIEFTU0VSVCht
X2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBp
ZiAoIW1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCkgewotICAgICAgICBtX3NldEljb25J
REZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwg
IklOU0VSVCBJTlRPIFBhZ2VVUkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Iik7Ci0g
ICAgICAgIGlmIChtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0g
bV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29u
SUQpIFZBTFVFUyAoKD8pLCA/KTsiX3MpOworICAgICAgICBpZiAoIXNldEljb25JREZvclBhZ2VV
UkxTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVu
dCBzZXRJY29uSURGb3JQYWdlVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9zZXRJY29uSURG
b3JQYWdlVVJMU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQorICAgICAgICBtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBzZXRJ
Y29uSURGb3JQYWdlVVJMU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAg
fQogCiAgICAgaWYgKG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC0+YmluZFRleHQoMSwg
cGFnZVVSTCkgIT0gU1FMSVRFX09LCkBAIC0zNDIsMTIgKzM0MywxMiBAQCBWZWN0b3I8Y2hhcj4g
SWNvbkRhdGFiYXNlOjppY29uRGF0YShpbnQ2NF90IGljb25JRCkKICAgICBBU1NFUlQobV9kYi5p
c09wZW4oKSk7CiAKICAgICBpZiAoIW1faWNvbkRhdGFTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9p
Y29uRGF0YVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiU0VM
RUNUIEljb25EYXRhLmRhdGEgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAo
Pyk7Iik7Ci0gICAgICAgIGlmIChtX2ljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGF1dG8gaWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVI
ZWFwU3RhdGVtZW50KCJTRUxFQ1QgSWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIElj
b25EYXRhLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWljb25EYXRhU3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgaWNvbkRhdGEg
ZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2ljb25EYXRhU3RhdGVtZW50ID0gbnVsbHB0cjsKICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uRGF0YVN0YXRl
bWVudCA9IGljb25EYXRhU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAg
fQogCiAgICAgaWYgKG1faWNvbkRhdGFTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBpY29uSUQpICE9
IFNRTElURV9PSykgewpAQCAtMzcwLDIwICszNzEsMjAgQEAgT3B0aW9uYWw8aW50NjRfdD4gSWNv
bkRhdGFiYXNlOjphZGRJY29uKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgVmVjdG9yPGNo
YXIKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRl
OjpZZXMpOwogCiAgICAgaWYgKCFtX2FkZEljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9hZGRJ
Y29uU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQg
SU5UTyBJY29uSW5mbyAodXJsLCBzdGFtcCkgVkFMVUVTICg/LCAwKTsiKTsKLSAgICAgICAgaWYg
KG1fYWRkSWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBh
dXRvIGFkZEljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBJY29uSW5mbyAodXJsLCBzdGFtcCkgVkFMVUVTICg/LCAwKTsiX3MpOworICAgICAgICBp
ZiAoIWFkZEljb25TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5n
IHN0YXRlbWVudCBhZGRJY29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9hZGRJY29uU3RhdGVt
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IH0KKyAgICAgICAgbV9hZGRJY29uU3RhdGVtZW50ID0gYWRkSWNvblN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fYWRkSWNvbkRhdGFTdGF0ZW1l
bnQpIHsKLSAgICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RiLCAiSU5TRVJUIElOVE8gSWNvbkRhdGEgKGljb25JRCwgZGF0YSkgVkFM
VUVTICg/LCA/KTsiKTsKLSAgICAgICAgaWYgKG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBhZGRJY29uRGF0YVN0YXRlbWVudCA9
IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQs
IGRhdGEpIFZBTFVFUyAoPywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uRGF0YVN0YXRl
bWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGFkZElj
b25EYXRhIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IG51
bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAg
ICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBhZGRJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIGljb25VUkwpICE9IFNRTElURV9PSykgewpAQCAtNDEzLDEyICs0MTQsMTIg
QEAgdm9pZCBJY29uRGF0YWJhc2U6OnVwZGF0ZUljb25UaW1lc3RhbXAoaW50NjRfdCBpY29uSUQs
IGludDY0X3QgdGltZXN0YW1wKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBB
bGxvd0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fdXBkYXRlSWNvblRpbWVzdGFt
cFN0YXRlbWVudCkgewotICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBt
YWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlVQREFURSBJY29uSW5mbyBTRVQgc3Rh
bXAgPSA/IFdIRVJFIGljb25JRCA9ID87Iik7Ci0gICAgICAgIGlmIChtX3VwZGF0ZUljb25UaW1l
c3RhbXBTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byB1
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgi
VVBEQVRFIEljb25JbmZvIFNFVCBzdGFtcCA9ID8gV0hFUkUgaWNvbklEID0gPzsiX3MpOworICAg
ICAgICBpZiAoIXVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCB1cGRhdGVJY29uVGltZXN0YW1wIGZhaWxlZCIp
OwotICAgICAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX3VwZGF0ZUljb25UaW1l
c3RhbXBTdGF0ZW1lbnQgPSB1cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LnZhbHVlKCkubW92
ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0
YXRlbWVudC0+YmluZEludDY0KDEsIHRpbWVzdGFtcCkgIT0gU1FMSVRFX09LIHx8IG1fdXBkYXRl
SWNvblRpbWVzdGFtcFN0YXRlbWVudC0+YmluZEludDY0KDIsIGljb25JRCkgIT0gU1FMSVRFX09L
KSB7CkBAIC00MzcsMjggKzQzOCwyOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6ZGVsZXRlSWNvbihp
bnQ2NF90IGljb25JRCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dE
YXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0
YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG1h
a2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gUGFnZVVSTCBXSEVS
RSBQYWdlVVJMLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlUGFnZVVSTHNG
b3JJY29uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8g
ZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVu
dCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBQYWdlVVJMLmljb25JRCA9ICg/KTsiX3MpOwor
ICAgICAgICBpZiAoIWRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGRlbGV0ZVBhZ2VVUkxzRm9ySWNvbiBm
YWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0g
bnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RlbGV0
ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNv
bkRhdGFTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1h
a2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkRhdGEgV0hF
UkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVJY29uRGF0
YVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0
ZUljb25EYXRhU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZS
T00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlm
ICghZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJl
cGFyaW5nIHN0YXRlbWVudCBkZWxldGVJY29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxl
dGVJY29uRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgbV9kZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IGRlbGV0ZUljb25EYXRh
U3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9k
ZWxldGVJY29uU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG1h
a2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkluZm8gV0hF
UkUgSWNvbkluZm8uaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVJY29uU3Rh
dGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlSWNv
blN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25J
bmZvIFdIRVJFIEljb25JbmZvLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0
ZUljb25TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRl
bWVudCBkZWxldGVJY29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVJY29uU3RhdGVt
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBt
X2RlbGV0ZUljb25TdGF0ZW1lbnQgPSBkZWxldGVJY29uU3RhdGVtZW50LnZhbHVlKCkubW92ZVRv
VW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3Rh
dGVtZW50LT5iaW5kSW50NjQoMSwgaWNvbklEKSAhPSBTUUxJVEVfT0sKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKaW5kZXggY2U1YzI5YmFhNTgw
NWNhNDJmNDhlZjA1MGI4MzJkMGNkNWNjZTExYy4uY2FlMDgyZjEzZGNkMzY4YzQ4MTk1YmUzMTFm
MjBhNWI2NjQ0OGZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3Jh
Z2VBcmVhU3luYy5jcHAKQEAgLTI3OCw5ICsyNzgsOSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9N
IEl0ZW1UYWJsZSBMSU1JVCAxIik7CisgICAgICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsK
ICAgICAgICAgLy8gdGhpcyBxdWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLgotICAgICAgICBpZiAo
cXVlcnkuaXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKKyAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1
ZXJ5LT5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzI2LDggKzMyNiw4IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1w
b3J0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBp
ZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxl
Il9zKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNl
bGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwogICAgICAgICBt
YXJrSW1wb3J0ZWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzM1LDEwICszMzUsMTAgQEAgdm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogCiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gaXRlbU1hcDsKIAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAg
aW50IHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQoMCksIHF1ZXJ5
LmdldENvbHVtbkJsb2JBc1N0cmluZygxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAo
KTsKKyAgICAgICAgaXRlbU1hcC5zZXQocXVlcnktPmdldENvbHVtblRleHQoMCksIHF1ZXJ5LT5n
ZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgp
OwogICAgIH0KIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTQxMiwyNyAr
NDEyLDI3IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAKICAgICAvLyBJZiB0aGUgY2xlYXIg
ZmxhZyBpcyBzZXQsIHRoZW4gd2UgY2xlYXIgYWxsIGl0ZW1zIG91dCBiZWZvcmUgd2Ugd3JpdGUg
YW55IG5ldyBvbmVzIGluLgogICAgIGlmIChjbGVhckl0ZW1zKSB7Ci0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBjbGVhcihtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7Ci0gICAg
ICAgIGlmIChjbGVhci5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gY2xl
YXIgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJf
cyk7CisgICAgICAgIGlmICghY2xlYXIpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGludCByZXN1bHQgPSBjbGVhci5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBjbGVhci0+
c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW5zZXJ0ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfcyk7CisgICAg
aWYgKCFpbnNlcnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNl
cnQgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmUobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOwotICAgIGlmIChy
ZW1vdmUucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcmVtb3ZlID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8i
X3MpOworICAgIGlmICghcmVtb3ZlKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgZGVsZXRlIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRh
dGFiYXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NDMsMjEgKzQ0MywyMSBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBpdGVtcwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZm9y
IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpdGVtcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgLy8gQmFzZWQgb24gdGhlIG51bGwtbmVz
cyBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBkZWNpZGUgd2hldGhlciB0aGlzIGlzIGFuIGluc2Vy
dCBvciBhIGRlbGV0ZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0LT52YWx1
ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgYXV0byYgcXVlcnkgPSBpdC0+
dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7CiAKLSAgICAgICAgcXVlcnkuYmluZFRl
eHQoMSwgaXQtPmtleSk7CisgICAgICAgIHF1ZXJ5LT5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAog
ICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2lu
ZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVlLgogICAgICAgICBpZiAoIWl0LT52
YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7
CisgICAgICAgICAgICBxdWVyeS0+YmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKIAotICAgICAgICBp
bnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0
ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0
YWJhc2UgLSAlaSIsIHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIHF1ZXJ5LnJlc2V0KCk7CisgICAgICAgIHF1ZXJ5LT5yZXNldCgpOwogICAgIH0KICAg
ICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KQEAgLTQ5OSwzMSArNDk5LDMzIEBAIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKCkKICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeSht
X2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1
ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBjb3VudCA9IFsmXSB7CisgICAgICAg
IGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgICAgIGlmICghcXVlcnkpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBm
b3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisK
KyAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4g
Y291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAotICAgIGludCByZXN1bHQgPSBx
dWVyeS5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExP
R19FUlJPUigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1U
YWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICByZXR1cm4gcXVlcnktPmdldENvbHVt
bkludCgwKTsKKyAgICB9KCk7CisgICAgaWYgKGNvdW50KQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCi0gICAgaW50IGNvdW50ID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOwotICAgIGlmICghY291
bnQpIHsKLSAgICAgICAgcXVlcnkuZmluYWxpemUoKTsKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9z
ZSgpOwotICAgICAgICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtkYXRhYmFzZUlkZW50aWZpZXIgPSBtX2Rh
dGFiYXNlSWRlbnRpZmllci5pc29sYXRlZENvcHkoKV0gewotICAgICAgICAgICAgICAgIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJ
ZGVudGlmaWVyKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VG
aWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICBpZiAoIUZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoZGF0YWJhc2VGaWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5h
bWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KKyAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Cisg
ICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuaXNBY3RpdmUoKSkgeworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFtkYXRhYmFzZUlkZW50aWZpZXIgPSBtX2RhdGFiYXNlSWRlbnRpZmll
ci5pc29sYXRlZENvcHkoKV0geworICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIo
KS5kZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpOworICAgICAg
ICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1f
c3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNc
biIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAppbmRleCAwNjEwYzk0
NmYyZWRmOTg2ZWJjYTk4YjZhN2QyMWJmMGE5MzM5NjQ2Li5jN2YzMGMzMDkxOTQ0OWNmOTFkMGE1
YzMwNDdjMGU2OWUwOGJkZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAKQEAgLTE4OSw4ICsxODksOCBAQCB2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQogICAgICAgICBpZiAobV9kYXRhYmFzZS5p
c09wZW4oKSkgewogICAgICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0Nv
dW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCi0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAg
ICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
ICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG9yaWdpbiBGUk9NIE9yaWdpbnMiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsK
ICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4i
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xOTksOCArMTk5
LDggQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja09yaWdpbnMobV9vcmlnaW5TZXRNdXRleCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChy
ZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgICAg
ICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkuaXNvbGF0ZWRD
b3B5KCkpOworICAgICAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7
CkBAIC0zMTYsMTYgKzMxNiwxNiBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2lu
RGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0CiAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywg
PykiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8g
T3JpZ2lucyBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNr
ZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0gCiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUpOworICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgyLCBkYXRhYmFzZUZpbGUpOwogICAgIAotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKQorICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0
cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAKICAgICB7CkBAIC00
MDQsMjMgKzQwNCwyMyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lu
cygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdp
biwgcGF0aCBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3Rh
dGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50
LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGludCByZXN1bHQ7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKKyAg
ICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpOwogCiAgICAgICAgIHsKICAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY2xpZW50TXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdp
bihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC00NDEsMTIgKzQ0MSwxMiBAQCB2b2lkIFN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCiAgICAgICAgIG9wZW5UcmFja2VyRGF0YWJh
c2UoZmFsc2UpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAgaWYgKGRlbGV0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIl9zKTsK
KyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKSB7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50LT5leGVjdXRlQ29tbWFu
ZCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9u
IG9mIGFsbCBvcmlnaW5zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUx
OSwxMyArNTE5LDEzIEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVU
RSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iKTsKLSAgICBpZiAoZGVsZXRlU3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmln
aW49PyJfcyk7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50
aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRlbGV0
ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAoIWRlbGV0
ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgZGVsZXRlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhl
Y3V0ZUNvbW1hbmQoKSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRl
bGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MTQsMTcgKzYxNCwxNyBAQCBTdHJpbmcgU3Rv
cmFnZVRyYWNrZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpCiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0g
ICAgaWYgKHBhdGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8g
cGF0aFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGgg
RlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIXBhdGhTdGF0ZW1lbnQp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0
aCBmb3Igb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KLSAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0
ZXAoKTsKKyAgICBwYXRoU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsK
KyAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHBh
dGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICByZXR1cm4gcGF0aFN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgwKTsKIH0KICAgICAKIGxvbmcgbG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlz
a1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODE1NzQ3Y2U3NDZjZDFhMzk1OTQ4
MjY0YTc3ODdiMDlhMmM5ODk1Ni4uMmE0MjE5NjUyYzE1ZDE0NGRmZDcyZGQzYjE5ZmFjM2MwNzcx
Y2M4NiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Y29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFk
ZFRvRGF0YWJhc2VzVGFibGUpOgorCiAyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIEZpbGVTeXN0ZW06OmhhcmRMaW5rQ291bnQo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0Rh
dGFiYXNlVHJhY2tlclRlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Y29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQppbmRleCA2NjgyYmY0NTg2NjYxMTU1M2YxMGEx
N2U3MmE3MjllY2FhNjk1OGM0Li4yYzdmNDQ0ZThiYzhhZWI5MDZjMGJiOTBhNjliOTU1M2M3MTgx
MzE2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2Ev
RGF0YWJhc2VUcmFja2VyVGVzdC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQpAQCAtNjYsMTIgKzY2LDEyIEBAIHN0
YXRpYyB2b2lkIGFkZFRvRGF0YWJhc2VzVGFibGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgs
IGNvbnN0IFNlY3VyaXR5T3JpZ2luCiAgICAgU1FMaXRlRGF0YWJhc2UgZGF0YWJhc2U7CiAgICAg
ZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGFkZERh
dGFiYXNlU3RhdGVtZW50KGRhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4s
IG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1l
bnQucHJlcGFyZSgpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRl
eHQoMiwgbmV3RGF0YWJhc2VOYW1lKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4
dCgzLCBuZXdEYXRhYmFzZVBhdGgpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmV4ZWN1dGVD
b21tYW5kKCk7CisgICAgaWYgKGF1dG8gYWRkRGF0YWJhc2VTdGF0ZW1lbnQgPSBkYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0
aCkgVkFMVUVTICg/LCA/LCA/KTsiX3MpKSB7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICBhZGRE
YXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMiwgbmV3RGF0YWJhc2VOYW1lKTsKKyAgICAgICAg
YWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIG5ld0RhdGFiYXNlUGF0aCk7CisgICAg
ICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworICAgIH0KIAogICAg
IGRhdGFiYXNlLmNsb3NlKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428588</attachid>
            <date>2021-05-13 18:11:05 -0700</date>
            <delta_ts>2021-05-13 19:31:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513181104.patch</filename>
            <type>text/plain</type>
            <size>268916</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3MmQ3MjVjNzQxODM3YmVhZmYyN2Zl
Nzk1ZWI3NDIyZDg3ZjdhMDYuLmRmMDZmOTY3ZGY2OWQ2YWE1OGNlNDIyMDAyNWY5ZWU1ZDcyNmNm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlu
a0NvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDZkN2Q2NTdmOWExNmUzYmRhOWUwYmU0MDQ1NGI3ZGIx
ODE4NDcxLi5lYTllZTA2MzkzZTNjNmM0Y2MwOTRhOWYxNzZiZDAzNTVkYzIxMGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNy
ZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBUaGUgU1FMaXRlU3RhdGVtZW50IGNv
bnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2UgbmV2ZXIgaGF2ZSBhCisgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVuICJwcmVwYXJlZCIuIE9ubHkgdGhl
IFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBjb25zdHJ1Y3QgU1FMaXRlU3RhdGVt
ZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBhc3MKKyAgICAgICAgICBhIFNRTGl0
ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgU1FMaXRlU3RhdGVtZW50
IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFORCBwcmVwYXJlIGEgU1FMaXRlU3Rh
dGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisgICAgICAgICAgU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEgaGVhcCBvbmUuIFRoZXNlIGZ1bmN0
aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+IHR5cGUgc28gdGhleSB3aWxsIGVp
dGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9yIGFu
IHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAgICAgIC0gVGhlIHByZXBhcmUqU3Rh
dGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcgYWxsb2NhdGlvbnMgaW4gbW9zdAor
ICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMgdGFraW5nIGluIHRoZSBxdWVyeSBh
cyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBmaW5hbGl6ZSgpIGZ1bmN0aW9uIG9u
IFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cworICAgICAgICAgIGFy
ZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0
ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlvbnMuIFRoZSBTUUxpdGVTdGF0ZW1l
bnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVtZW50CisgICAgICAgICAgc28gdXNl
cnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0ZW1lbnQgaWYgdGhleSBuZWVkIHRo
ZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBhdCBhIGNlcnRhaW4gcG9pbnQgKGUu
Zy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAgICAgIC0gRHJvcCB0aGUgcHJlcGFy
ZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1lbnQgbWVtYmVyIGZ1bmN0aW9ucyBu
b3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBhcmUgYWx3YXlzIHByZXBhcmVkLgor
ICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5IGFzIGEgU3RyaW5nIGRhdGEgbWVt
YmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAgICAgICBUaGlzIGlzIG5vIGxvbmdl
ciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUgcHJlcGFyZSBzdGVwIGFmdGVyIHRo
ZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtlcyB0aGUgU1FMaXRlU3RhdGVtZW50
IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Y3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVG
b3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpyZXNldEFuZFJlYmluZFByZUlu
ZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRW
YWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVO
YW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5v
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFu
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnF1b3RhTm9Mb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1wdHkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRp
bmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNlYXJjaENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERvbWFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZXhl
Y3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJldHVybnNB
dExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0YWJs
ZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZE51bGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVu
dURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OnZlcmlm
eVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmV4
ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmNy
ZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisKIDIwMjEtMDUtMTMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBXazIgXSBtZWRp
YS9tZWRpYS1mcmFnbWVudHMvVEMwMDUxLmh0bWwgaXMgZmxha2V5IGNyYXNoaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MjJmMTI1OWM4NjE5N2Y4YTdlZTg4NjQ3NGE0ZjMwOWQzM2VmMjEuLmVmZTRmYjZmZjUy
OGI1MDc4OWM0NWI3YWRjMGFkZDVhOWQwNmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0
ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFN0
b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKToK
KyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0
OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxldGVJY29uKToKKwog
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBy
b2Nlc3Mgc3VzcGVuc2lvbiBtYXkgYmUgZGVsYXllZCBieSB1cCB0byA1IHNlY29uZHMgYWZ0ZXIg
dGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkYXRhYmFzZSBhY3Rpdml0eQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBmYmI0MWUyNmFhMDFlMDZiMzQ4YjJmZTM5ODc5ZWFjZjM3NDBkMjdhLi40MjRiYmFk
MDk1MGIxNmYwMmVjNGVkY2Y0YTc3ZDRhNzZiZjI5NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNr
ZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IFdURjo6RmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
aXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2MGNm
ZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNmMjM3
YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVSZWYo
VCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVybiAq
bV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxj
bGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1
ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBj
bGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDogbV9y
ZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUuLmNj
ZDYzYjNkZmFiNGEzYTY5ZWFhZjkyODFkZWE2NDNlZThmZmVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2No
ZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVt
YTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAog
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM1
OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgsMTMg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiAK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2Ig
ZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVu
IGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM5
MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBp
ZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hl
bWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0Mjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
VGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNv
cmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcgKzQ1
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVj
b3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyArNTgz
LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50
TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0
YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxp
dGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVF
UyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIo
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNpb25z
IGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBkb2Vz
bid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgICAg
IC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFi
YXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFi
YXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBz
cWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUlu
Zm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVS
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJvb2wg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZShj
b25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9i
amVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZv
OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4SW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsK
LSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1h
cC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8gX1Rl
bXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgICAg
IGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAgICAg
fQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAi
U0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3JlUmVj
b3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFs
dWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5nZXQo
eyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtl
eUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZl
cik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJl
Y29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7
Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNv
bnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYgKHNx
bC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRoZSBp
bmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVz
JykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDAw
LDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVpbnQ2
NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNp
b24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9l
cyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNp
b24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwxNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9
IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBr
ZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0g
c3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5h
bWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBr
ZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBr
ZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmpl
Y3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtl
eVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDExICsx
MDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZN
b3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTEw
NTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwg
bmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJ
bmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBG
Uk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9t
IHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAg
ICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKICAg
ICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4S2V5
UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wg
bXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVuaXF1
ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0g
c3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBk
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQpOwog
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8
IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSArMTE2
MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUn
OyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3MpOwor
ICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJl
IHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7
Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJf
cyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENvbHVt
blRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRv
ZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJz
aW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQsMTAg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaW5m
by5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAgICAg
IG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVlID0g
PyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJp
bmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAoIXNx
bAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5l
d1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMTcsMTIgKzMwMjEsMTIgQEAgdm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3Jl
ZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmls
ZXM7Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0
byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJP
TSBCbG9iRmlsZXM7Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQo
c3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwu
c3RlcCgpOworICAgICAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0RPTkUpCkBAIC0zMDYxLDE0ICszMDY1LDEzIEBAIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhCiAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQog
Ci0gICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7
CisgICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQog
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAg
IGlmIChtX3NxbGl0ZURCKSB7Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURC
LCBzdGF0ZW1lbnQpOwotICAgICAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0
PHNpemVfdD4oc3FsKV0tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2Nh
Y2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAg
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3RhdGVtZW50KTsKKyAgICAgICAgaWYgKHNxbFN0YXRlbWVudCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gc3FsU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0uZ2V0KCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggYzJjZWQ4NDE5MzAw
YjVhOGM1OGE4ZTg0MDIyMmYyNTU2MTI1YjM1Yy4uZjI4OTA4Y2E1MTVlN2I5YjJmZmY4NDg4YzAw
NmQyYjBlODFiYmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVTUUxpdGVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRVcHBlcktleS5pc051bGwoKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOwogCi0gICAgbV9zdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKSwgc3FsKTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChwcmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBtX3N0YXRlbWVudCA9IHN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogCiAgICAgcmV0dXJuIGJpbmRBcmd1bWVudHMo
KTsKIH0KQEAgLTM0MSwxMiArMzQxLDEyIEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpyZXNldEFu
ZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkoKQogCiAgICAgYXV0byYgZGF0YWJh
c2UgPSBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpOwogICAg
IGlmICghbV9wcmVJbmRleFN0YXRlbWVudCkgewotICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCBidWlsZFByZUluZGV4U3Rh
dGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcmVJbmRleFN0
YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKKyAgICAgICAgaWYgKCFwcmVJbmRleFN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBwcmUgc3RhdGVt
ZW50IC0gJyVzJyIsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50ID0gcHJlSW5k
ZXhTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVJbmRleFN0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTU4OCw5ICs1
ODgsOCBAQCBTUUxpdGVJREJDdXJzb3I6OkZldGNoUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50
ZXJuYWxGZXRjaE5leHRSZWNvcmQoU1FMaXRlQ3VycwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50IHx8IG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5k
IG9iamVjdFN0b3JlSUQgPSA/OyIpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0
byBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhU
KSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAppbmRleCBhYjQ3ODI2YzgzZWJiNThiNzdiNGE2MTUyNzEzOTIxMzNjZjg0
MGU2Li5lNzRlMjhmNWI5ZTVmNzlmYzVkNWNkMGNlNzY2Y2EwZGRmMWJmNDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTEzLDE4
ICsxMTMsMTUgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
bWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHZhbHVlKTsKIAotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0
YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNCwxNyArMTMxLDE1IEBA
IHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zCiAKIHN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3Vs
dEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHN0YXRlbWVudC5lcnJvcigpLCBxdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTcxNCw4ICs3MDksOCBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gc3FsaXRlRGF0YWJhc2UoKS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CkBAIC03MjMsOCArNzE4LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFt
ZXM7CiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAobmFtZSAhPSB1bnF1YWxpZmllZEluZm9UYWJsZU5hbWUp
CiAgICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChuYW1lKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
aW5kZXggMGFkM2I0ODAyM2YxZjk2ZWFiOWJjZjRmNzcyZGU0OTMzMDdlYmY4NC4uYjdlMTdhODc0
ZDk3MGJlNmJjNWQzMTk2NzYzMWIyYmYzYTNjZDQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjM1LDE1
ICsyMzUsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2Nr
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3Jp
Z2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCkBAIC0yNTYsMTUgKzI1NiwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzRW50cnlGb3JEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0YWJhc2UuIFNldCB1cCBh
IHF1ZXJ5IHRvIGFzayBmb3IgdGhlIGRiIG9mIGludGVyZXN0OgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAotICAgIHJldHVybiBzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1c7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0
aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87
Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICgh
Y3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUg
JXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
RmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3Rz
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVu
dC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZp
bGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0g
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwor
ICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkp
OwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNR
TElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9N
IERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZE
b2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
IApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFz
ZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdp
biwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5h
bWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewot
ICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
Y2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRh
YmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGlu
IHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBp
cyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIg
Y29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQot
ICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNl
dCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBu
ZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMg
Zm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIK
KyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRl
cm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQn
cyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAg
ICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9
PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5h
bWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAg
IHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0
YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVu
dC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3
MSwxNSArNjczLDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3Rh
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luCiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBx
dW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBsCiAK
ICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2lu
ICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5l
d09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9
PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAgICBpZiAoIWVy
cm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
Ci0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
c3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRp
bCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21t
YW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBk
YXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIG9yaWdpblN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBv
cmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0
YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwot
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAg
ICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyAr
MTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Ug
JXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
OTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRh
dGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
ID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmls
ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0x
MjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZp
bGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQg
d2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3Jp
dGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9
IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsi
X3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVk
MS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAt
MTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRi
KQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlm
eSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1l
bnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHBy
ZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBj
b3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQu
YXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAi
aW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0
ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90
IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUs
IHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVt
YmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkg
bWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBp
ZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkg
eworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRT
ZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0
Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1l
bnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5j
b2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVt
blZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYjA4MDMwYzliNDFmMjcxZTdhYTMyN2MzYWU0
ZWM0ZjYzMGE3MDcyMS4uNWYwNGE3MmZjYjRjN2ExZGQ5MzkyMjAwOTM0NTFiNTM3ODgzZTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJM
JiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBu
ZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAg
ICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25z
dCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3Jh
Z2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIp
KTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICBncm91cC5z
ZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3Vw
OwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
ZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RI
YXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVy
bCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNo
ZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
aW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1l
bW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAg
IC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhl
IG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcg
VVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2Vz
dENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFu
aWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkp
KTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5n
KCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25z
dCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAg
IGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0
b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
KSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNo
ZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNl
dChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3Jk
IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBi
ZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhp
c3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3Rh
IG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVv
dGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hF
UkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhl
IHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZh
dWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJv
b2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
cXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAs
MTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2Fn
ZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmln
aW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAg
IC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8g
YSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2lu
ID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hl
R3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBD
YWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1c2FnZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4Nywy
MyArNDg3LDIzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFp
bmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAgICAgICAgICAgICAgICAgIiBX
SEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDAp
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVy
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0
aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZv
ciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9m
Q2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51
bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1h
aW5pbmdTaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVt
YWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMg
U0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRh
KCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0
KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50
KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3Rh
dGVtZW50LnZhbHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01B
IHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VE
KHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkp
ID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1p
dCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0
b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBA
IC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5
IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVz
dFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwg
bWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RV
UkwoKSkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQo
c3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAg
LTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91
cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNh
Y2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFs
bG93bGlzdCgpOwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOwor
ICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUg
b25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAg
ICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAg
ICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFs
bGJhY2tVUkxzKCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFs
bGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkws
IGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFy
ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwg
Y2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQs
MTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwg
cGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxl
U3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRh
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5n
IHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2Ug
ZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJl
LCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgx
MywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAg
ICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0Rmls
ZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsK
LSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxv
YigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwor
ICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQt
PmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2gg
d2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0Mywz
NiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhl
YWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAg
ICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRv
IHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVy
cywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywg
PywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
YXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBj
YWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2Ug
YWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICBy
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRh
SWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291
cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Cisg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVy
cyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChy
ZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxh
c3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hl
IGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/
LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMg
KD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFn
ZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVt
ZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
QEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJU
KHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRh
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
Q2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRy
eVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VU
IHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwg
cmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNl
LT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUo
KSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2
LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBB
IHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBz
aXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYg
KCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6
ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEz
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwot
ICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGlu
c2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3
ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
Q2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1
cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlv
bkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2
LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4g
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7
CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29k
ZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5O
RVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNv
dXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVz
Q29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVz
b3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMg
SU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVS
ZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAg
IGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2Fj
aGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURp
cmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0Owot
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2Fj
aGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwot
ICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7Cisg
ICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAg
ICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAt
MTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgz
KTsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAot
ICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7
CisgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
NSk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAog
ICAgICAgICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
dXJsLCByZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsx
MTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBj
YWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAg
YWxsb3dsaXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBW
ZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVS
TCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgYWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0
KGFsbG93bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxh
Zy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3Rz
IFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAg
Ci0gICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJl
c3VsdCA9IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hl
IG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVl
c3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBj
YWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBt
YW55IHJvd3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8g
TG9hZCBmYWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFj
a1VSTHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFs
bGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBzdG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cp
IAotICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZh
bGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tT
dGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkp
OwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0
YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hl
cyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRs
eSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5
IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
X3MpOworICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1l
bnQpOworICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAg
ICAgfQpAQCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hl
R3JvdXBzIik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0g
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMu
YXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxl
IChzZWxlY3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVy
bHM7CiB9CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAg
aWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZl
c3RVUkwpOworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAg
ICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNh
Y2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdI
RVJFIGNhY2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdy
b3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwot
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVt
ZW50KTsKKyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3Rh
dGVtZW50LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDEx
LDIwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBp
biBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVS
ZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0
aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAg
ICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENh
Y2hlUmVzb3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldI
RVJFIChTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURh
dGEucGF0aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAg
ICAKLSAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAo
IXNlbGVjdFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhz
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNR
TElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSBzZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgp
ID09IFNRTElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0
ZWRDYWNoZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEs
IGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgcGF0
aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOwog
ICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUgPSAwOwogICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCAyNDI1ZjgzZDcy
NjI2ZTBlNTBkZmM2YzZjYjk1MDY3ZjA2ZjU3NWY1Li42ODA4YjE0M2RkNDY5OTRkZmJhYjY4ZWZi
ODQ4ODJmOTdiNDE5YmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKQEAgLTE5Myw3ICsxOTMsOCBAQCB2b2lkIENvb2tp
ZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpZiAoaXNPbk1lbW9yeSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lv
biJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzMsMjUgKzI3NCwyNSBAQCBib29sIENvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiQ29va2ll
IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3Jp
dHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFp
bnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9
IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAl
ZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGlu
dGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAg
IExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVj
aywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7Cisg
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAg
ICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiQ29va2llIGRh
dGFiYXNlIGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5k
YXRhKCkpOwpAQCAtMzg2LDIwICszODcsMTYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENv
b2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKIAog
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdFVybCB9Owog
Ci0gICAgY29uc3QgU3RyaW5nIHNxbCA9Ci0gICAgICAgICJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRv
bWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tp
ZSBXSEVSRSAiXAorICAgIGF1dG8gcHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2Vj
dXJlLCBzZXNzaW9uIEZST00gQ29va2llIFdIRVJFICJcCiAgICAgICAgICIoTk9UICgoc2Vzc2lv
biA9IDApIEFORCAoZXhwaXJlcyA8ID8pKSkiCiAgICAgICAgICJBTkQgKGh0dHBvbmx5ID0gQ09B
TEVTQ0UoTlVMTElGKD8sIC0xKSwgaHR0cG9ubHkpKSAiXAogICAgICAgICAiQU5EIChzZWN1cmUg
PSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBzZWN1cmUpKSAiXAogICAgICAgICAiQU5EIChzZXNz
aW9uID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2Vzc2lvbikpICJcCiAgICAgICAgICJBTkQg
KChkb21haW4gPSA/KSBPUiAoZG9tYWluIEdMT0IgPykpICJcCi0gICAgICAgICJPUkRFUiBCWSBs
ZW5ndGgocGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiOwotCi0gICAgYXV0byBwc3RtdCA9IG1ha2VV
bmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworICAgICAgICAiT1JERVIg
QlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIl9zKTsKICAgICBpZiAoIXBzdG10KQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcHN0bXQtPnByZXBhcmUoKTsKICAg
ICBwc3RtdC0+YmluZEludDY0KDEsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
Lm1pbGxpc2Vjb25kcygpKTsKICAgICBwc3RtdC0+YmluZEludCgyLCBodHRwT25seSA/ICpodHRw
T25seSA6IC0xKTsKICAgICBwc3RtdC0+YmluZEludCgzLCBzZWN1cmUgPyAqc2VjdXJlIDogLTEp
OwpAQCAtNDExLDkgKzQwOCw2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJE
Qjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgZWxzZQog
ICAgICAgICBwc3RtdC0+YmluZFRleHQoNiwgU3RyaW5nKCIqLiIpICsgcmVnaXN0cmFibGVEb21h
aW4uc3RyaW5nKCkpOwogCi0gICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQogICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGlsZSAocHN0bXQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CkBAIC00NTMsNyArNDQ3LDYgQEAgT3B0aW9uYWw8VmVj
dG9yPENvb2tpZT4+IENvb2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QKICAgICAgICAgY29va2llLnNlc3Npb24gPSBjb29raWVTZXNzaW9uOwogICAg
ICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwogICAgIH0KLSAgICBwc3RtdC0+
ZmluYWxpemUoKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtNDYzLDExICs0NTYsMTEg
QEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgIFZlY3Rv
cjxDb29raWU+IHJlc3VsdDsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZyBzcWwgPSAi
U0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1
cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3M7Ci0gICAgYXV0byBwc3RtdCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOworCisgICAgYXV0byBwc3RtdCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBh
dGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUiX3MpOwog
ICAgIGlmICghcHN0bXQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcHN0bXQtPnByZXBh
cmUoKTsKKwogICAgIHdoaWxlIChwc3RtdC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKICAgICAg
ICAgQ29va2llIGNvb2tpZTsKICAgICAgICAgY29va2llLm5hbWUgPSBwc3RtdC0+Z2V0Q29sdW1u
VGV4dCgwKTsKQEAgLTQ4Miw3ICs0NzUsNiBAQCBWZWN0b3I8Q29va2llPiBDb29raWVKYXJEQjo6
Z2V0QWxsQ29va2llcygpCiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gKHBzdG10LT5nZXRDb2x1
bW5JbnQoNykgPT0gMSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsK
ICAgICB9Ci0gICAgcHN0bXQtPmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNTcxLDE2ICs1NjMsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYKIAogSGFzaFNldDxT
dHJpbmc+IENvb2tpZUphckRCOjphbGxEb21haW5zKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOwotICAgIHN0YXRl
bWVudC5wcmVwYXJlKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBIYXNoU2V0PFN0cmluZz4gZG9tYWluczsKLSAgICB3
aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gZG9t
YWluID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBkb21haW4gPSBzdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIGRvbWFpbnMuYWRkKGRvbWFpbik7CiAgICAgfQot
Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CiAgICAgcmV0dXJuIGRvbWFpbnM7CiB9CiAKQEAg
LTYzNywxMCArNjI4LDkgQEAgYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCiAK
IHZvaWQgQ29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBz
cWwpCiB7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBTUUxJVEVfT0spOwotICAgIG1fc3RhdGVtZW50
cy5hZGQoc3FsLCBXVEZNb3ZlKHN0YXRlbWVudCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQp
OworICAgIG1fc3RhdGVtZW50cy5hZGQoc3FsLCBzdGF0ZW1lbnQubW92ZVRvVW5pcXVlUHRyKCkp
OwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChj
b25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQzLDEzIEBAIFNRTGl0ZVN0YXRlbWVudCYg
Q29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogCiBib29s
IENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3Rh
dGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5lcnJvcigp
KSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9yOiAlcyIs
IHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
ICAgICBpZiAoIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0YSgpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggYzIzOWI0
NDIwYjMyNWIwMDY0YzRmNmFiNjliMWI4MWI3YTBhZDdiZi4uYjZkZTMxZDEyYzlhNzBmNzAxYzMw
NjQ5MTVkY2I3ODUxNzMzNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiAKICAgICB7
CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKLSAgICAgICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
dGVtcF9zdG9yZSA9IE1FTU9SWTsiX3MpLmV4ZWN1dGVDb21tYW5kKCkpCisgICAgICAgIGlmICgh
ZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykpCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3RvcmUg
dG8gbWVtb3J5Iik7CiAgICAgfQogCkBAIC0xOTcsMTAgKzE5NywxMCBAQCB2b2lkIFNRTGl0ZURh
dGFiYXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiB7CiAgICAgbV91c2VXQUwgPSB0cnVlOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHdhbFN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBq
b3VybmFsX21vZGU9V0FMOyJfcyk7Ci0gICAgICAgIGlmICh3YWxTdGF0ZW1lbnQucHJlcGFyZUFu
ZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gd2FsU3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKKyAgICAgICAgaWYg
KHdhbFN0YXRlbWVudCAmJiB3YWxTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAj
aWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtb2RlLCAid2FsIikpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJqb3VybmFs
X21vZGUgb2YgZGF0YWJhc2Ugc2hvdWxkIGJlICdXQUwnLCBidXQgaXMgJyVzJyIsIG1vZGUudXRm
OCgpLmRhdGEoKSk7CiAjZW5kaWYKQEAgLTIxMCw5ICsyMTAsOSBAQCB2b2lkIFNRTGl0ZURhdGFi
YXNlOjp1c2VXQUxKb3VybmFsTW9kZSgpCiAKICAgICB7CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGNoZWNrcG9pbnRTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgd2FsX2NoZWNr
cG9pbnQoVFJVTkNBVEUpIl9zKTsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQucHJl
cGFyZUFuZFN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBpZiAoY2hlY2twb2lu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgIGF1dG8gY2hlY2twb2ludFN0YXRl
bWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSki
X3MpOworICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudCAmJiBjaGVja3BvaW50U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnRT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSkKICAgICAgICAgICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJTUUxpdGUgZGF0YWJhc2UgY2hlY2twb2ludCBpcyBibG9ja2VkIik7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGNo
ZWNrcG9pbnQ6ICVzIiwgbGFzdEVycm9yTXNnKCkpOwpAQCAtMjcyLDggKzI3Miw4IEBAIGludDY0
X3QgU1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKCkKICAgICB7CiAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZh
bHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBt
YXhfcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOworICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0
ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxl
QXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTI5Myw5ICsyOTMsOCBAQCB2b2lkIFNRTGl0
ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpCiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCBtYWtlU3RyaW5nKCJQUkFHTUEg
bWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKLSAgICBzdGF0ZW1lbnQucHJl
cGFyZSgpOwotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSBtYXhfcGFn
ZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCBtYXhpbXVtIHNpemUgb2YgZGF0YWJhc2UgdG8gJWxsaSBieXRlcyIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oc2l6ZSkpOwogCiAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKQEAg
LTMxMCw4ICszMDksOCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhv
cml6ZXIoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqdGhpcywgIlBSQUdNQSBwYWdlX3NpemUiX3MpOwotICAgICAgICBtX3BhZ2VTaXplID0gc3Rh
dGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgcGFnZV9zaXplIl9zKTsKKyAgICAgICAgbV9wYWdlU2l6ZSA9IHN0
YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgCiAgICAg
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQpAQCAtMzI3LDggKzMyNiw4IEBAIGlu
dDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUoKQogICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxz
ZSk7CiAgICAgICAgIC8vIE5vdGU6IGZyZWVsaXN0X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUg
My40LjEuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEg
ZnJlZWxpc3RfY291bnQiX3MpOwotICAgICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1l
bnQoIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7CisgICAgICAgIGZyZWVsaXN0Q291bnQgPSBz
dGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5h
YmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTM0Miw4ICszNDEsOCBAQCBpbnQ2NF90
IFNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUoKQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2Up
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vf
Y291bnQiX3MpOwotICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBh
Z2VfY291bnQiX3MpOworICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsK
ICAgICB9CiAKQEAgLTM3MSwxNCArMzcwLDIyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEJ1
c3lIYW5kbGVyKGludCgqaGFuZGxlcikodm9pZCosIGludCkpCiAgICAgICAgIExPRyhTUUxEYXRh
YmFzZSwgIkJ1c3kgaGFuZGxlciBzZXQgb24gbm9uLW9wZW4gZGF0YWJhc2UiKTsKIH0KIAotYm9v
bCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCitib29s
IFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIHF1ZXJ5KQogewot
ICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCkuZXhlY3V0ZUNvbW1hbmQoKTsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIHJldHVy
biBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworfQorCitib29sIFNR
TGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3Rh
dGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKIH0KIAogYm9vbCBTUUxpdGVE
YXRhYmFzZTo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0g
ICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5yZXR1cm5zQXRMZWFzdE9uZVJl
c3VsdCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChzcWwpOworICAg
IHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5yZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgp
OwogfQogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRh
YmxlbmFtZSkKQEAgLTM4NiwxOCArMzkzLDE1IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxl
RXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQogICAgIGlmICghaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBzdGF0ZW1lbnQgPSAiU0VMRUNUIG5hbWUg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1lID0gJyIgKyB0
YWJsZW5hbWUgKyAiJzsiOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqdGhpcywgc3RhdGVt
ZW50KTsKLSAgICBzcWwucHJlcGFyZSgpOwotICAgIHJldHVybiBzcWwuc3RlcCgpID09IFNRTElU
RV9ST1c7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFt
ZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAnIiAr
IHRhYmxlbmFtZSArICInOyIpOworICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogdm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxU
YWJsZXMoKQogewotICAgIFN0cmluZyBxdWVyeSA9ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfczsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZXM7
Ci0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5KS5yZXR1cm5UZXh0UmVzdWx0
cygwLCB0YWJsZXMpKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQgfHwgIXN0YXRlbWVudC0+cmV0dXJuVGV4dFJlc3VsdHMoMCwgdGFi
bGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NTgzLDEwICs1ODcsMTAgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6aXNBdXRvQ29tbWl0T24oKSBj
b25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0o
KQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgYXV0b192
YWN1dW0iX3MpOwotICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCk7CisgICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gMDsKKyAgICBpZiAoYXV0byBzdGF0ZW1l
bnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYXV0b192YWN1dW0iX3MpKQorICAgICAgICBh
dXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOwogICAgIGludCBlcnJv
ciA9IGxhc3RFcnJvcigpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgLy8gQ2hl
Y2sgaWYgd2UgZ290IGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byBnZXQgdGhlIHZhbHVlIG9mIHRo
ZSBhdXRvX3ZhY3V1bSBmbGFnLgogICAgIC8vIElmIHdlIGdvdCBhIFNRTElURV9CVVNZIGVycm9y
LCB0aGVuIHRoZXJlJ3MgcHJvYmFibHkgYW5vdGhlciB0cmFuc2FjdGlvbiBpbgpAQCAtNjQzLDQg
KzY0Nyw3MiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpyZWxlYXNlTWVtb3J5KCkKICAgICBzcWxp
dGUzX2RiX3JlbGVhc2VfbWVtb3J5KG1fZGIpOwogfQogCitzdGF0aWMgRXhwZWN0ZWQ8c3FsaXRl
M19zdG10KiwgaW50PiBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNl
JiBkYXRhYmFzZSwgY29uc3QgY2hhciogcXVlcnksIHNpemVfdCBxdWVyeUxlbmd0aCkKK3sKKyAg
ICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhkYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOworICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIsIHF1ZXJ5KTsKKworICAgIC8v
IFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluY2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0
ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOworICAgIC8vIHRoaXMgbGV0cyBTUUxpdGUgYXZvaWQg
YW4gZXh0cmEgc3RyaW5nIGNvcHkuCisgICAgc2l6ZV90IGxlbmd0aEluY2x1ZGluZ051bGxDaGFy
YWN0ZXIgPSBxdWVyeUxlbmd0aCArIDE7CisKKyAgICBzcWxpdGUzX3N0bXQqIHN0YXRlbWVudCB7
IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiB0YWlsID0gbnVsbHB0cjsKKyAgICBpbnQgZXJy
b3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVyeSwg
bGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciwgJnN0YXRlbWVudCwgJnRhaWwpOworCisgICAg
aWYgKGVycm9yICE9IFNRTElURV9PSykgeworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxp
dGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5LCBzcWxpdGUz
X2Vycm1zZyhkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yKTsKKyAgICB9CisKKyAgICBpZiAodGFpbCAmJiAqdGFpbCkgeworICAg
ICAgICBzcWxpdGUzX2ZpbmFsaXplKHN0YXRlbWVudCk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTUUxJVEVfRVJST1IpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9
CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJpbmcgcXVl
cnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0byBzcWxT
dGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5kYXRh
KCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRh
dGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3Io
KSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3FsU3RhdGVt
ZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBh
dXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1
ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1Ymxp
Y31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxVbmlxdWVS
ZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0g
cXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBx
dWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FM
aXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVt
ZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVy
cygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVl
cnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRl
bWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1l
bnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIwZmE2M2E5
OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdv
b2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsOCArMjgs
MTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFz
dENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFu
ZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5k
KEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0
IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29u
c3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB0
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBp
bnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoQVND
SUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8
U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3Rh
dGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOwor
CiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhpcyBpcyB0
aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IGRl
YThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLjZhOWE3MzhkMGMzM2Q2MGZm
NzEzMzU2NjE2OGY5NDE1ODQ5MGEzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQ6OlNR
TGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50
KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwgbV9zdGF0
ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NFUlQoc3Rh
dGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkKK1NRTGl0
ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVyKQorICAg
IDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQoc3RkOjpl
eGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxpemUoKTsK
IH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1lbnQ6On5T
UUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQotICAgIExv
Y2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLQotICAg
IENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKLSAgICAK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5kYXRhKCkp
OwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBu
dWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBsZXRzIFNR
TGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3RoSW5jbHVk
aW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0IGNoYXIq
IHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRpbmdOdWxs
Q2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAhPSBTUUxJ
VEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxl
ZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2Rh
dGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwpCi0gICAg
ICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lz
UHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXJyb3I7
CisgICAgaWYgKG1fc3RhdGVtZW50KQorICAgICAgICBzcWxpdGUzX2ZpbmFsaXplKG1fc3RhdGVt
ZW50KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6c3RlcCgpCiB7CiAgICAgTG9ja0hvbGRl
ciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwogCi0gICAgaWYgKCFt
X3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQogICAgIC8vIFRoZSBkYXRh
YmFzZSBuZWVkcyB0byB1cGRhdGUgaXRzIGxhc3QgY2hhbmdlcyBjb3VudCBiZWZvcmUgZWFjaCBz
dGF0ZW1lbnQKICAgICAvLyBpbiBvcmRlciB0byBjb21wdXRlIHByb3Blcmx5IHRoZSBsYXN0Q2hh
bmdlcygpIHJldHVybiB2YWx1ZS4KICAgICBtX2RhdGFiYXNlLnVwZGF0ZUxhc3RDaGFuZ2VzQ291
bnQoKTsKIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHN0ZXAgLSAlcyIsIG1fcXVlcnku
YXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBlcnJvciA9IHNxbGl0ZTNfc3RlcChtX3N0YXRlbWVu
dCk7Ci0gICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVwIGZhaWxlZCAoJWkpXG5R
dWVyeSAtICVzXG5FcnJvciAtICVzIiwgCi0gICAgICAgICAgICBlcnJvciwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsK
LSAgICB9CisgICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9S
T1cpCisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxu
RXJyb3IgLSAlcyIsIGVycm9yLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5k
bGUoKSkpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQotICAgIAotaW50IFNRTGl0ZVN0YXRlbWVu
dDo6ZmluYWxpemUoKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVkID0g
ZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FM
SVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIGZpbmFsaXplIC0gJXMiLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3FsaXRlM19maW5hbGl6ZSht
X3N0YXRlbWVudCk7Ci0gICAgbV9zdGF0ZW1lbnQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7Ci19
CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkgCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVw
YXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSByZXNldCAtICVzIiwgbV9xdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQobV9zdGF0ZW1lbnQpOwog
ICAgIHNxbGl0ZTNfY2xlYXJfYmluZGluZ3MobV9zdGF0ZW1lbnQpOwogICAgIHJldHVybiBzdGF0
dXM7CkBAIC0xMjksNDIgKzg0LDIxIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkKIAog
Ym9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKIHsKLSAgICBpZiAoIW1fc3Rh
dGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ET05F
KSB7Ci0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgZmluYWxpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RlcCgpID09IFNR
TElURV9ET05FOwogfQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuc0F0TGVhc3RPbmVS
ZXN1bHQoKQogewotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9P
SykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAg
IGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0KKyAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpCiB7
Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50
KCkpOwogICAgIEFTU0VSVChibG9iIHx8ICFzaXplKTsKICAgICBBU1NFUlQoc2l6ZSA+PSAwKTsK
IAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7Ci0K
ICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9iLCBz
aXplLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIApAQCAtMTg1LDcgKzExOSw2IEBAIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4
dCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTIwNCw3ICsxMzcsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
VGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludChpbnQgaW5kZXgsIGludCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJl
cGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjEzLDcgKzE0
NSw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdl
cikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBp
bnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+
IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJh
bWV0ZXJDb3VudCgpKTsKIApAQCAtMjIyLDcgKzE1Myw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0y
MzEsNyArMTYxLDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgs
IGRvdWJsZSBudW1iZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmROdWxsKGludCBpbmRl
eCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTI0OSwyNiArMTc4LDE5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmRWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSkKIAogdW5zaWduZWQgU1FM
aXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVCht
X2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KG1fc3RhdGVtZW50KTsKIH0K
IAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIEFTU0VSVChtX2lz
UHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBzcWxpdGUzX2RhdGFfY291bnQobV9zdGF0ZW1lbnQpOwogfQogCiBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAw
KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGFzU3Rh
cnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMjc4LDE5ICsyMDAsMTQgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1u
TnVsbChpbnQgY29sKQogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Js
b2IoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1l
bnQpIHsKLSAgICAgICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShTdHJpbmdWaWV3KHNxbGl0ZTNfY29sdW1uX2RlY2x0eXBlKG1fc3RhdGVtZW50LCBjb2wp
KSwgImJsb2IiKTsKIH0KIAogU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShp
bnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkK
LSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNvbHVt
bkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fbmFtZTE2
KG1fc3RhdGVtZW50LCBjb2wpKSk7CkBAIC0yOTksOSArMjE2LDggQEAgU3RyaW5nIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogU1FMVmFsdWUgU1FMaXRlU3RhdGVtZW50
OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRF
X1JPVykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaGFzU3RhcnRlZFN0
ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTMzMCw5ICsyNDYsOCBAQCBTUUxWYWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVt
blZhbHVlKGludCBjb2wpCiBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGlu
dCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQot
ICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoY29sdW1u
Q291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4gU3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzcWxpdGUzX2NvbHVtbl90ZXh0MTYo
bV9zdGF0ZW1lbnQsIGNvbCkpLCBzcWxpdGUzX2NvbHVtbl9ieXRlczE2KG1fc3RhdGVtZW50LCBj
b2wpIC8gc2l6ZW9mKFVDaGFyKSk7CkBAIC0zNDEsOSArMjU2LDggQEAgU3RyaW5nIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogZG91YmxlIFNRTGl0ZVN0YXRlbWVudDo6
Z2V0Q29sdW1uRG91YmxlKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBp
ZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQotICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGlu
ZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gMC4wOwogICAgIGlm
IChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICByZXR1cm4g
c3FsaXRlM19jb2x1bW5fZG91YmxlKG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzUyLDkgKzI2Niw4
IEBAIGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQgY29sKQogaW50
IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNv
bCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYXNT
dGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzYzLDkg
KzI3Niw4IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQogaW50
NjRfdCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KGludCBjb2wpCiB7CiAgICAgQVNT
RVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFy
ZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50NjQobV9zdGF0ZW1lbnQsIGNvbCk7CkBA
IC0zNzUsNyArMjg3LDcgQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFz
U3RyaW5nKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9z
dGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmICghaGFz
U3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKQEAgLTM5Nyw3ICsz
MDksNyBAQCB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKGludCBj
b2wsIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAg
ICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MjMs
NyArMzM1LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3Rvcihp
bnQgY29sLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49IDAp
OwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9S
T1cpIHsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CiAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtNDUxLDE5ICszNjMsMTYgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1
bHRzKGludCBjb2wsIFZlY3RvcjxTdHJpbmc+JiB2KQogCiAgICAgdi5jbGVhcigpOwogCi0gICAg
aWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRT
dGVwcGluZygpKQorICAgICAgICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRDb2x1bW5UZXh0KGNvbCkpOwogICAgIGJvb2wg
cmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNl
LCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVt
ZW50OjpyZXR1cm5UZXh0UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQot
ICAgIGZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDcxLDE5ICszODAs
MTYgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMoaW50IGNvbCwgVmVj
dG9yPGludD4mIHYpCiB7CiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50KQot
ICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQorICAgICAg
ICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2
LmFwcGVuZChnZXRDb2x1bW5JbnQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAg
IGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJl
c3VsdCA9IGZhbHNlOwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJl
c3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3Vs
dHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ5MSwxOSArMzk3LDE2IEBAIGJvb2wgU1FMaXRlU3Rh
dGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGludDY0X3Q+JiB2KQog
ewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxp
emUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAog
ICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29s
dW1uSW50NjQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFi
YXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBk
YXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0co
U1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludDY0UmVzdWx0czogRXJyb3Ig
cmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtNTExLDI1ICs0MTQsMjIgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJl
dHVybkRvdWJsZVJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGRvdWJsZT4mIHYpCiB7CiAgICAgdi5j
bGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAg
IGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQorICAgICAgICByZXNldCgpOwogCiAgICAgd2hpbGUg
KHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRDb2x1bW5Eb3VibGUo
Y29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RF
cnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAg
ICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBx
dWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkRvdWJsZVJlc3VsdHM6IEVycm9yIHJlYWRpbmcg
cmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLWJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0V4cGlyZWQoKQorYm9vbCBTUUxpdGVTdGF0ZW1l
bnQ6Omhhc1N0YXJ0ZWRTdGVwcGluZygpCiB7Ci0gICAgcmV0dXJuICFtX3N0YXRlbWVudDsKKyAg
ICByZXR1cm4gc3FsaXRlM19zdG10X2J1c3kobV9zdGF0ZW1lbnQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVt
ZW50LmgKaW5kZXggYTdhY2RlNWNmYzViMmQzNTYyYjFmYjUxZmQ2YTcxYmQ5NWNjZTQwOC4uNjM1
MTJiYjZlYjQ5YTZlZTE5ZTcxZjFjNjdiMWZlOGYyOWY2NWM4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCArMzUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTUUxpdGVTdGF0ZW1lbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFNRTGl0ZVN0YXRlbWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVE
YXRhYmFzZSYsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0
ZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVt
ZW50JiYpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIGludCBwcmVwYXJlKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50
IHNpemUpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0
IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYpOwpAQCAtNTAsMjMgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB1bnNpZ25lZCBiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIGludCBzdGVwKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IGZpbmFsaXplKCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgaW50IHJlc2V0KCk7CiAgICAgCi0gICAgaW50IHByZXBhcmVBbmRT
dGVwKCkgeyBpZiAoaW50IGVycm9yID0gcHJlcGFyZSgpKSByZXR1cm4gZXJyb3I7IHJldHVybiBz
dGVwKCk7IH0KLSAgICAKLSAgICAvLyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMgdGhl
IHF1ZXJ5LgorICAgIC8vIHN0ZXBzIGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgogICAgIC8vIHJl
dHVybnMgdHJ1ZSBpZiBhbGwgMyBzdGVwcyBzdWNjZWVkIHdpdGggc3RlcCgpIHJldHVybmluZyBT
UUxJVEVfRE9ORQogICAgIC8vIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlICAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKCk7CiAgICAgCi0gICAgLy8gcHJlcGFyZXMsIHN0
ZXBzLCBhbmQgZmluYWxpemVzLiAgCisgICAgLy8gc3RlcHMsIGFuZCBmaW5hbGl6ZXMuCiAgICAg
Ly8gcmV0dXJucyB0cnVlIGlzIHN0ZXAoKSByZXR1cm5zIFNRTElURV9ST1cKICAgICAvLyByZXR1
cm5zIGZhbHNlIG90aGVyd2lzZQogICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsK
IAotICAgIGJvb2wgaXNFeHBpcmVkKCk7Ci0KICAgICAvLyBSZXR1cm5zIC0xIG9uIGxhc3Qtc3Rl
cCBmYWlsaW5nLiAgT3RoZXJ3aXNlLCByZXR1cm5zIG51bWJlciBvZiByb3dzCiAgICAgLy8gcmV0
dXJuZWQgaW4gdGhlIGxhc3Qgc3RlcCgpCiAgICAgaW50IGNvbHVtbkNvdW50KCk7CkBAIC05MCwx
NSArODQsMTUgQEAgcHVibGljOgogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyBy
ZXR1cm4gbV9kYXRhYmFzZTsgfQogICAgIAotICAgIGNvbnN0IFN0cmluZyYgcXVlcnkoKSBjb25z
dCB7IHJldHVybiBtX3F1ZXJ5OyB9Ci0gICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBT
UUxpdGVEYXRhYmFzZTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBzcWxp
dGUzX3N0bXQqKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJlcGFyZWQgc3RhdGVt
ZW50IGhhcyBiZWVuIHN0ZXBwZWQgYXQgbGVhc3Qgb25jZSB1c2luZyBzdGVwKCkgYnV0IGhhcyBu
ZWl0aGVyIHJ1biB0byBjb21wbGV0aW9uIChyZXR1cm5lZCBTUUxJVEVfRE9ORSBmcm9tIHN0ZXAo
KSkgbm9yIGJlZW4gcmVzZXQoKS4KKyAgICBib29sIGhhc1N0YXJ0ZWRTdGVwcGluZygpOworCiAg
ICAgU1FMaXRlRGF0YWJhc2UmIG1fZGF0YWJhc2U7Ci0gICAgU3RyaW5nIG1fcXVlcnk7CiAgICAg
c3FsaXRlM19zdG10KiBtX3N0YXRlbWVudDsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wg
bV9pc1ByZXBhcmVkIHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVw
TWVudURCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVE
Qi5jcHAKaW5kZXggNmY3ZjRiYTE2NjBiNGY3YTk3NzIxMmM4NTYzYTQzYzY2NWUzMGI1NC4uNDYx
YTJjN2ZjZGE4OWI4MzdhNTk5MDNlYmNmYTNkNWIyODNjNTYyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCkBAIC0xMzAsMjUgKzEz
MCwyNSBAQCBib29sIFNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkoKQog
ICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiU2VhcmNoIikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3JpdHkobV9kYXRhYmFzZSwgIlBS
QUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFpbnRlZ3JpdHkpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2si
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCByZXN1bHRDb2RlID0g
aW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS0+c3RlcCgp
OwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAlZCIsIHJlc3VsdENvZGUpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IGNvbHVtbnMgPSBpbnRlZ3Jp
dHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGludGVncml0eS0+Y29sdW1uQ291
bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAgIExPR19FUlJPUigiUmVjZWl2
ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVjaywgc2hvdWxkIGJlIDEiLCBj
b2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0cmluZyByZXN1
bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7CisgICAgU3RyaW5nIHJlc3VsdFRl
eHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAgICBpZiAocmVzdWx0VGV4dCAh
PSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiU2VhcmNoIGF1dG9zYXZlIGRhdGFiYXNlIGlu
dGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5kYXRhKCkpOwpA
QCAtMjI0LDE3ICsyMjQsMTkgQEAgYm9vbCBTZWFyY2hQb3B1cE1lbnVEQjo6b3BlbkRhdGFiYXNl
KCkKIAogdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6Y2xvc2VEYXRhYmFzZSgpCiB7Ci0gICAgaWYg
KG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgbV9sb2FkU2VhcmNoVGVybXNGb3JOYW1l
U3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX2luc2VydFNlYXJjaFRlcm1TdGF0ZW1l
bnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1fcmVtb3ZlU2VhcmNoVGVybXNGb3JOYW1lU3RhdGVt
ZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgfQorICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sb2Fk
U2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2luc2VydFNlYXJj
aFRlcm1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVtb3ZlU2VhcmNoVGVybXNGb3JOYW1l
U3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CiB9CiAKIHZvaWQg
U2VhcmNoUG9wdXBNZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewotICAgIGludCB2ZXJz
aW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9uIiku
Z2V0Q29sdW1uSW50KDApOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICBpbnQgdmVyc2lvbiA9IHN0
YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lv
biA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MSwyMyArMjczLDI1
IEBAIHZvaWQgU2VhcmNoUG9wdXBNZW51REI6OmNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0
dWFsKQogCiBpbnQgU2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVTaW1wbGVTcWwoY29uc3QgU3Ry
aW5nJiBzcWwsIGJvb2wgaWdub3JlRXJyb3IpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQucHJlcGFyZUFu
ZFN0ZXAoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7
CisgICAgICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybiBzdGF0ZW1lbnQuZXJyb3IoKTsKKyAgICB9CiAKLSAgICBjaGVja1NRTGl0ZVJl
dHVybkNvZGUocmV0KTsKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYg
KHJldCAhPSBTUUxJVEVfT0sgJiYgcmV0ICE9IFNRTElURV9ET05FICYmIHJldCAhPSBTUUxJVEVf
Uk9XICYmICFpZ25vcmVFcnJvcikKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0
ZSAlcyBlcnJvcjogJXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotCiAgICAgcmV0dXJuIHJldDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0
YXRlbWVudD4gU2VhcmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KGNvbnN0
IFN0cmluZyYgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJl
cGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICBy
ZXR1cm4gc3RhdGVtZW50OworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
SGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQpOworICAgIGlmICghc3Rh
dGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5j
cHAKaW5kZXggODkyYzNmNDllOTAxNGEzNWZlOTI5ODRlZjlhMjkwNGE3YmRlZDU2MC4uYjBjNzE2
MWE4MDZhODY4ZWM0ZmY0NDc2NTNiYjg1M2ZjMDk2ODQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRh
YmFzZS5jcHAKQEAgLTI4NSwxMSArMjg1LDExIEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwog
ICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgcmVjb3Jk
cyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9kYXRhYmFzZSwg
IlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdSZWNv
cmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0g
ICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBz
Y2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiI7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiJfczsKIAotICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29y
ZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNx
bGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzAxLDcgKzMwMSw3IEBAIFN0cmluZyBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKQogICAgICAgICBp
ZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgICAgICByZXR1cm4gIkVycm9y
IGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJs
ZS4iOwogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsK
ICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTQyNywx
OCArNDI3LDE4IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMoY29u
c3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24oKm1fZGF0YWJhc2UpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gUmVjb3Jk
cyBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9zKTsKLSAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGluc2VydFN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFJlY29yZHMgVkFM
VUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFp
bnNlcnRTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtl
ciwgIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0
YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCks
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIGF1dG8mIHNjcmlwdFN0b3JhZ2UgPSB0aGlzLT5zY3JpcHRTdG9yYWdlKCk7CiAg
ICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiByZW1vdmVkUmVnaXN0cmF0aW9ucykgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiREVMRVRFIEZST00gUmVjb3Jk
cyBXSEVSRSBrZXkgPSA/Iik7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNl
S2V5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBh
cmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gPyJfcyk7CisgICAg
ICAgIGlmICghZGVsZXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVTdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8g
cmVtb3ZlIHJlZ2lzdHJhdGlvbiBkYXRhIGZyb20gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC00NTcsMTkgKzQ1NywxOSBAQCBi
b29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2
aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVy
IGNlcnRpZmljYXRlSW5mb0VuY29kZXI7CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0VuY29kZXIg
PDwgZGF0YS5jZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAgaWYgKHNxbC5iaW5kVGV4dCgxLCBk
YXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wcm90
b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRU
ZXh0KDMsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBhdGgoKS50b1N0cmluZygpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg0LCBkYXRhLnJlZ2lzdHJhdGlv
bi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3FsLmJpbmREb3VibGUoNSwgZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVwZGF0
ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3RyaW5nKGRhdGEucmVnaXN0
cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3FsLmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5
cGUpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYig5LCBjc3BFbmNv
ZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVu
Y29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUlu
Zm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgIGlmIChpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0
aW9uLmtleS50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wcm90
b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kVGV4dCgzLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wYXRoKCkudG9T
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRUZXh0KDQsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmlnaW4oKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmREb3VibGUoNSwgZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVwZGF0ZVRpbWUuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRl
bWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlv
bi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDgsIHdvcmtlclR5cGVU
b1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSwgY3NwRW5jb2Rl
ci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1h
cEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigx
MiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rl
ci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50
byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KQEAgLTUwMiwyNiArNTAyLDI2IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6
aW1wb3J0UmVjb3JkcygpCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKICAgICBSRUxF
QVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29y
ZHM6Iik7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZS
T00gUmVjb3JkczsiX3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIHNxbCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00g
UmVjb3JkczsiX3MpOworICAgIGlmICghc3FsKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
RmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZnJv
bSByZWNvcmRzIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgIikgLSAiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAKLSAgICBmb3IgKDsgcmVzdWx0ID09IFNR
TElURV9ST1c7IHJlc3VsdCA9IHNxbC5zdGVwKCkpIHsKKyAgICBmb3IgKDsgcmVzdWx0ID09IFNR
TElURV9ST1c7IHJlc3VsdCA9IHNxbC0+c3RlcCgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFNl
cnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogSW1wb3J0
aW5nIGEgcmVnaXN0cmF0aW9uIGZyb20gdGhlIGRhdGFiYXNlIik7Ci0gICAgICAgIGF1dG8ga2V5
ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFiYXNlS2V5KHNxbC5nZXRD
b2x1bW5UZXh0KDApKTsKLSAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3Fs
LmdldENvbHVtblRleHQoMSkgfTsKLSAgICAgICAgYXV0byBzY29wZVBhdGggPSBzcWwuZ2V0Q29s
dW1uVGV4dCgyKTsKKyAgICAgICAgYXV0byBrZXkgPSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5Ojpmcm9tRGF0YWJhc2VLZXkoc3FsLT5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgYXV0
byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRDb2x1bW5UZXh0KDEpIH07CisgICAg
ICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLT5nZXRDb2x1bW5UZXh0KDIpOwogICAgICAgICBhdXRv
IHNjb3BlVVJMID0gVVJMIHsgb3JpZ2luVVJMLCBzY29wZVBhdGggfTsKLSAgICAgICAgYXV0byB0
b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3Fs
LmdldENvbHVtblRleHQoMykpOwotICAgICAgICBhdXRvIGxhc3RVcGRhdGVDaGVja1RpbWUgPSBX
YWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLmdldENvbHVtbkRvdWJsZSg0KSk7Ci0gICAgICAg
IGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBzdHJpbmdUb1VwZGF0ZVZpYUNhY2hlKHNxbC5nZXRDb2x1
bW5UZXh0KDUpKTsKLSAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwgeyBVUkwoKSwgc3FsLmdl
dENvbHVtblRleHQoNikgfTsKLSAgICAgICAgYXV0byB3b3JrZXJUeXBlID0gc3RyaW5nVG9Xb3Jr
ZXJUeXBlKHNxbC5nZXRDb2x1bW5UZXh0KDcpKTsKKyAgICAgICAgYXV0byB0b3BPcmlnaW4gPSBT
ZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3FsLT5nZXRDb2x1bW5U
ZXh0KDMpKTsKKyAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1lID0gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHNxbC0+Z2V0Q29sdW1uRG91YmxlKDQpKTsKKyAgICAgICAgYXV0byB1cGRh
dGVWaWFDYWNoZSA9IHN0cmluZ1RvVXBkYXRlVmlhQ2FjaGUoc3FsLT5nZXRDb2x1bW5UZXh0KDUp
KTsKKyAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRDb2x1bW5U
ZXh0KDYpIH07CisgICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmluZ1RvV29ya2VyVHlwZShz
cWwtPmdldENvbHVtblRleHQoNykpOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDgs
IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEpOworICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JB
c1ZlY3Rvcig4LCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsKICAgICAgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuZGF0
YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSk7CiAgICAgICAgIE9wdGlvbmFs
PENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gY29udGVudFNlY3VyaXR5UG9s
aWN5OwogICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXplKCkpIHsKQEAg
LTUzMiwxMCArNTMyLDEwIEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVj
b3JkcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJlZmVycmVy
UG9saWN5ID0gc3FsLmdldENvbHVtblRleHQoOSk7CisgICAgICAgIGF1dG8gcmVmZXJyZXJQb2xp
Y3kgPSBzcWwtPmdldENvbHVtblRleHQoOSk7CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNj
cmlwdFJlc291cmNlTWFwRGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcigx
MCwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNW
ZWN0b3IoMTAsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7CiAgICAgICAgIEhhc2hNYXA8VVJMLCBT
ZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1h
cDsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFw
RGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGEuZGF0YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERh
dGEuc2l6ZSgpKTsKQEAgLTU1MCw3ICs1NTAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmltcG9ydFJlY29yZHMoKQogICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGNlcnRpZmljYXRlSW5mb0RhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3Io
MTEsIGNlcnRpZmljYXRlSW5mb0RhdGEpOworICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigxMSwgY2VydGlmaWNhdGVJbmZvRGF0YSk7CiAgICAgICAgIE9wdGlvbmFsPENlcnRpZmlj
YXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRl
Y29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhLmRhdGEoKSwg
Y2VydGlmaWNhdGVJbmZvRGF0YS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggMGQ3MjUyYjUzNWNhMmY3ZDA4
OGVkOTRlYTI2NGM5NzZjNWQ0MzVjZC4uMTliMGEyMTQxNjJiYjYxZWE1Y2M2OTZlNWQ0MjYzZGNm
OTg4MDY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCkBAIC0zODIsOCArMzgyLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzZXRCdXN5VGlt
ZW91dChtX2RhdGFiYXNlLCAiUFJBR01BIGJ1c3lfdGltZW91dCA9IDUwMDAiKTsKLSAgICBpZiAo
c2V0QnVzeVRpbWVvdXQucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBzZXRCdXN5VGltZW91dC5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAg
ICBpZiAoIXNldEJ1c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRF
X1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0QnVzeVRpbWVvdXQgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNDAxLDIyICs0MDEsMjIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5T
Y2hlbWEoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG1pc3NpbmdUYWJsZXM7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgdGJsX25hbWU9PyIpOwotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dHlwZT0ndGFibGUnIGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEgZmFpbGVk
IHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVl
cmllcygpLmtleXMoKSkgewotICAgICAgICBpZiAoc3RhdGVtZW50LmJpbmRUZXh0KDEsIHRhYmxl
KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFi
bGUpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlz
c2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJM
SUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3Np
bmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMgbWlzc2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJs
ZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAgICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJp
bmcodGFibGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAg
ICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0KICAgICBpZiAobWlzc2luZ1RhYmxlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC00MjYsOCArNDI2LDggQEAg
T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjaGVja0Zvck1pc3NpbmdUYWIKIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBl
bmFibGVGb3JlaWduS2V5cyhtX2RhdGFiYXNlLCAiUFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIik7
Ci0gICAgaWYgKGVuYWJsZUZvcmVpZ25LZXlzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgZW5h
YmxlRm9yZWlnbktleXMuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBlbmFibGVG
b3JlaWduS2V5cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGZvcmVpZ25f
a2V5cyA9IE9OIl9zKTsKKyAgICBpZiAoIWVuYWJsZUZvcmVpZ25LZXlzIHx8IGVuYWJsZUZvcmVp
Z25LZXlzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVu
YWJsZUZvcmVpZ25LZXlzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQzNiwzMSArNDM2LDMxIEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkK
IAogVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0VGFibGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRh
YmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUnIikpOwotICAgIGlmIChnZXRUYWJsZVN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlw
ZSA9ICd0YWJsZSciKSk7CisgICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVudCkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGlu
ZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2NoZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdldFRhYmxlU3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCk7CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRJbmRleFN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICdpbmRleCciKSk7Ci0g
ICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIGdldEluZGV4U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VT
dHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0
YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ2luZGV4JyIpKTsKKyAgICBpZiAoIWdldEluZGV4U3Rh
dGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJp
ZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGZvciB0aGUgdGFi
bGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAg
aWYgKGdldEluZGV4U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1
dG8gcmF3SW5kZXggPSBTdHJpbmcoZ2V0SW5kZXhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7
CisgICAgaWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBhdXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBp
bmRleCA9IHJhd0luZGV4OwogICAgIH0KQEAgLTQ4MCwyMCArNDgwLDIwIEBAIGJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50U2NoCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9
ICdpbmRleCciX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptaXNzaW5nVW5pcXVlSW5kaWNlcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0
Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKHN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkgPCBleHBlY3RlZEluZGV4Q291bnQpCisgICAgaWYgKHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDApIDwgZXhwZWN0ZWRJbmRleENvdW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTU1NCw4ICs1NTQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAg
ICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlz
KCkpIHsKICAgICAgICAgYXV0byBxdWVyeSA9IG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRh
YmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgYWx0
ZXJUYWJsZShtX2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIGlmIChhbHRlclRhYmxlLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sgfHwgYWx0ZXJUYWJsZS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgYXV0byBhbHRlclRhYmxlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1
ZXJ5KTsKKyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdU
YWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gcmVuYW1lIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAl
cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01NzAsMTYgKzU3MCwxNiBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRv
TmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVk
VGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAgICAgYXV0byBxdWVyeSA9IGlu
c2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVF1ZXJ5KHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IG1pZ3JhdGVUYWJsZURhdGEobV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAo
bWlncmF0ZVRhYmxlRGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IG1pZ3JhdGVUYWJsZURh
dGEuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gbWlncmF0ZVRhYmxlRGF0
YSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmICghbWln
cmF0ZVRhYmxlRGF0YSB8fCBtaWdyYXRlVGFibGVEYXRhLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNl
c3NhcnkgZmFpbGVkIHRvIG1pZ3JhdGUgc2NoZW1hLCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIGRy
b3BRdWVyeSA9IG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxlKTsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGRyb3BUYWJsZVF1ZXJ5KG1fZGF0YWJhc2UsIGRyb3BRdWVyeSk7Ci0gICAg
ICAgIGlmIChkcm9wVGFibGVRdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGRyb3BUYWJs
ZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGRyb3BUYWJsZVF1
ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGRyb3BRdWVyeSk7CisgICAgICAgIGlm
ICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5l
Y2Vzc2FyeSBmYWlsZWQgdG8gZHJvcCB0ZW1wb3JhcnkgdGFibGVzLCBlcnJvciBtZXNzYWdlOiAl
cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01OTcsMTcgKzU5NywxNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRv
TmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwgdGFibGVOYW1lLCAiKSIpKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJQUkFHTUEg
dGFibGVfaW5mbygiLCB0YWJsZU5hbWUsICIpIikpOwogCi0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdldENvbHVtbnNGcm9tVGFibGVJbmZvU3RhdGVtZW50IFVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKICAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5zOwotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0byBuYW1lID0gc3RhdGVtZW50LmdldENv
bHVtblRleHQoMSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgYXV0byBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAg
ICAgICBjb2x1bW5zLmFwcGVuZChuYW1lKTsKICAgICB9CiAKQEAgLTYyMiwxOCArNjIyLDE4IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZShTdHJpbmcmJiB0YWJsCiAgICAgICAgIGlmIChleGlzdGluZ0NvbHVtbnMuY29u
dGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJBTFRFUiBU
QUJMRSAiLCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxF
ICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNvbHVtbikpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9U
YWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0
byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVt
bnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQu
cmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtNjQ4
LDEzICs2NDgsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlbmFtZUNvbHVtbkluVGFibGUoU3RyaW5nJiYgdGFibGVOYW1l
LCBFeGlzdGluZ0NvbHVtbk5hbWUmJiBleGlzdGluZ0NvbHVtbk5hbWUsIEV4cGVjdGVkQ29sdW1u
TmFtZSYmIGV4cGVjdGVkQ29sdW1uTmFtZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBS
RU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3RlZENvbHVt
bk5hbWUpKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5n
KCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAiLCBleGlzdGluZ0Nv
bHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVtbiBpbiB0YWJsZSwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBp
ZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRv
IHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC03MTIsMTUgKzcxMiwxNSBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1h
SWZOZWNlc3NhcnkoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAg
Ly8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0YWJs
ZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
IHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9t
YWlucyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2
ZWREb21haW5zJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJsZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFu
IGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYg
KHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBl
eGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9ic2VydmVkIERvbWFp
bnMgdGFibGUuIik7CiAgICAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKQEAgLTcyOCw3ICs3MjgsNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRl
U2NoZW1hSWZOZWNlc3NhcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNzUxLDEyICs3NTEsMTQg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0
ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhl
YXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWko
KS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgeyB9OwogICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9y
RXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJh
c2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KQEAgLTEwMDQsOSArMTAwNiw4IEBAIE9wdGlv
bmFsPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlu
SUQoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gU3Rh
dGVtZW50OiAlcy4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBz
Y29wZWRTdGF0ZW1lbnQtPnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTAzOSwyMyArMTA0MCwyMyBAQCBTdHJpbmcgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNv
bnN0IEhhc2hTZQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25z
dCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluTGlzdCwgdW5zaWduZWQgZG9tYWlu
SUQpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3Qo
ZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVu
c3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7IikpOwogICAgIAotICAgIGlm
IChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmluZEludCgxLCBkb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklE
KSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICBpZiAoc3Rh
dGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKLSAgICAgICAgaWYgKGluc2VydFJlbGF0aW9u
c2hpcFN0YXRlbWVudC5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBpZiAoaW5zZXJ0UmVsYXRp
b25zaGlwU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5zZXJ0UmVsYXRpb25z
aGlwU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChpbnNlcnRSZWxh
dGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CkBAIC0xMjI5LDE3ICsxMjMwLDE3IEBAIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
CiAKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIGNvbnN0IGF1dG8gcHJldmFsZW50RG9tYWlu
c0JpbmRQYXJhbWV0ZXIgPSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsID8gIiUiIDogIjEiOwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzb3J0ZWRTdGF0aXN0aWNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBq
b2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwotICAgIGlmIChzb3J0ZWRTdGF0aXN0aWNz
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5k
VGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKLSAgICAgICAgfHwgc29ydGVk
U3RhdGlzdGljcy5iaW5kVGV4dCgyLCAiJSIpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc29y
dGVkU3RhdGlzdGljcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJT
RUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkpKTsKKyAgICBpZiAoIXNvcnRl
ZFN0YXRpc3RpY3MKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMSwgcHJl
dmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCisgICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3Mt
PmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVn
YXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIH0KLSAgICB3aGlsZSAo
c29ydGVkU3RhdGlzdGljcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoaGFz
QmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5JbnQoMSkpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29s
dW1uSW50KDApOworICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgeworICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy0+
Z2V0Q29sdW1uSW50KDEpKSkgeworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluSUQg
PSBzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgICAgICBhdXRvIHRo
aXJkUGFydHlEb21haW4gPSBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJl
Z2lzdHJhYmxlRG9tYWluU3RyaW5nKGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh0aGlyZFBh
cnR5RG9tYWluSUQpKTsKICAgICAgICAgICAgIHRoaXJkUGFydHlEYXRhTGlzdC5hcHBlbmQoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSB7IHRoaXJkUGFydHlE
b21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh0aGly
ZFBhcnR5RG9tYWluSUQsIHRoaXJkUGFydHlEb21haW4pIH0pOwogICAgICAgICB9CkBAIC0xMjY1
LDkgKzEyNjYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucwogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAg
IGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29y
ZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFp
biBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5j
cmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMjg1LDMxICsxMjg1LDMwIEBAIHVu
c2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZp
bmROb25QcmV2YWxlbnREb21haW5zCiAgICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOwogCiAg
ICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOwotICAgIFNRTGl0ZVN0
YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsICJTRUxFQ1QgU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMu
ZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGZpbmRTdWJyZXNvdXJjZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWlu
SUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFN1YnJlc291cmNlcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIg
Sk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURv
bWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7CisgICAg
aWYgKCFmaW5kU3VicmVzb3VyY2VzIHx8IGZpbmRTdWJyZXNvdXJjZXMtPmJpbmRJbnQoMSwgcHJp
bWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50IG5ld0Rv
bWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0
byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5l
d0RvbWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAg
ICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFzZSwgIlNFTEVDVCBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlu
cy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hF
UkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAw
Il9zKTsKLSAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGZpbmRUb3BGcmFtZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJv
bSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMg
T04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
LmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlu
cy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZyYW1lcworICAgICAgICB8
fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09L
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29s
dW1uSW50KDApOworICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5nZXRDb2x1bW5J
bnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rp
b25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQu
c2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9t
YWluSUQpOwpAQCAtMTM0MSwyMSArMTM0MCwyMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbAog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVJl
ZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1
YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
ICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQg
QU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVu
dER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBK
T0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZh
bGVudCA9IDEiX3MpOwotICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUo
KSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGly
ZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Cisg
ICAgYXV0byB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VE
b21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFp
bnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
by50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAg
ICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVl
VG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikp
OwotICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxl
bnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdl
PFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2lu
KCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKCFtYXJr
UHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEz
NjYsMTIgKzEzNjQsMTIgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXM+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IG5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0
cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVy
eVByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3Rh
dGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAgICAgLCBub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKKyAgICBhdXRv
IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAg
IGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CisgICAg
ICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21h
aW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAg
ICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIp
ID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkxvdwogICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKICAgICAgICAgICAgIHJlc3Vs
dHMuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICB9CkBAIC0xMzg2LDQzICsxMzg0LDQzIEBAIEhh
c2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAKICAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIs
IGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7
Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAg
dW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQo
dG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VE
b21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3Vy
Y2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3ViZnJhbWVEb21haW5JRCwg
Q09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9t
YWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1h
a2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21h
aW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAo
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
ICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5J
RCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNTQ5LDEwICsxNTQ3LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWlu
JiYKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbmNyZW1lbnRTdG9y
YWdlQWNjZXNzKG1fZGF0YWJhc2UsICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Iik7
Ci0gICAgaWYgKGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgKnN1YkZyYW1lU3Rh
dHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nl
c3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNj
ZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGlt
ZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9t
YWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAg
fHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vj
b25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNjQ2LDkgKzE2NDQsOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRh
dGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7Ci0gICAg
aWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhl
cmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRv
bWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTE3NzYsMTAgKzE3NzMsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWluSUQg
PSA/Iik7Ci0gICAgaWYgKHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5i
aW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
cmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJfcyk7Cisg
ICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAgICAgICAgfHwgcmVtb3Zl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25k
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTgzMiwxMCArMTgyOSwxMCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25z
dCBSZWdpc3RyYWJsZQogICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxz
ZSwgeyB9KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hF
UkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwg
KnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9y
YWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlU3RvcmFn
ZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAg
aWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Mt
PmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8
fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CkBAIC0xOTE4LDkgKzE5MTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPgogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2
ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxk
TGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFp
bnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+
OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAg
IGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMwMSwxNiAr
MjI5NywxNSBAQCBDb29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBz
dWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpc1ByZXZhbGVudCwg
aGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAot
ICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKLSAg
ICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDApOwotICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3Rh
dGVtZW50LmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsKKyAgICBib29sIGhhc05vRW50
cnkgPSBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XOworICAgIGJvb2wgaXNQcmV2YWxl
bnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOworICAgIGJv
b2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CiAKICAgICBpZiAoIWFyZUFsbFRoaXJkUGFydHlDb29r
aWVzQmxvY2tlZFVuZGVyKHRvcEZyYW1lRG9tYWluKSAmJiAhaXNQcmV2YWxlbnQpCiAgICAgICAg
IHJldHVybiBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xpY3k7CkBAIC0yMzMzLDE0ICsy
MzI4LDE0IEBAIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTCiAKICAgICBhdXRvIGZpcnN0UGFydHlQ
cmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWlu
SUQgPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9t
YWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcmVxdWVzdGluZ0Rv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsIGZp
cnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duOjpObzsKIAotICAgIHJldHVybiAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9t
cHRXYXNTaG93bjo6Tm87CisgICAgcmV0dXJuICEhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkg
PyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6Tm87CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0CkBAIC0yMzQ4LDEyICsyMzQzLDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5k
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDAiX3MpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWlu
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlcklu
dGVyYWN0aW9uID0gMCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNjMsMTIgKzIzNTgsMTIgQEAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluc1RvQmxvY2tCdXQKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAx
Il9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3Ry
YWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5E
IGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAg
ICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNzgsMTIgKzIzNzMsMTIgQEAgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZG9tYWluc1dpdGhVc2VySW4KICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBP
YnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7Ci0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxl
IChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5k
KFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5T
dHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAt
MjM5MywxMyArMjM4OCwxMiBAQCBIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURv
bWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OgogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1YkZyYW1lRG9tYWluLCByZWdp
c3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJsZURvbWFpbiBhcyBzdWJGcmFt
ZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRvcExldmVsRG9tYWluSUQgRlJPTSBPYnNl
cnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRvbWFpbklEKSBhcyB6IElOTkVSIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50b3BMZXZlbERvbWFpbklEOyJfcyk7Ci0K
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzdWJGcmFtZURvbWFp
biwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMg
c3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5F
UiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsi
X3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAg
IHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMu
YWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21h
aW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEp
KSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1
bHRzOwogfQpAQCAtMjQ0NSwxOSArMjQzOSwxOCBAQCBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYQog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxEb21haW5E
YXRhPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9N
IE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQo
KikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21haW5J
RCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9t
YWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBn
cmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3Vu
dE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxF
Q1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBm
cm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5zb3VyY2VEb21haW5JRCA9IGRv
bWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7
CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2Vk
Q3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpKQotICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50Lmdl
dENvbHVtbkRvdWJsZSgyKSkKLSAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCgz
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQp
ID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNSkg
PyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNikpCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAsIFJlZ2lzdHJhYmxl
RG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHMoc3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludCg2KSkKICAgICAgICAgfSk7
CiAgICAgfQogICAgIApAQCAtMjQ3MywxMSArMjQ2NiwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25l
ZD4mJgogCiAgICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFu
Z2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklEc1RvQ2xlYXIuYmVnaW4oKSwg
ZG9tYWluSURzVG9DbGVhci5lbmQoKSkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyR3Jh
bmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwg
bGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmICghY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChjbGVhckdyYW5kZmF0aGVy
aW5nU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTI2
MTcsMjMgKzI2MTAsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIHNpemVfdCBjb3VudExlZnRUb1BydW5l
ID0gY291bnQgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvOwogICAgIEFTU0VSVChj
b3VudExlZnRUb1BydW5lKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZWNvcmRzVG9QcnVuZSht
X2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZ
IGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iKTsKLSAg
ICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZWNvcmRzVG9QcnVuZS5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gcmVjb3Jkc1RvUHJ1bmUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50
ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Il9zKTsKKyAgICBpZiAoIXJl
Y29yZHNUb1BydW5lIHx8IHJlY29yZHNUb1BydW5lLT5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1
bmUpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gZW50
cmllc1RvUHJ1bmU7Ci0gICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQotICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmdldENv
bHVtbkludCgwKSk7CiAKICAgICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KFdURjo6SXRl
cmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZW50cmllc1RvUHJ1bmUuYmVn
aW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwcnVu
ZUNvbW1hbmQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7Ci0gICAgaWYgKHBy
dW5lQ29tbWFuZC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHBydW5lQ29tbWFu
ZC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIpKTsKKyAgICBpZiAo
IXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNywzNSArMjcwOCwzMyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3Qg
UmVnaXN0cgogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0Nv
cnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YmZyYW1l
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50KG1fZGF0YWJhc2UsIGNvdW50
U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbyhtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVy
eSk7CisgICAgYXV0byBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRv
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3Vu
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CiAgICAgCi0gICAgaWYgKHN1YkZy
YW1lVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVz
dGluZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYg
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVE
b21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuYmlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwgZG9tYWlu
SUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSykgeworICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZElu
dCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklEKHRv
cEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4p
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJpbmRJ
bnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzdWJG
cmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAg
ICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIChzdWJGcmFtZVVuZGVy
VG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLmdldENvbHVtbkludCgwKSA9PSAxKTsKKyAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJU
b3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+Z2V0Q29sdW1uSW50KDApID09IDEpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBlbmRC
b29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wg
ZmxhZykKQEAgLTI4MTIsMjcgKzI4MDEsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJgogICAg
IGlmIChxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAgYXV0byBkYXRhID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKICAgICAKLSAgICBpZiAoZGF0YS5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRhdGEuYmluZEludCgxLCBkb21haW5JRChSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9tYWluKSkudmFsdWUoKSkg
IT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEtPmJpbmRJbnQoMSwgZG9tYWlu
SUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZh
bHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxlZCB0byBwcmVwYXJlIG9y
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChkYXRhLnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgIGlmIChkYXRhLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgICIpOwogICAgIGJ1aWxkZXIu
YXBwZW5kKHRhYmxlTmFtZSk7CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6XG4iKTsKICAg
ICAKLSAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLmdl
dENvbHVtbkludCgwKSk7CisgICAgYXV0byByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICBhcHBlbmROZXh0RW50cnkoYnVpbGRl
ciwgcmVzdWx0KTsKICAgICAKLSAgICB3aGlsZSAoZGF0YS5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRD
b2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewor
ICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29s
dW1uSW50KDApKTsKICAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAg
ICAgfQogfQpAQCAtMjk0NiwyOCArMjkzNCwyNiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklEKQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRp
bmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRp
bmdEYXRlczsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRNb3N0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBP
UkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMTsiX3Mp
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVT
QywgbW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CisgICAg
YXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOworICAgIGF1
dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBE
RVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKKyAgICBhdXRvIGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250
aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87Il9zKTsKIAotICAgIGlmIChj
b3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50
T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKTsKKyAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5n
RGF0ZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKIAotICAgIGlmIChnZXRNb3N0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVz
UGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdE
YXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgwKSwg
Z2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgIG1f
bW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogCi0gICAgaWYgKGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIGR1cmluZyB0aGUgY2FsbCB0byBwcmVwYXJlKCkgd2l0
aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4iLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI5NzYsMjYgKzI5NjIsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKICAg
ICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAt
IDEpCiAgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0Owog
ICAgIGVsc2UgewotICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5i
aW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4g
VGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9zaG9y
dFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRD
b2x1bW5JbnQoMikpOworICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJh
dGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
LCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogCiAg
ICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAt
IDEpCiAgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucmVzZXQo
KTsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZEludCgx
LCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+cmVzZXQoKTsKKyAg
ICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRo
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQg
YmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdE
YXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENv
bHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAg
ICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogfQogCkBAIC0zMDExLDIxICsyOTk3
LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVU
b2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBt
X29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAg
aWYgKHJvd3NUb1BydW5lID4gMCkgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlTGVh
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBP
cGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3Mp
OwotICAgICAgICBpZiAoZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkZWxldGVMZWFzdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVU
RSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERheSBMSU1J
VCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNs
dWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVMZWFzdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhE
YXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIHRvZGF5Lm1vbnRo
KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
YXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRo
LCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICBpZiAoIWluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
YmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMs
IHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTMwNjksMTYg
KzMwNTUsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAgICAgICAgZGF5c0Fnb0luU2Vj
b25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlz
VG9TdWJ0cmFjdDsKICAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpm
cm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsK
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBt
b250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgICAgIGlmIChpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCBkYXRlVG9JbnNlcnQu
eWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQuYmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgZGF0
ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
YXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRo
LCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICAgICAgaWYgKCFpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCBkYXRl
VG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0
ZXJzKCk7CkBAIC0zMjAxLDM2ICszMTg3LDM2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDCiAg
ICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2
YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFs
aWQgcmVwb3J0IHRpbWVzLgogICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
ICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKIAotICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0
YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRp
b24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQu
YmluZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xp
Y2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg4LCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5z
aWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoMTEsIGRlc3RpbmF0
aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRp
b25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNSwgcHJpb3JpdHkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDYsIGF0
dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDcsIHNvdXJj
ZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVU
b2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8g
c291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoMTAsIHNv
dXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRV
UkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVy
eSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0YXRlbWVudCA9IFNR
TGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9u
RGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVu
dC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNr
KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3RhdGVtZW50LmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlu
a2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/
IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg3LCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
KnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQo
KS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg0LCBh
dHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg1LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1w
dHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQo
Niwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1
cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Rh
dGVtZW50LT5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmth
YmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBp
bnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNDM1LDE0ICsz
NDIxLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXR0
cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTCiAKIFN0cmluZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZygp
CiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cyhtX2RhdGFiYXNlLCAiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7Ci0gICAgaWYgKHBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8
IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKKyAgICBp
ZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFz
dXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0
Q29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0Q29s
dW1uSW50KDEpKQorICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5n
ZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0
Q29sdW1uSW50KDEpKQogICAgICAgICByZXR1cm4gIlxuTm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnQgZGF0YS5cbiJfczsKIAogICAgIGF1dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQsIGFsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25zUXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nIl9zKTsKQEAgLTM1NzMsMTEgKzM1NTksMTEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6
UHJpdmF0ZUMKICAgICBpZiAoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgfHwgc291cmNl
RWFybGllc3RUaW1lVG9TZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoY2xlYXJBdHRy
aWJ1dGVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5iaW5kSW50KDIsICpk
ZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGNsZWFy
QXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfcyk7CisgICAgaWYg
KCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0byBzdGVwLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNTg3LDE4
ICszNTczLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1h
cmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBleHBpcmVk
VGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAotICAgIGF1dG8gZWFybGllc3RU
aW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvU291cmNlID0gPyIpOwotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0
aW5hdGlvblN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiA9IG51bGwiKTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNl
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9
ID8iX3MpOworICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51
bGwiX3MpOwogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2VTdGF0ZW1lbnQuYmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoIWVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGVhcmxpZXN0
VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRv
U2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0
YXRlbWVudCB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGlu
ZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggNTIzMjMzZDE4YjA0MDAzZWYzMGQz
MzYzMmNmZTYyZjAyZjI3YTM0OC4uM2E2NWZjY2VmMTg5ZjA3Yzg5MTY1YTljNjIyN2E1Y2FkMTQw
NzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBA
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMg
Y29uc3QgY2hhciBnZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNUIGtleSwgdmFsdWUgRlJP
TSBJdGVtVGFibGUiOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3Ry
aW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07CiAKIFJlZjxMb2Nh
bFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShTdHJpbmcmJiBk
YXRhYmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKQEAgLTk5LDEwICs5OSwxMCBA
QCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQog
ICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxF
Q1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIGF1dG8gcXVlcnkgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1J
VCAxIl9zKTsKIAogICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBq
dXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVt
bkRlY2xhcmVkQXNCbG9iKDApKQorICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNs
YXJlZEFzQmxvYigwKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVhdGUgYSBu
ZXcgdGFibGUgd2l0aCB0aGUgcmlnaHQgdHlwZSwgY29weSBhbGwgdGhlIGRhdGEgb3ZlciB0byBp
dCBhbmQgdGhlbiByZXBsYWNlIHRoZSBuZXcgdGFibGUgd2l0aCB0aGUgb2xkIHRhYmxlLgpAQCAt
MzAyLDE5ICszMDIsMTggQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0Vt
cHR5KCkgY29uc3QKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNU
IENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgIGlmICghcXVlcnkpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRl
bVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX1JPVykgeworICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4g
SXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICByZXR1cm4gIXF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICByZXR1cm4gIXF1
ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9w
ZW5JZkV4aXN0aW5nKCkKQEAgLTMzMCwxNCArMzI5LDE1IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKICAgICAgICAgc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRl
bXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOwogfQogCi1TUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6
dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVl
cnkpIGNvbnN0CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBz
dGF0ZW1lbnQsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0ZW1lbnQg
PSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAg
ICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1f
ZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRl
bWVudE9yRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgeyB9OworICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZhbHVlKCku
bW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVt
ZW50LmdldCgpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGI3ZWYwMzRk
MmE4NmMyNGJkMDRkZjc5NDMxN2NhYmFmYzAzZTc0NmMuLjM5OGRhN2RjZmIyOGRkMzBkMmU2MGE1
MTRkZGU5YjE5ZDU1MzYyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC02Miw3
ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsK
ICAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0gICAgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3Q7Cisg
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50
KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlMaXRlcmFs
IHF1ZXJ5KSBjb25zdDsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKICAgICBtdXRhYmxl
IFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcAppbmRleCBmNDUwNmY4YmQxNDBm
ZDQ5NGMxMTAwYWNmYTQ0NTM0ZDA0YTFlN2RiLi4yNDdjYzIzZTdiYzQ5NDUyNDczYzJhZTY5Mjhj
MDY5MzFjMjg0YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L0ljb25EYXRhYmFzZS5jcHAKQEAgLTY2LDcgKzY2LDggQEAgSWNvbkRhdGFiYXNlOjpJY29uRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNlV3JpdGUgYWxsb3dEYXRhYmFz
ZVcKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJh
c2VWZXJzaW9uTnVtYmVyID0gU1FMaXRlU3RhdGVtZW50KG1fZGIsICJTRUxFQ1QgdmFsdWUgRlJP
TSBJY29uRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdWZXJzaW9uJzsiKS5nZXRDb2x1bW5JbnQo
MCk7CisgICAgICAgIGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnVmVyc2lv
bic7Il9zKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uU3Rh
dGVtZW50ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAg
aWYgKGRhdGFiYXNlVmVyc2lvbk51bWJlciA+IGN1cnJlbnREYXRhYmFzZVZlcnNpb24pIHsKICAg
ICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJEYXRhYmFzZSB2ZXJzaW9uIG51bWJlciAlZCBp
cyBncmVhdGVyIHRoYW4gb3VyIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgJWQgLSBjbG9zaW5nIHRo
ZSBkYXRhYmFzZSB0byBwcmV2ZW50IG92ZXJ3cml0aW5nIG5ld2VyIHZlcnNpb25zIiwKICAgICAg
ICAgICAgICAgICBkYXRhYmFzZVZlcnNpb25OdW1iZXIsIGN1cnJlbnREYXRhYmFzZVZlcnNpb24p
OwpAQCAtODQsNyArODUsNyBAQCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJp
bmcmIHBhdGgsIEFsbG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gUmVkdWNlIHNxbGl0ZSBSQU0gY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgMjAw
MCBwYWdlcyAofjEuNWtCIHBlciBwYWdlKS4gM01CIG9mIGNhY2hlIGZvciBpY29uIGRhdGFiYXNl
IGlzIG92ZXJraWxsLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgIlBSQUdNQSBjYWNo
ZV9zaXplID0gMjAwOyIpLmV4ZWN1dGVDb21tYW5kKCk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNv
bW1hbmQoIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyJfcyk7CiAKICAgICAgICAgaWYgKGFsbG93
RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6OlllcykgewogICAgICAgICAgICAg
bV9wcnVuZVRpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxJY29uRGF0YWJhc2U+PihS
dW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCk7
CkBAIC0xNzUsMTcgKzE3NiwxNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJM
VG9JY29uVVJMTWFwKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGltcG9ydFF1ZXJ5
ID0gbWFrZVN0cmluZygiU0VMRUNUIFBhZ2VVUkwudXJsLCBJY29uSW5mby51cmwsIEljb25JbmZv
LnN0YW1wIEZST00gUGFnZVVSTCBJTk5FUiBKT0lOIEljb25JbmZvIE9OIFBhZ2VVUkwuaWNvbklE
PUljb25JbmZvLmljb25JRCBXSEVSRSBJY29uSW5mby5zdGFtcCA+ICIsIGZsb29yKChXYWxsVGlt
ZTo6bm93KCkgLSBub3RVc2VkSWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnNlY29uZHMoKSksICc7Jyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIGltcG9y
dFF1ZXJ5KTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gcXVlcnkgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoaW1wb3J0UXVlcnkpOworICAgIGlmICgh
cXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBpY29uIHVybCBp
bXBvcnQgcXVlcnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOworICAgIGF1dG8gcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICBM
b2NrSG9sZGVyIGxvY2tIb2xkZXIobV9wYWdlVVJMVG9JY29uVVJMTWFwTG9jayk7CiAgICAgd2hp
bGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1h
cC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uVGV4dCgxKSk7Ci0g
ICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgbV9wYWdlVVJMVG9JY29uVVJM
TWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnktPmdldENvbHVtblRleHQoMSkp
OworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAgIHN0YXJ0UHJ1
bmVUaW1lcigpOwpAQCAtMjE0LDEyICsyMTUsMTIgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5l
VGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX3By
dW5lSWNvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50ID0gbWFr
ZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVS
RSBzdGFtcCA8PSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcnVuZUljb25zU3RhdGVtZW50
ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUg
c3RhbXAgPD0gKD8pOyJfcyk7CisgICAgICAgIGlmICghcHJ1bmVJY29uc1N0YXRlbWVudCkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHBydW5lSWNvbnMgZmFp
bGVkIik7Ci0gICAgICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVu
dCA9IHBydW5lSWNvbnNTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9
CiAKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZmxvb3IoKFdh
bGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNlY29uZHNTaW5jZUVw
b2NoKCkuc2Vjb25kcygpKSkgIT0gU1FMSVRFX09LKSB7CkBAIC0yMzAsOCArMjMxLDggQEAgdm9p
ZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYik7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBpZiAobV9w
cnVuZUljb25zU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgbV9k
Yi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgaWNvbklEIE5PVCBJ
TiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiKTsKLSAgICAgICAgbV9kYi5leGVjdXRl
Q29tbWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1Qg
aWNvbklEIEZST00gSWNvbkluZm8pOyIpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJE
RUxFVEUgRlJPTSBJY29uRGF0YSBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZS
T00gSWNvbkluZm8pOyJfcyk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBG
Uk9NIFBhZ2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25J
bmZvKTsiX3MpOwogICAgIH0KICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnJlc2V0KCk7CiAK
QEAgLTI4NSwxMiArMjg2LDEyIEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6aWNv
bklERm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGJvb2wmIGV4CiAgICAgQVNTRVJU
KG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQp
IHsKLSAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGIsICJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFt
cCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiKTsKLSAgICAgICAgaWYg
KG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICBhdXRvIGljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFw
U3RhdGVtZW50KCJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIElj
b25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWljb25J
REZvckljb25VUkxTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5n
IHN0YXRlbWVudCBpY29uSURGb3JJY29uVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29u
SURGb3JJY29uVVJMU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50
ID0gaWNvbklERm9ySWNvblVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwog
ICAgIH0KIAogICAgIGlmIChtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IGljb25VUkwpICE9IFNRTElURV9PSykgewpAQCAtMzE1LDEyICszMTYsMTIgQEAgYm9vbCBJY29u
RGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwoaW50NjRfdCBpY29uSUQsIGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRh
YmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1l
bnQpIHsKLSAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1
ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmwsIGljb25J
RCkgVkFMVUVTICgoPyksID8pOyIpOwotICAgICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJM
U3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc2V0SWNv
bklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIFBhZ2VVUkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgc2V0SWNvbklERm9yUGFnZVVSTCBmYWlsZWQiKTsK
LSAgICAgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbV9zZXRJY29uSURG
b3JQYWdlVVJMU3RhdGVtZW50ID0gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3NldEljb25JREZvclBhZ2VV
UkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHBhZ2VVUkwpICE9IFNRTElURV9PSwpAQCAtMzQyLDEy
ICszNDMsMTIgQEAgVmVjdG9yPGNoYXI+IEljb25EYXRhYmFzZTo6aWNvbkRhdGEoaW50NjRfdCBp
Y29uSUQpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25EYXRh
U3RhdGVtZW50KSB7Ci0gICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNR
TGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRhdGEg
V0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9pY29uRGF0YVN0
YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25EYXRh
U3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIEljb25EYXRhLmRh
dGEgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFpY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVw
YXJpbmcgc3RhdGVtZW50IGljb25EYXRhIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uRGF0
YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9
CisgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBpY29uRGF0YVN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2ljb25EYXRhU3RhdGVtZW50
LT5iaW5kSW50NjQoMSwgaWNvbklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTM3MCwyMCArMzcxLDIw
IEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6YWRkSWNvbihjb25zdCBTdHJpbmcm
IGljb25VUkwsIGNvbnN0IFZlY3RvcjxjaGFyCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdy
aXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9hZGRJY29uU3Rh
dGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RiLCAiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVF
UyAoPywgMCk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBhZGRJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVw
YXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVF
UyAoPywgMCk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uU3RhdGVtZW50KSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgYWRkSWNvbiBmYWlsZWQiKTsKLSAg
ICAgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9
IGFkZEljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAg
aWYgKCFtX2FkZEljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJTlRPIElj
b25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVFUyAoPywgPyk7Iik7Ci0gICAgICAgIGlmIChtX2Fk
ZEljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBJY29uRGF0YSAoaWNvbklELCBkYXRhKSBWQUxVRVMgKD8sID8pOyJfcyk7CisgICAg
ICAgIGlmICghYWRkSWNvbkRhdGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
UHJlcGFyaW5nIHN0YXRlbWVudCBhZGRJY29uRGF0YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1f
YWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgfQorICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gYWRk
SWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAg
ICBpZiAobV9hZGRJY29uU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBTUUxJVEVf
T0spIHsKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjp1cGRhdGVJY29u
VGltZXN0YW1wKGludDY0X3QgaWNvbklELCBpbnQ2NF90IHRpbWVzdGFtcCkKICAgICBBU1NFUlQo
bV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAg
aWYgKCFtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV91cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIs
ICJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyIpOwotICAg
ICAgICBpZiAobV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGF1dG8gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG1f
ZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAgPSA/IFdI
RVJFIGljb25JRCA9ID87Il9zKTsKKyAgICAgICAgaWYgKCF1cGRhdGVJY29uVGltZXN0YW1wU3Rh
dGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgdXBk
YXRlSWNvblRpbWVzdGFtcCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fdXBkYXRlSWNvblRpbWVz
dGFtcFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KyAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gdXBkYXRlSWNvblRpbWVz
dGFtcFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlm
IChtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB0aW1lc3RhbXAp
ICE9IFNRTElURV9PSyB8fCBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgyLCBpY29uSUQpICE9IFNRTElURV9PSykgewpAQCAtNDM3LDI4ICs0MzgsMjggQEAgdm9pZCBJ
Y29uRGF0YWJhc2U6OmRlbGV0ZUljb24oaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fYWxs
b3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICgh
bV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVQYWdl
VVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwg
IkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Iik7Ci0gICAg
ICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9
IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFn
ZVVSTC5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVQYWdlVVJMc0Zvcklj
b25TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVu
dCBkZWxldGVQYWdlVVJMc0Zvckljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0ZVBh
Z2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBkZWxl
dGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAg
ICB9CiAgICAgaWYgKCFtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVs
ZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwg
IkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiKTsKLSAg
ICAgICAgaWYgKG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgYXV0byBkZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25J
RCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWls
ZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFT
dGF0ZW1lbnQgPSBkZWxldGVJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0
cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNvblN0YXRlbWVudCkgewotICAgICAgICBt
X2RlbGV0ZUljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwg
IkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLmljb25JRCA9ICg/KTsiKTsKLSAg
ICAgICAgaWYgKG1fZGVsZXRlSWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgICAgICBhdXRvIGRlbGV0ZUljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7
Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAg
ICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gZGVsZXRlSWNv
blN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmICht
X2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25JRCkgIT0g
U1FMSVRFX09LCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwCmluZGV4IGNlNWMyOWJhYTU4MDVjYTQyZjQ4ZWYwNTBiODMyZDBjZDVjY2UxMWMuLmNh
ZTA4MmYxM2RjZDM2OGM0ODE5NWJlMzExZjIwYTViNjY0NDhmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0yNzgsOSArMjc4LDkg
QEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgICAgICBh
dXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJP
TSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAgICAgICAgIC8vIHRoaXMgcXVlcnkgaXNuJ3QgZXZl
ciBleGVjdXRlZC4KLSAgICAgICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkp
CisgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyNiw4ICszMjYsOCBAQCB2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZhbHVl
IEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
a2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxv
Y2FsIHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTMzNSwxMCArMzM1LDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0
KCkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7CiAKLSAgICBpbnQgcmVz
dWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAg
IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpdGVtTWFwLnNldChxdWVy
eS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkpOwotICAg
ICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LT5n
ZXRDb2x1bW5UZXh0KDApLCBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKKyAgICAg
ICAgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9ET05FKSB7CkBAIC00MTIsMjcgKzQxMiwyNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVt
cwogCiAgICAgLy8gSWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBp
dGVtcyBvdXQgYmVmb3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBpbi4KICAgICBpZiAoY2xlYXJJ
dGVtcykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVU
RSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIGNsZWFyID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAoIWNsZWFyKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNh
bm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOworICAg
ICAgICBpbnQgcmVzdWx0ID0gY2xlYXItPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxs
IGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPyki
KTsKLSAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGlu
c2VydCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSXRlbVRhYmxl
IFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0KSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBs
b2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgcmVtb3ZlKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUg
V0hFUkUga2V5PT8iKTsKLSAgICBpZiAocmVtb3ZlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICBhdXRvIHJlbW92ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZS
T00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAoIXJlbW92ZSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBjYW5ub3Qg
d3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDQzLDIxICs0NDMsMjEgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBj
bGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRl
IHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7Cisg
ICAgICAgIGF1dG8mIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0
OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgICAgICBxdWVyeS0+
YmluZFRleHQoMSwgaXQtPmtleSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVu
dCBpcyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2
YWx1ZS4KICAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVy
eS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOworICAgICAgICAgICAgcXVlcnktPmJpbmRCbG9iKDIs
IGl0LT52YWx1ZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0ZSBpdGVt
IGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBxdWVyeS5yZXNldCgpOworICAgICAgICBx
dWVyeS0+cmVzZXQoKTsKICAgICB9CiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CkBAIC00
OTksMzEgKzQ5OSwzMyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFz
ZSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IEl0ZW1UYWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1U
YWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1
dG8gY291bnQgPSBbJl0geworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBp
ZiAoIXF1ZXJ5KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3VudCBudW1i
ZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3Rl
cCgpOworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1U
YWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX1JPVykgewotICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGlu
ZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAg
ICAgcmV0dXJuIHF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CisgICAgfSgpOworICAgIGlmIChjb3Vu
dCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGludCBjb3VudCA9IHF1ZXJ5LmdldENv
bHVtbkludCgwKTsKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7
Ci0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgaWYgKFN0b3JhZ2VUcmFja2Vy
Ojp0cmFja2VyKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
ZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCld
IHsKLSAgICAgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdp
bldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9z
eW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwot
ICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUp
KQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBm
aWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9Cisg
ICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
LmlzQWN0aXZlKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlm
aWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0
YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3Ry
aW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFt
ZShtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRh
KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5jcHAKaW5kZXggMDYxMGM5NDZmMmVkZjk4NmViY2E5OGI2YTdkMjFiZjBhOTMzOTY0
Ni4uYzdmMzBjMzA5MTk0NDljZjkxZDBhNWMzMDQ3YzBlNjllMDhiZGZlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBAIC0xODksOCArMTg5
LDggQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkK
ICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKICAgICAgICAgICAgIFNRTGl0ZVRy
YW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAg
ICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9y
aWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAg
ICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQpAQCAtMTk5LDggKzE5OSw4IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNJ
bXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0TXV0ZXgpOwot
ICAgICAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
SVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
KHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAg
ICAgICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApLmlzb2xh
dGVkQ29weSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMzE2LDE2ICszMTYsMTYgQEAgdm9pZCBTdG9y
YWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyLCBjb25zdAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJU
IElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNo
IG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIAotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0
YWJhc2VGaWxlKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKICAgICAKLSAgICBp
ZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKKyAgICBpZiAoc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFi
bGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWko
KS5kYXRhKCkpOwogCiAgICAgewpAQCAtNDA0LDIzICs0MDQsMjMgQEAgdm9pZCBTdG9yYWdlVHJh
Y2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIik7Ci0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBP
cmlnaW5zIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKSkpCisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0
ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7Cisg
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEp
KTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NsaWVudE11
dGV4KTsKICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwor
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDQxLDEy
ICs0NDEsMTIgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQog
ICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIik7Ci0g
ICAgICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
ICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
REVMRVRFIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGFs
bCBvcmlnaW5zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBpZiAoIWRlbGV0
ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2b2lkIFN0b3JhZ2VUcmFj
a2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7
Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVU
RSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iX3MpOworICAgIGlmICghZGVsZXRlU3RhdGVt
ZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Yg
b3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRl
bnRpZmllcik7Ci0gICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewor
ICAgIGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAg
aWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklk
ZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjE0
LDE3ICs2MTQsMTcgQEAgU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhGb3JPcmln
aW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogCiAgICAgU1FMaXRlVHJhbnNhY3Rp
b25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gT3Jp
Z2lucyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHBhdGhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7
CisgICAgaWYgKCFwYXRoU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9Ci0g
ICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpbnQg
cmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgcGF0aFN0YXRlbWVudC0+YmluZFRl
eHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIHJldHVybiBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7Cisg
ICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiB9CiAgICAgCiBsb25n
IGxvbmcgU3RvcmFnZVRyYWNrZXI6OmRpc2tVc2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDgxNTc0N2NlNzQ2Y2QxYTM5NTk0ODI2NGE3Nzg3YjA5YTJjOTg5NTYuLjJhNDIxOTY1MmMx
NWQxNDRkZmQ3MmRkM2IxOWZhYzNjMDc3MWNjODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNS0xMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGlt
aXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ugbm93
IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMgY2hhbmdl
ZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW06Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGRUb0RhdGFiYXNlc1RhYmxlKToKKwogMjAyMS0wNS0x
MyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBG
aWxlU3lzdGVtOjpoYXJkTGlua0NvdW50KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KaW5k
ZXggNjY4MmJmNDU4NjY2MTE1NTNmMTBhMTdlNzJhNzI5ZWNhYTY5NThjNC4uMmM3ZjQ0NGU4YmM4
YWViOTA2YzBiYjkwYTY5Yjk1NTNjNzE4MTMxNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3Qu
bW0KQEAgLTY2LDEyICs2NiwxMiBAQCBzdGF0aWMgdm9pZCBhZGRUb0RhdGFiYXNlc1RhYmxlKGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBjb25zdCBTZWN1cml0eU9yaWdpbgogICAgIFNRTGl0
ZURhdGFiYXNlIGRhdGFiYXNlOwogICAgIGRhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBhZGREYXRhYmFzZVN0YXRlbWVudChkYXRhYmFzZSwgIklOU0VS
VCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyIp
OwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LnByZXBhcmUoKTsKLSAgICBhZGREYXRhYmFzZVN0
YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIGFk
ZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFtZSk7Ci0gICAgYWRk
RGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMywgbmV3RGF0YWJhc2VQYXRoKTsKLSAgICBhZGRE
YXRhYmFzZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgIGlmIChhdXRvIGFkZERhdGFi
YXNlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gRGF0
YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Il9zKSkgeworICAg
ICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5l
d0RhdGFiYXNlTmFtZSk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgz
LCBuZXdEYXRhYmFzZVBhdGgpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+ZXhlY3V0
ZUNvbW1hbmQoKTsKKyAgICB9CiAKICAgICBkYXRhYmFzZS5jbG9zZSgpOwogfQo=
</data>
<flag name="commit-queue"
          id="449547"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428592</attachid>
            <date>2021-05-13 18:50:36 -0700</date>
            <delta_ts>2021-05-13 20:50:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513185035.patch</filename>
            <type>text/plain</type>
            <size>269215</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3MmQ3MjVjNzQxODM3YmVhZmYyN2Zl
Nzk1ZWI3NDIyZDg3ZjdhMDYuLmRmMDZmOTY3ZGY2OWQ2YWE1OGNlNDIyMDAyNWY5ZWU1ZDcyNmNm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlu
a0NvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDZkN2Q2NTdmOWExNmUzYmRhOWUwYmU0MDQ1NGI3ZGIx
ODE4NDcxLi5lYTllZTA2MzkzZTNjNmM0Y2MwOTRhOWYxNzZiZDAzNTVkYzIxMGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNy
ZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBUaGUgU1FMaXRlU3RhdGVtZW50IGNv
bnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2UgbmV2ZXIgaGF2ZSBhCisgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVuICJwcmVwYXJlZCIuIE9ubHkgdGhl
IFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBjb25zdHJ1Y3QgU1FMaXRlU3RhdGVt
ZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBhc3MKKyAgICAgICAgICBhIFNRTGl0
ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgU1FMaXRlU3RhdGVtZW50
IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFORCBwcmVwYXJlIGEgU1FMaXRlU3Rh
dGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisgICAgICAgICAgU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEgaGVhcCBvbmUuIFRoZXNlIGZ1bmN0
aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+IHR5cGUgc28gdGhleSB3aWxsIGVp
dGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9yIGFu
IHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAgICAgIC0gVGhlIHByZXBhcmUqU3Rh
dGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcgYWxsb2NhdGlvbnMgaW4gbW9zdAor
ICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMgdGFraW5nIGluIHRoZSBxdWVyeSBh
cyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBmaW5hbGl6ZSgpIGZ1bmN0aW9uIG9u
IFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cworICAgICAgICAgIGFy
ZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0
ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlvbnMuIFRoZSBTUUxpdGVTdGF0ZW1l
bnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVtZW50CisgICAgICAgICAgc28gdXNl
cnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0ZW1lbnQgaWYgdGhleSBuZWVkIHRo
ZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBhdCBhIGNlcnRhaW4gcG9pbnQgKGUu
Zy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAgICAgIC0gRHJvcCB0aGUgcHJlcGFy
ZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1lbnQgbWVtYmVyIGZ1bmN0aW9ucyBu
b3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBhcmUgYWx3YXlzIHByZXBhcmVkLgor
ICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5IGFzIGEgU3RyaW5nIGRhdGEgbWVt
YmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAgICAgICBUaGlzIGlzIG5vIGxvbmdl
ciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUgcHJlcGFyZSBzdGVwIGFmdGVyIHRo
ZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtlcyB0aGUgU1FMaXRlU3RhdGVtZW50
IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Y3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVG
b3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpyZXNldEFuZFJlYmluZFByZUlu
ZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRW
YWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVO
YW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5v
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFu
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnF1b3RhTm9Mb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1wdHkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRp
bmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNlYXJjaENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERvbWFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZXhl
Y3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJldHVybnNB
dExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0YWJs
ZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZE51bGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVu
dURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OnZlcmlm
eVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmV4
ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmNy
ZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisKIDIwMjEtMDUtMTMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBXazIgXSBtZWRp
YS9tZWRpYS1mcmFnbWVudHMvVEMwMDUxLmh0bWwgaXMgZmxha2V5IGNyYXNoaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MjJmMTI1OWM4NjE5N2Y4YTdlZTg4NjQ3NGE0ZjMwOWQzM2VmMjEuLmVmZTRmYjZmZjUy
OGI1MDc4OWM0NWI3YWRjMGFkZDVhOWQwNmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0
ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFN0
b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKToK
KyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0
OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxldGVJY29uKToKKwog
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBy
b2Nlc3Mgc3VzcGVuc2lvbiBtYXkgYmUgZGVsYXllZCBieSB1cCB0byA1IHNlY29uZHMgYWZ0ZXIg
dGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkYXRhYmFzZSBhY3Rpdml0eQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBmYmI0MWUyNmFhMDFlMDZiMzQ4YjJmZTM5ODc5ZWFjZjM3NDBkMjdhLi40MjRiYmFk
MDk1MGIxNmYwMmVjNGVkY2Y0YTc3ZDRhNzZiZjI5NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNr
ZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IFdURjo6RmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
aXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2MGNm
ZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNmMjM3
YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVSZWYo
VCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVybiAq
bV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxj
bGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1
ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBj
bGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDogbV9y
ZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUuLmNj
ZDYzYjNkZmFiNGEzYTY5ZWFhZjkyODFkZWE2NDNlZThmZmVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2No
ZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVt
YTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAog
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM1
OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgsMTMg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiAK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2Ig
ZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVu
IGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM5
MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBp
ZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hl
bWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0Mjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
VGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNv
cmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcgKzQ1
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVj
b3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyArNTgz
LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50
TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0
YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxp
dGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVF
UyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIo
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNpb25z
IGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBkb2Vz
bid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgICAg
IC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFi
YXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFi
YXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBz
cWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUlu
Zm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVS
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJvb2wg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZShj
b25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9i
amVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZv
OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4SW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsK
LSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1h
cC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8gX1Rl
bXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgICAg
IGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAgICAg
fQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAi
U0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3JlUmVj
b3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFs
dWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5nZXQo
eyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtl
eUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZl
cik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJl
Y29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7
Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNv
bnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYgKHNx
bC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRoZSBp
bmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVz
JykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDAw
LDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVpbnQ2
NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNp
b24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9l
cyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNp
b24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwxNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9
IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBr
ZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0g
c3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5h
bWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBr
ZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBr
ZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmpl
Y3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtl
eVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDExICsx
MDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZN
b3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTEw
NTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwg
bmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJ
bmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBG
Uk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9t
IHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAg
ICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKICAg
ICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4S2V5
UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wg
bXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVuaXF1
ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0g
c3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBk
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQpOwog
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8
IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSArMTE2
MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUn
OyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3MpOwor
ICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJl
IHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7
Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJf
cyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENvbHVt
blRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRv
ZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJz
aW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQsMTAg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaW5m
by5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAgICAg
IG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVlID0g
PyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJp
bmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAoIXNx
bAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5l
d1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMTcsMTIgKzMwMjEsMTIgQEAgdm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3Jl
ZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmls
ZXM7Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0
byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJP
TSBCbG9iRmlsZXM7Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQo
c3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwu
c3RlcCgpOworICAgICAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0RPTkUpCkBAIC0zMDYxLDE0ICszMDY1LDEzIEBAIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhCiAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQog
Ci0gICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7
CisgICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQog
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAg
IGlmIChtX3NxbGl0ZURCKSB7Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURC
LCBzdGF0ZW1lbnQpOwotICAgICAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0
PHNpemVfdD4oc3FsKV0tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2Nh
Y2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAg
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3RhdGVtZW50KTsKKyAgICAgICAgaWYgKHNxbFN0YXRlbWVudCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gc3FsU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0uZ2V0KCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggYzJjZWQ4NDE5MzAw
YjVhOGM1OGE4ZTg0MDIyMmYyNTU2MTI1YjM1Yy4uZjI4OTA4Y2E1MTVlN2I5YjJmZmY4NDg4YzAw
NmQyYjBlODFiYmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVTUUxpdGVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRVcHBlcktleS5pc051bGwoKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOwogCi0gICAgbV9zdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKSwgc3FsKTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChwcmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBtX3N0YXRlbWVudCA9IHN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogCiAgICAgcmV0dXJuIGJpbmRBcmd1bWVudHMo
KTsKIH0KQEAgLTM0MSwxMiArMzQxLDEyIEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpyZXNldEFu
ZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkoKQogCiAgICAgYXV0byYgZGF0YWJh
c2UgPSBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpOwogICAg
IGlmICghbV9wcmVJbmRleFN0YXRlbWVudCkgewotICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCBidWlsZFByZUluZGV4U3Rh
dGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcmVJbmRleFN0
YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKKyAgICAgICAgaWYgKCFwcmVJbmRleFN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBwcmUgc3RhdGVt
ZW50IC0gJyVzJyIsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50ID0gcHJlSW5k
ZXhTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVJbmRleFN0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTU4OCw5ICs1
ODgsOCBAQCBTUUxpdGVJREJDdXJzb3I6OkZldGNoUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50
ZXJuYWxGZXRjaE5leHRSZWNvcmQoU1FMaXRlQ3VycwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50IHx8IG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5k
IG9iamVjdFN0b3JlSUQgPSA/OyIpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0
byBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhU
KSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAppbmRleCBhYjQ3ODI2YzgzZWJiNThiNzdiNGE2MTUyNzEzOTIxMzNjZjg0
MGU2Li5lNzRlMjhmNWI5ZTVmNzlmYzVkNWNkMGNlNzY2Y2EwZGRmMWJmNDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTEzLDE4
ICsxMTMsMTUgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
bWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHZhbHVlKTsKIAotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0
YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNCwxNyArMTMxLDE1IEBA
IHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zCiAKIHN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3Vs
dEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHN0YXRlbWVudC5lcnJvcigpLCBxdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTcxNCw4ICs3MDksOCBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gc3FsaXRlRGF0YWJhc2UoKS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CkBAIC03MjMsOCArNzE4LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFt
ZXM7CiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAobmFtZSAhPSB1bnF1YWxpZmllZEluZm9UYWJsZU5hbWUp
CiAgICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChuYW1lKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
aW5kZXggMGFkM2I0ODAyM2YxZjk2ZWFiOWJjZjRmNzcyZGU0OTMzMDdlYmY4NC4uYjdlMTdhODc0
ZDk3MGJlNmJjNWQzMTk2NzYzMWIyYmYzYTNjZDQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjM1LDE1
ICsyMzUsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2Nr
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3Jp
Z2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCkBAIC0yNTYsMTUgKzI1NiwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzRW50cnlGb3JEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0YWJhc2UuIFNldCB1cCBh
IHF1ZXJ5IHRvIGFzayBmb3IgdGhlIGRiIG9mIGludGVyZXN0OgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAotICAgIHJldHVybiBzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1c7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0
aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87
Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICgh
Y3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUg
JXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
RmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3Rz
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVu
dC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZp
bGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0g
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwor
ICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkp
OwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNR
TElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9N
IERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZE
b2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
IApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFz
ZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdp
biwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5h
bWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewot
ICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
Y2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRh
YmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGlu
IHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBp
cyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIg
Y29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQot
ICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNl
dCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBu
ZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMg
Zm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIK
KyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRl
cm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQn
cyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAg
ICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9
PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5h
bWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAg
IHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0
YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVu
dC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3
MSwxNSArNjczLDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3Rh
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luCiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBx
dW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBsCiAK
ICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2lu
ICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5l
d09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9
PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAgICBpZiAoIWVy
cm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
Ci0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
c3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRp
bCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21t
YW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBk
YXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIG9yaWdpblN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBv
cmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0
YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwot
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAg
ICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyAr
MTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Ug
JXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
OTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRh
dGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
ID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmls
ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0x
MjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZp
bGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQg
d2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3Jp
dGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9
IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsi
X3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVk
MS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAt
MTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRi
KQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlm
eSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1l
bnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHBy
ZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBj
b3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQu
YXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAi
aW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0
ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90
IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUs
IHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVt
YmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkg
bWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBp
ZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkg
eworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRT
ZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0
Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1l
bnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5j
b2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVt
blZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYjA4MDMwYzliNDFmMjcxZTdhYTMyN2MzYWU0
ZWM0ZjYzMGE3MDcyMS4uNWYwNGE3MmZjYjRjN2ExZGQ5MzkyMjAwOTM0NTFiNTM3ODgzZTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJM
JiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBu
ZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAg
ICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25z
dCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3Jh
Z2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIp
KTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICBncm91cC5z
ZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3Vw
OwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
ZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RI
YXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVy
bCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNo
ZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
aW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1l
bW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAg
IC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhl
IG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcg
VVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2Vz
dENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFu
aWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkp
KTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5n
KCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25z
dCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAg
IGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0
b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
KSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNo
ZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNl
dChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3Jk
IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBi
ZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhp
c3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3Rh
IG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVv
dGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hF
UkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhl
IHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZh
dWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJv
b2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
cXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAs
MTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2Fn
ZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmln
aW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAg
IC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8g
YSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2lu
ID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hl
R3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBD
YWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1c2FnZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4Nywy
MyArNDg3LDIzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFp
bmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAgICAgICAgICAgICAgICAgIiBX
SEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDAp
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVy
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0
aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZv
ciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9m
Q2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51
bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1h
aW5pbmdTaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVt
YWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMg
U0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRh
KCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0
KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50
KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3Rh
dGVtZW50LnZhbHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01B
IHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VE
KHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkp
ID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1p
dCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0
b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBA
IC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5
IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVz
dFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwg
bWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RV
UkwoKSkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQo
c3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAg
LTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91
cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNh
Y2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFs
bG93bGlzdCgpOwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOwor
ICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUg
b25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAg
ICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAg
ICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFs
bGJhY2tVUkxzKCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFs
bGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkws
IGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFy
ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwg
Y2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQs
MTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwg
cGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxl
U3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRh
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5n
IHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2Ug
ZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJl
LCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgx
MywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAg
ICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0Rmls
ZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsK
LSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxv
YigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwor
ICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQt
PmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2gg
d2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0Mywz
NiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhl
YWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAg
ICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRv
IHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVy
cywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywg
PywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
YXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBj
YWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2Ug
YWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICBy
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRh
SWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291
cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Cisg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVy
cyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChy
ZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxh
c3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hl
IGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/
LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMg
KD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFn
ZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVt
ZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
QEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJU
KHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRh
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
Q2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRy
eVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VU
IHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwg
cmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNl
LT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUo
KSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2
LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBB
IHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBz
aXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYg
KCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6
ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEz
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwot
ICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGlu
c2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3
ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
Q2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1
cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlv
bkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2
LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4g
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7
CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29k
ZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5O
RVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNv
dXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVz
Q29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVz
b3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMg
SU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVS
ZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAg
IGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2Fj
aGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURp
cmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0Owot
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2Fj
aGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwot
ICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7Cisg
ICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAg
ICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAt
MTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgz
KTsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAot
ICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7
CisgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
NSk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAog
ICAgICAgICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
dXJsLCByZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsx
MTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBj
YWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAg
YWxsb3dsaXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBW
ZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVS
TCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgYWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0
KGFsbG93bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxh
Zy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3Rz
IFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAg
Ci0gICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJl
c3VsdCA9IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hl
IG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVl
c3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBj
YWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBt
YW55IHJvd3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8g
TG9hZCBmYWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFj
a1VSTHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFs
bGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBzdG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cp
IAotICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZh
bGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tT
dGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkp
OwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0
YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hl
cyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRs
eSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5
IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
X3MpOworICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1l
bnQpOworICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAg
ICAgfQpAQCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hl
R3JvdXBzIik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0g
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMu
YXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxl
IChzZWxlY3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVy
bHM7CiB9CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAg
aWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZl
c3RVUkwpOworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAg
ICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNh
Y2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdI
RVJFIGNhY2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdy
b3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwot
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVt
ZW50KTsKKyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3Rh
dGVtZW50LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDEx
LDIwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBp
biBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVS
ZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0
aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAg
ICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENh
Y2hlUmVzb3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldI
RVJFIChTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURh
dGEucGF0aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAg
ICAKLSAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAo
IXNlbGVjdFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhz
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNR
TElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSBzZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgp
ID09IFNRTElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0
ZWRDYWNoZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEs
IGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgcGF0
aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOwog
ICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUgPSAwOwogICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCAyNDI1ZjgzZDcy
NjI2ZTBlNTBkZmM2YzZjYjk1MDY3ZjA2ZjU3NWY1Li41ZmU5NzkyY2JlNzc1ODYxNWZiZDM0MzZm
NjAzM2Q4ODA4NWMxYWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKQEAgLTE4MSw4ICsxODEsNiBAQCBib29sIENvb2tp
ZUphckRCOjpvcGVuRGF0YWJhc2UoKQogdm9pZCBDb29raWVKYXJEQjo6Y2xvc2VEYXRhYmFzZSgp
CiB7CiAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzdGF0ZW1lbnQgOiBtX3N0YXRlbWVudHMpCi0gICAgICAgICAgICBzdGF0ZW1lbnQudmFs
dWUuZ2V0KCktPmZpbmFsaXplKCk7CiAgICAgICAgIG1fc3RhdGVtZW50cy5jbGVhcigpOwogICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CiAgICAgfQpAQCAtMTkzLDcgKzE5MSw4IEBAIHZvaWQg
Q29va2llSmFyREI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGlmIChpc09uTWVtb3J5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92
ZXJzaW9uIl9zKTsKKyAgICBpbnQgdmVyc2lvbiA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI3MywyNSArMjcyLDI1IEBAIGJvb2wgQ29va2llSmFyREI6OmNo
ZWNrRGF0YWJhc2VWYWxpZGl0eSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJD
b29raWUiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGlu
dGVncml0eShtX2RhdGFiYXNlLCAiUFJBR01BIHF1aWNrX2NoZWNrOyIpOwotICAgIGlmIChpbnRl
Z3JpdHkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW50ZWdyaXR5ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgcXVpY2tfY2hlY2s7Il9zKTsKKyAgICBp
ZiAoIWludGVncml0eSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlIGRh
dGFiYXNlIGludGVncml0eSBjaGVjayIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAgIGludCByZXN1bHRD
b2RlID0gaW50ZWdyaXR5LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMSVRFX1JP
VykgewogICAgICAgICBMT0dfRVJST1IoIkludGVncml0eSBxdWlja19jaGVjayBzdGVwIHJldHVy
bmVkICVkIiwgcmVzdWx0Q29kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBpbnQgY29sdW1ucyA9IGludGVncml0eS5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2x1bW5z
ID0gaW50ZWdyaXR5LT5jb2x1bW5Db3VudCgpOwogICAgIGlmIChjb2x1bW5zICE9IDEpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJSZWNlaXZlZCAlaSBjb2x1bW5zIHBlcmZvcm1pbmcgaW50ZWdyaXR5
IGNoZWNrLCBzaG91bGQgYmUgMSIsIGNvbHVtbnMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHkuZ2V0Q29sdW1uVGV4dCgw
KTsKKyAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS0+Z2V0Q29sdW1uVGV4dCgwKTsK
IAogICAgIGlmIChyZXN1bHRUZXh0ICE9ICJvayIpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb29r
aWUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCAtICVzIiwgcmVzdWx0VGV4dC5hc2Np
aSgpLmRhdGEoKSk7CkBAIC0zODYsMjAgKzM4NSwxNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2ll
Pj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dAogCiAgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0VXJs
IH07CiAKLSAgICBjb25zdCBTdHJpbmcgc3FsID0KLSAgICAgICAgIlNFTEVDVCBuYW1lLCB2YWx1
ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00g
Q29va2llIFdIRVJFICJcCisgICAgYXV0byBwc3RtdCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5
LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUgV0hFUkUgIlwKICAgICAgICAgIihOT1QgKChz
ZXNzaW9uID0gMCkgQU5EIChleHBpcmVzIDwgPykpKSIKICAgICAgICAgIkFORCAoaHR0cG9ubHkg
PSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBodHRwb25seSkpICJcCiAgICAgICAgICJBTkQgKHNl
Y3VyZSA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlY3VyZSkpICJcCiAgICAgICAgICJBTkQg
KHNlc3Npb24gPSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBzZXNzaW9uKSkgIlwKICAgICAgICAg
IkFORCAoKGRvbWFpbiA9ID8pIE9SIChkb21haW4gR0xPQiA/KSkgIlwKLSAgICAgICAgIk9SREVS
IEJZIGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCI7Ci0KLSAgICBhdXRvIHBzdG10ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CisgICAgICAgICJP
UkRFUiBCWSBsZW5ndGgocGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiX3MpOwogICAgIGlmICghcHN0
bXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBwc3RtdC0+cHJlcGFyZSgp
OwogICAgIHBzdG10LT5iaW5kSW50NjQoMSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVw
b2NoKCkubWlsbGlzZWNvbmRzKCkpOwogICAgIHBzdG10LT5iaW5kSW50KDIsIGh0dHBPbmx5ID8g
Kmh0dHBPbmx5IDogLTEpOwogICAgIHBzdG10LT5iaW5kSW50KDMsIHNlY3VyZSA/ICpzZWN1cmUg
OiAtMSk7CkBAIC00MTEsOSArNDA2LDYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENvb2tp
ZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKICAgICBl
bHNlCiAgICAgICAgIHBzdG10LT5iaW5kVGV4dCg2LCBTdHJpbmcoIiouIikgKyByZWdpc3RyYWJs
ZURvbWFpbi5zdHJpbmcoKSk7CiAKLSAgICBpZiAoIXBzdG10KQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCiAgICAgVmVjdG9yPENvb2tpZT4gcmVzdWx0czsKIAogICAgIHdoaWxlIChw
c3RtdC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKQEAgLTQ1Myw3ICs0NDUsNiBAQCBPcHRpb25h
bDxWZWN0b3I8Q29va2llPj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdAogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IGNvb2tpZVNlc3Npb247
CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CiAgICAgfQotICAgIHBz
dG10LT5maW5hbGl6ZSgpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC00NjMsMTEgKzQ1
NCwxMSBAQCBWZWN0b3I8Q29va2llPiBDb29raWVKYXJEQjo6Z2V0QWxsQ29va2llcygpCiAgICAg
VmVjdG9yPENvb2tpZT4gcmVzdWx0OwogICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nIHNx
bCA9ICJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHks
IHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSJfczsKLSAgICBhdXRvIHBzdG10ID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CisKKyAgICBhdXRvIHBzdG10
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFp
biwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSJf
cyk7CiAgICAgaWYgKCFwc3RtdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBwc3RtdC0+
cHJlcGFyZSgpOworCiAgICAgd2hpbGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewog
ICAgICAgICBDb29raWUgY29va2llOwogICAgICAgICBjb29raWUubmFtZSA9IHBzdG10LT5nZXRD
b2x1bW5UZXh0KDApOwpAQCAtNDgyLDcgKzQ3Myw2IEBAIFZlY3RvcjxDb29raWU+IENvb2tpZUph
ckRCOjpnZXRBbGxDb29raWVzKCkKICAgICAgICAgY29va2llLnNlc3Npb24gPSAocHN0bXQtPmdl
dENvbHVtbkludCg3KSA9PSAxKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvb2tp
ZSkpOwogICAgIH0KLSAgICBwc3RtdC0+ZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC01NzEsMTYgKzU2MSwxNSBAQCBib29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJgogCiBIYXNo
U2V0PFN0cmluZz4gQ29va2llSmFyREI6OmFsbERvbWFpbnMoKQogewotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7Ci0gICAg
c3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChTRUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zOwot
ICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0
byBkb21haW4gPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoc3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIGRvbWFpbiA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgZG9tYWlucy5hZGQoZG9tYWluKTsKICAg
ICB9Ci0KLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKICAgICByZXR1cm4gZG9tYWluczsKIH0K
IApAQCAtNjM3LDEwICs2MjYsOSBAQCBib29sIENvb2tpZUphckRCOjpkZWxldGVBbGxDb29raWVz
KCkKIAogdm9pZCBDb29raWVKYXJEQjo6Y3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJp
bmcmIHNxbCkKIHsKLSAgICBhdXRvIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihtX2RhdGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnByZXBhcmUo
KTsKLSAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAgbV9zdGF0
ZW1lbnRzLmFkZChzcWwsIFdURk1vdmUoc3RhdGVtZW50KSk7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7CisgICAgQVNTRVJUKHN0YXRl
bWVudCk7CisgICAgbV9zdGF0ZW1lbnRzLmFkZChzcWwsIHN0YXRlbWVudC52YWx1ZSgpLm1vdmVU
b1VuaXF1ZVB0cigpKTsKIH0KIAogU1FMaXRlU3RhdGVtZW50JiBDb29raWVKYXJEQjo6cHJlcGFy
ZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCkBAIC02NTMsMTAgKzY0MSwxMyBAQCBTUUxp
dGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHNxbCkKIAogYm9vbCBDb29raWVKYXJEQjo6ZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmIHNxbCkK
IHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAg
aW50IHJldCA9IHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpOwotICAgIHN0YXRlbWVudC5maW5h
bGl6ZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KHNxbCk7CisgICAgaWYgKCFzdGF0ZW1lbnQgJiYgIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0
ZW1lbnQuZXJyb3IoKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSAl
cyBlcnJvcjogJXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCisgICAgaW50IHJldCA9IHN0YXRl
bWVudC0+c3RlcCgpOwogICAgIGlmICghY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSAlcyBlcnJvcjogJXMiLCBzcWwuYXNj
aWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cAppbmRleCBjMjM5YjQ0MjBiMzI1YjAwNjRjNGY2YWI2OWIxYjgxYjdhMGFkN2JmLi5iNmRlMzFk
MTJjOWE3MGY3MDFjMzA2NDkxNWRjYjc4NTE3MzM2MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RA
cmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBT
UUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBPcGVuTW9kZSBvcGVu
TW9kZSkKIAogICAgIHsKICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0Nv
dW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudCgq
dGhpcywgIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykuZXhlY3V0ZUNvbW1hbmQoKSkK
KyAgICAgICAgaWYgKCFleGVjdXRlQ29tbWFuZCgiUFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7
Il9zKSkKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBz
ZXQgdGVtcF9zdG9yZSB0byBtZW1vcnkiKTsKICAgICB9CiAKQEAgLTE5NywxMCArMTk3LDEwIEBA
IHZvaWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpvdXJuYWxNb2RlKCkKIHsKICAgICBtX3VzZVdB
TCA9IHRydWU7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgd2FsU3RhdGVtZW50KCp0
aGlzLCAiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKLSAgICAgICAgaWYgKHdhbFN0YXRl
bWVudC5wcmVwYXJlQW5kU3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byB3YWxT
dGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3Mp
OworICAgICAgICBpZiAod2FsU3RhdGVtZW50ICYmIHdhbFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBTdHJpbmcgbW9kZSA9IHdh
bFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3
YWxTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ3YWwiKSkKICAgICAgICAgICAgICAgICBMT0df
RVJST1IoImpvdXJuYWxfbW9kZSBvZiBkYXRhYmFzZSBzaG91bGQgYmUgJ1dBTCcsIGJ1dCBpcyAn
JXMnIiwgbW9kZS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgpAQCAtMjEwLDkgKzIxMCw5IEBAIHZv
aWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpvdXJuYWxNb2RlKCkKIAogICAgIHsKICAgICAgICAg
U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVy
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2hlY2twb2ludFN0YXRlbWVudCgqdGhpcywgIlBS
QUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSkiX3MpOwotICAgICAgICBpZiAoY2hlY2twb2lu
dFN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAg
IGlmIChjaGVja3BvaW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSkKKyAgICAgICAgYXV0byBj
aGVja3BvaW50U3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHdhbF9jaGVja3Bv
aW50KFRSVU5DQVRFKSJfcyk7CisgICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVtZW50ICYmIGNo
ZWNrcG9pbnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBp
ZiAoY2hlY2twb2ludFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKQogICAgICAgICAgICAgICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZSBkYXRhYmFzZSBjaGVja3BvaW50IGlzIGJsb2NrZWQi
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFz
ZSBmYWlsZWQgdG8gY2hlY2twb2ludDogJXMiLCBsYXN0RXJyb3JNc2coKSk7CkBAIC0yNzIsOCAr
MjcyLDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6bWF4aW11bVNpemUoKQogICAgIHsKICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJs
ZUF1dGhvcml6ZXIoZmFsc2UpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0
aGlzLCAiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKLSAgICAgICAgbWF4UGFnZUNvdW50ID0g
c3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHBy
ZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCJfcyk7CisgICAgICAgIG1heFBh
Z2VDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwog
ICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMjkzLDkgKzI5Myw4
IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldE1heGltdW1TaXplKGludDY0X3Qgc2l6ZSkKICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICBlbmFibGVBdXRob3Jp
emVyKGZhbHNlKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsIG1ha2VT
dHJpbmcoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOwotICAg
IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X1JPVykKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygi
UFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50KSk7CisgICAgaWYgKCFz
dGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gc2V0IG1heGltdW0gc2l6ZSBvZiBkYXRhYmFzZSB0byAlbGxpIGJ5
dGVzIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzaXplKSk7CiAKICAgICBlbmFibGVBdXRob3Jp
emVyKHRydWUpOwpAQCAtMzEwLDggKzMwOSw4IEBAIGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNp
emUoKQogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAg
ICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7Ci0gICAgICAgIG1f
cGFnZVNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgICAgICBhdXRvIHN0YXRl
bWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBwYWdlX3NpemUiX3MpOworICAgICAgICBt
X3BhZ2VTaXplID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwog
ICAgICAgICAKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CkBAIC0zMjcs
OCArMzI2LDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSgpCiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVB
dXRob3JpemVyKGZhbHNlKTsKICAgICAgICAgLy8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFk
ZGVkIGluIFNRTGl0ZSAzLjQuMS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgq
dGhpcywgIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7Ci0gICAgICAgIGZyZWVsaXN0Q291bnQg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
cHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKKyAgICAgICAgZnJl
ZWxpc3RDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAw
OwogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMzQyLDggKzM0
MSw4IEBAIGludDY0X3QgU1FMaXRlRGF0YWJhc2U6OnRvdGFsU2l6ZSgpCiAgICAgewogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0
aG9yaXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMs
ICJQUkFHTUEgcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVt
ZW50KCJQUkFHTUEgcGFnZV9jb3VudCJfcyk7CisgICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVu
dCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwogICAgICAgICBlbmFibGVBdXRo
b3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMzcxLDE0ICszNzAsMjIgQEAgdm9pZCBTUUxpdGVE
YXRhYmFzZTo6c2V0QnVzeUhhbmRsZXIoaW50KCpoYW5kbGVyKSh2b2lkKiwgaW50KSkKICAgICAg
ICAgTE9HKFNRTERhdGFiYXNlLCAiQnVzeSBoYW5kbGVyIHNldCBvbiBub24tb3BlbiBkYXRhYmFz
ZSIpOwogfQogCi1ib29sIFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJp
bmcmIHNxbCkKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgcXVlcnkpCiB7Ci0gICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5leGVj
dXRlQ29tbWFuZCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVy
eSk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7
Cit9CisKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKK3sKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwor
ICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogfQog
CiBib29sIFNRTGl0ZURhdGFiYXNlOjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJp
bmcmIHNxbCkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWwpLnJldHVy
bnNBdExlYXN0T25lUmVzdWx0KCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVt
ZW50KHNxbCk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPnJldHVybnNBdExl
YXN0T25lUmVzdWx0KCk7CiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKGNv
bnN0IFN0cmluZyYgdGFibGVuYW1lKQpAQCAtMzg2LDE4ICszOTMsMTUgQEAgYm9vbCBTUUxpdGVE
YXRhYmFzZTo6dGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJiB0YWJsZW5hbWUpCiAgICAgaWYgKCFp
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIHN0YXRlbWVudCA9
ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5E
IG5hbWUgPSAnIiArIHRhYmxlbmFtZSArICInOyI7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCp0aGlzLCBzdGF0ZW1lbnQpOwotICAgIHNxbC5wcmVwYXJlKCk7Ci0gICAgcmV0dXJuIHNxbC5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBB
TkQgbmFtZSA9ICciICsgdGFibGVuYW1lICsgIic7Iik7CisgICAgcmV0dXJuIHN0YXRlbWVudCAm
JiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwogfQogCiB2b2lkIFNRTGl0ZURhdGFi
YXNlOjpjbGVhckFsbFRhYmxlcygpCiB7Ci0gICAgU3RyaW5nIHF1ZXJ5ID0gIlNFTEVDVCBuYW1l
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Il9zOwogICAgIFZlY3RvcjxT
dHJpbmc+IHRhYmxlczsKLSAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudCgqdGhpcywgcXVlcnkpLnJl
dHVyblRleHRSZXN1bHRzKDAsIHRhYmxlcykpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0
YWJsZSc7Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCAhc3RhdGVtZW50LT5yZXR1cm5UZXh0
UmVzdWx0cygwLCB0YWJsZXMpKSB7CiAgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlVuYWJsZSB0
byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmcm9tIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC01ODMsMTAgKzU4NywxMCBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjppc0F1
dG9Db21taXRPbigpIGNvbnN0CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVu
dGFsQXV0b1ZhY3V1bSgpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywg
IlBSQUdNQSBhdXRvX3ZhY3V1bSJfcyk7Ci0gICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCgwKTsKKyAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSAwOworICAgIGlm
IChhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBhdXRvX3ZhY3V1bSJf
cykpCisgICAgICAgIGF1dG9WYWN1dW1Nb2RlID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7
CiAgICAgaW50IGVycm9yID0gbGFzdEVycm9yKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7
CiAKICAgICAvLyBDaGVjayBpZiB3ZSBnb3QgYW4gZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGdldCB0
aGUgdmFsdWUgb2YgdGhlIGF1dG9fdmFjdXVtIGZsYWcuCiAgICAgLy8gSWYgd2UgZ290IGEgU1FM
SVRFX0JVU1kgZXJyb3IsIHRoZW4gdGhlcmUncyBwcm9iYWJseSBhbm90aGVyIHRyYW5zYWN0aW9u
IGluCkBAIC02NDMsNCArNjQ3LDcyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnJlbGVhc2VNZW1v
cnkoKQogICAgIHNxbGl0ZTNfZGJfcmVsZWFzZV9tZW1vcnkobV9kYik7CiB9CiAKK3N0YXRpYyBF
eHBlY3RlZDxzcWxpdGUzX3N0bXQqLCBpbnQ+IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQo
U1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBxdWVyeSwgc2l6ZV90IHF1ZXJ5
TGVuZ3RoKQoreworICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKGRhdGFiYXNlLmRhdGFiYXNl
TXV0ZXgoKSk7CisgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gcHJlcGFyZSAtICVzIiwgcXVl
cnkpOworCisgICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRo
ZSBudWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7CisgICAgLy8gdGhpcyBsZXRz
IFNRTGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KKyAgICBzaXplX3QgbGVuZ3RoSW5j
bHVkaW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5TGVuZ3RoICsgMTsKKworICAgIHNxbGl0ZTNfc3Rt
dCogc3RhdGVtZW50IHsgbnVsbHB0ciB9OworICAgIGNvbnN0IGNoYXIqIHRhaWwgPSBudWxscHRy
OworICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYXRhYmFzZS5zcWxpdGUzSGFu
ZGxlKCksIHF1ZXJ5LCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyLCAmc3RhdGVtZW50LCAm
dGFpbCk7CisKKyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIExPRyhTUUxE
YXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwg
cXVlcnksIHNxbGl0ZTNfZXJybXNnKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3IpOworICAgIH0KKworICAgIGlmICh0YWlsICYm
ICp0YWlsKSB7CisgICAgICAgIHNxbGl0ZTNfZmluYWxpemUoc3RhdGVtZW50KTsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNRTElURV9FUlJPUik7CisgICAgfQorCisgICAgcmV0dXJu
IHN0YXRlbWVudDsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0ZURh
dGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgcXVlcnlTdHJpbmcpCit7Cisg
ICAgQ1N0cmluZyBxdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsK
KyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRo
aXMsIHF1ZXJ5LmRhdGEoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1Ymxp
Y31zIiwgcXVlcnkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0
YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCB7ICp0
aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxTUUxpdGVTdGF0ZW1l
bnQsIGludD4gU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1
ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRl
bWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVycygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYg
KCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2Us
ICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50ICV7cHVibGljfXMiLCBxdWVyeS5jaGFyYWN0ZXJzKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4g
U1FMaXRlU3RhdGVtZW50IHsgKnRoaXMsIHNxbFN0YXRlbWVudC52YWx1ZSgpIH07Cit9CisKK0V4
cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IFNRTGl0ZURhdGFiYXNlOjpw
cmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENT
dHJpbmcgcXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAg
YXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBx
dWVyeS5kYXRhKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpw
cmVwYXJlSGVhcFN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50ICV7cHVibGlj
fXMiLCBxdWVyeS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3FsU3Rh
dGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5pcXVlUmVmPFNRTGl0ZVN0YXRl
bWVudD4oKm5ldyBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbFN0YXRlbWVudC52YWx1ZSgpKSk7
Cit9CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IFNRTGl0ZURh
dGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAg
YXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBx
dWVyeS5jaGFyYWN0ZXJzKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVu
dCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50ICV7
cHVibGljfXMiLCBxdWVyeS5jaGFyYWN0ZXJzKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5pcXVlUmVm
PFNRTGl0ZVN0YXRlbWVudD4oKm5ldyBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbFN0YXRlbWVu
dC52YWx1ZSgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggZDNkMDY5NmRiZjViMGYwZDY2
MGI3MDg1MjBmYTYzYTk5ODAyOGU1Ny4uYzA0NWZlNTkzZDc5OWQ1MjA4MGRkYjkzOTZjNDkzNDIx
M2U3Y2Q4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxz
cWxpdGUzLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNjEsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsKTsKKwogICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RP
bmVSZXN1bHQoY29uc3QgU3RyaW5nJik7CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCB0
YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKQEAgLTcwLDYgKzc0LDExIEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxTUUxp
dGVTdGF0ZW1lbnQsIGludD4gcHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxTUUxpdGVTdGF0ZW1lbnQsIGludD4gcHJlcGFy
ZVN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVj
dGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IHByZXBhcmVIZWFwU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgcXVlcnkpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFVuaXF1
ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IHByZXBhcmVIZWFwU3RhdGVtZW50KEFTQ0lJTGl0
ZXJhbCBxdWVyeSk7CisKICAgICAvLyBBYm9ydHMgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0
aW9uLiBUaGlzIGlzIHRocmVhZCBzYWZlLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW50ZXJy
dXB0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVT
dGF0ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5jcHAKaW5kZXggZGVhOGZmZjhhNWVhNGZkZTQxNjhiZDlkM2VmNGZkZTJlYzZmNTVhOC4uNmE5
YTczOGQwYzMzZDYwZmY3MTMzNTY2MTY4Zjk0MTU4NDkwYTNhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsODcg
KzQxLDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1FMaXRlU3RhdGVtZW50OjpTUUxp
dGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHNxbCkKK1NRTGl0
ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiBkYiwgc3FsaXRlM19z
dG10KiBzdGF0ZW1lbnQpCiAgICAgOiBtX2RhdGFiYXNlKGRiKQotICAgICwgbV9xdWVyeShzcWwp
Ci0gICAgLCBtX3N0YXRlbWVudCgwKQorICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogewor
ICAgIEFTU0VSVChzdGF0ZW1lbnQpOwogfQogCi1TUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVTdGF0
ZW1lbnQoKQorU1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50
JiYgb3RoZXIpCisgICAgOiBtX2RhdGFiYXNlKG90aGVyLmRhdGFiYXNlKCkpCisgICAgLCBtX3N0
YXRlbWVudChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fc3RhdGVtZW50LCBudWxscHRyKSkKIHsKLSAg
ICBmaW5hbGl6ZSgpOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKCkKK1NRTGl0
ZVN0YXRlbWVudDo6flNRTGl0ZVN0YXRlbWVudCgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzUHJlcGFy
ZWQpOwotCi0gICAgTG9ja0hvbGRlciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11
dGV4KCkpOwotCi0gICAgQ1N0cmluZyBxdWVyeSA9IG1fcXVlcnkuc3RyaXBXaGl0ZVNwYWNlKCku
dXRmOCgpOwotICAgIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIs
IHF1ZXJ5LmRhdGEoKSk7Ci0KLSAgICAvLyBQYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBp
bmNsdWRpbmcgdGhlIG51bGwgY2hhcmFjdGVyIHRvIHNxbGl0ZTNfcHJlcGFyZV92MjsKLSAgICAv
LyB0aGlzIGxldHMgU1FMaXRlIGF2b2lkIGFuIGV4dHJhIHN0cmluZyBjb3B5LgotICAgIHNpemVf
dCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyID0gcXVlcnkubGVuZ3RoKCkgKyAxOwotCi0g
ICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7Ci0gICAgaW50IGVycm9yID0gc3FsaXRlM19w
cmVwYXJlX3YyKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVyeS5kYXRhKCksIGxlbmd0
aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIsICZtX3N0YXRlbWVudCwgJnRhaWwpOwotCi0gICAgaWYg
KGVycm9yICE9IFNRTElURV9PSykKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19w
cmVwYXJlMTYgZmFpbGVkICglaSlcbiVzXG4lcyIsIGVycm9yLCBxdWVyeS5kYXRhKCksIHNxbGl0
ZTNfZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0KLSAgICBpZiAodGFpbCAm
JiAqdGFpbCkKLSAgICAgICAgZXJyb3IgPSBTUUxJVEVfRVJST1I7Ci0KLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGVycm9yID09IFNRTElURV9PSzsKLSNlbmRpZgotICAg
IHJldHVybiBlcnJvcjsKKyAgICBpZiAobV9zdGF0ZW1lbnQpCisgICAgICAgIHNxbGl0ZTNfZmlu
YWxpemUobV9zdGF0ZW1lbnQpOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpzdGVwKCkKIHsK
ICAgICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhtX2RhdGFiYXNlLmRhdGFiYXNlTXV0ZXgoKSk7
CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FMSVRFX09LOwotCiAg
ICAgLy8gVGhlIGRhdGFiYXNlIG5lZWRzIHRvIHVwZGF0ZSBpdHMgbGFzdCBjaGFuZ2VzIGNvdW50
IGJlZm9yZSBlYWNoIHN0YXRlbWVudAogICAgIC8vIGluIG9yZGVyIHRvIGNvbXB1dGUgcHJvcGVy
bHkgdGhlIGxhc3RDaGFuZ2VzKCkgcmV0dXJuIHZhbHVlLgogICAgIG1fZGF0YWJhc2UudXBkYXRl
TGFzdENoYW5nZXNDb3VudCgpOwogCi0gICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gc3RlcCAt
ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgaW50IGVycm9yID0gc3FsaXRlM19z
dGVwKG1fc3RhdGVtZW50KTsKLSAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX0RPTkUgJiYgZXJyb3Ig
IT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxpdGUzX3N0ZXAg
ZmFpbGVkICglaSlcblF1ZXJ5IC0gJXNcbkVycm9yIC0gJXMiLCAKLSAgICAgICAgICAgIGVycm9y
LCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0
ZTNIYW5kbGUoKSkpOwotICAgIH0KKyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX0RPTkUgJiYgZXJy
b3IgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVw
IGZhaWxlZCAoJWkpXG5FcnJvciAtICVzIiwgZXJyb3IsIHNxbGl0ZTNfZXJybXNnKG1fZGF0YWJh
c2Uuc3FsaXRlM0hhbmRsZSgpKSk7CiAKICAgICByZXR1cm4gZXJyb3I7CiB9Ci0gICAgCi1pbnQg
U1FMaXRlU3RhdGVtZW50OjpmaW5hbGl6ZSgpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBt
X2lzUHJlcGFyZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAg
ICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gZmluYWxp
emUgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgIGludCByZXN1bHQgPSBzcWxp
dGUzX2ZpbmFsaXplKG1fc3RhdGVtZW50KTsKLSAgICBtX3N0YXRlbWVudCA9IDA7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6cmVzZXQoKSAKIHsKLSAgICBB
U1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1
cm4gU1FMSVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHJlc2V0IC0gJXMiLCBt
X3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAgICBpbnQgc3RhdHVzID0gc3FsaXRlM19yZXNldCht
X3N0YXRlbWVudCk7CiAgICAgc3FsaXRlM19jbGVhcl9iaW5kaW5ncyhtX3N0YXRlbWVudCk7CiAg
ICAgcmV0dXJuIHN0YXR1czsKQEAgLTEyOSw0MiArODQsMjEgQEAgaW50IFNRTGl0ZVN0YXRlbWVu
dDo6cmVzZXQoKQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0ZUNvbW1hbmQoKQogewot
ICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlmIChzdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBmaW5hbGl6ZSgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBzdGVwKCkgPT0gU1FMSVRFX0RPTkU7CiB9CiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1
cm5zQXRMZWFzdE9uZVJlc3VsdCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1faXNQ
cmVwYXJlZCk7Ci0gICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGZpbmFs
aXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZmluYWxpemUoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLQorICAgIHJldHVybiBzdGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAog
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCB2b2lkKiBibG9i
LCBpbnQgc2l6ZSkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5k
ZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5k
UGFyYW1ldGVyQ291bnQoKSk7CiAgICAgQVNTRVJUKGJsb2IgfHwgIXNpemUpOwogICAgIEFTU0VS
VChzaXplID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNR
TElURV9FUlJPUjsKLQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwg
aW5kZXgsIGJsb2IsIHNpemUsIFNRTElURV9UUkFOU0lFTlQpOwogfQogCkBAIC0xODUsNyArMTE5
LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJp
bmcmIHRleHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0KQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VS
VChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9
IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjA0LDcgKzEzNyw2IEBAIGludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBpbnQg
U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiB7Ci0gICAg
QVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwog
CkBAIC0yMTMsNyArMTQ1LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludChpbnQgaW5k
ZXgsIGludCBpbnRlZ2VyKQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQoaW50IGlu
ZGV4LCBpbnQ2NF90IGludGVnZXIpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAg
QVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yMjIsNyArMTUzLDYgQEAgaW50IFNR
TGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogCiBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlIG51bWJlcikK
IHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291
bnQoKSk7CiAKQEAgLTIzMSw3ICsxNjEsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kRG91
YmxlKGludCBpbmRleCwgZG91YmxlIG51bWJlcikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Ymlu
ZE51bGwoaW50IGluZGV4KQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VS
VChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9
IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjQ5LDI2ICsxNzgsMTkgQEAgaW50IFNRTGl0
ZVN0YXRlbWVudDo6YmluZFZhbHVlKGludCBpbmRleCwgY29uc3QgU1FMVmFsdWUmIHZhbHVlKQog
CiB1bnNpZ25lZCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRQYXJhbWV0ZXJDb3VudCgpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9wYXJhbWV0ZXJfY291bnQobV9z
dGF0ZW1lbnQpOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgpCiB7Ci0g
ICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVudCk7CiB9
CiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKIHsKICAgICBB
U1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVw
YXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzgsMTkgKzIwMCwxNCBAQCBib29sIFNRTGl0ZVN0YXRl
bWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1
bW5EZWNsYXJlZEFzQmxvYihpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkgewotICAgICAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcoc3FsaXRlM19jb2x1bW5fZGVjbHR5cGUobV9z
dGF0ZW1lbnQsIGNvbCkpLCAiYmxvYiIpOwogfQogCiBTdHJpbmcgU1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5OYW1lKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAo
IW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBw
aW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzcWxpdGUz
X2NvbHVtbl9uYW1lMTYobV9zdGF0ZW1lbnQsIGNvbCkpKTsKQEAgLTI5OSw5ICsyMTYsOCBAQCBT
dHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKGludCBjb2wpCiBTUUxWYWx1ZSBT
UUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVlKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNv
bCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApAQCAtMzMwLDkgKzI0Niw4IEBAIFNRTFZhbHVlIFNRTGl0ZVN0YXRl
bWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCkKIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6Omdl
dENvbHVtblRleHQoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICgh
bV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cp
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBp
bmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNf
Y29sdW1uX3RleHQxNihtX3N0YXRlbWVudCwgY29sKSksIHNxbGl0ZTNfY29sdW1uX2J5dGVzMTYo
bV9zdGF0ZW1lbnQsIGNvbCkgLyBzaXplb2YoVUNoYXIpKTsKQEAgLTM0MSw5ICsyNTYsOCBAQCBT
dHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiBkb3VibGUgU1FM
aXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29s
ID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gMC4wOworICAgIGlmICghaGFz
U3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVy
biAwLjA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gMC4w
OwogICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9kb3VibGUobV9zdGF0ZW1lbnQsIGNvbCk7CkBA
IC0zNTIsOSArMjY2LDggQEAgZG91YmxlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91Ymxl
KGludCBjb2wpCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5JbnQoaW50IGNvbCkKIHsK
ICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlm
IChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQor
ICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9pbnQobV9zdGF0ZW1lbnQsIGNv
bCk7CkBAIC0zNjMsOSArMjc2LDggQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50
KGludCBjb2wpCiBpbnQ2NF90IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQoaW50IGNv
bCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAg
ICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9pbnQ2NChtX3N0YXRl
bWVudCwgY29sKTsKQEAgLTM3NSw3ICsyODcsNyBAQCBTdHJpbmcgU1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5CbG9iQXNTdHJpbmcoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwog
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cp
CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29s
KQpAQCAtMzk3LDcgKzMwOSw3IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9i
QXNWZWN0b3IoaW50IGNvbCwgVmVjdG9yPGNoYXI+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGNv
bCA+PSAwKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0g
U1FMSVRFX1JPVykgewogICAgICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTQyMyw3ICszMzUsNyBAQCB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1u
QmxvYkFzVmVjdG9yKGludCBjb2wsIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQogewogICAgIEFT
U0VSVChjb2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVBbmRTdGVw
KCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC00NTEsMTkgKzM2MywxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6
cmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0cmluZz4mIHYpCiAKICAgICB2LmNs
ZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAg
aWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaGFzU3RhcnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAo
c3RlcCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtblRleHQoY29s
KSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJv
cigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBM
T0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVy
eSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0YWJhc2Us
ICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3Vs
dHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC00NzEsMTkgKzM4MCwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50UmVzdWx0
cyhpbnQgY29sLCBWZWN0b3I8aW50PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAo
bV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzU3RhcnRlZFN0ZXBw
aW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAoc3RlcCgpID09IFNRTElURV9S
T1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludChjb2wpKTsKICAgICBib29sIHJlc3Vs
dCA9IHRydWU7CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVy
cm9yIHJlYWRpbmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6
cmV0dXJuSW50UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZp
bmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDkxLDE5ICszOTcsMTYgQEAg
Ym9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludDY0UmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8
aW50NjRfdD4mIHYpCiB7CiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50KQot
ICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQorICAgICAg
ICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2
LmFwcGVuZChnZXRDb2x1bW5JbnQ2NChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAg
ICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
cmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcg
cmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRS
ZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MTEsMjUgKzQxNCwyMiBAQCBib29sIFNRTGl0
ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8ZG91YmxlPiYg
dikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZp
bmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoaGFzU3RhcnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7
CiAKICAgICB3aGlsZSAoc3RlcCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdl
dENvbHVtbkRvdWJsZShjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgaWYgKG1f
ZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVzdWx0ID0g
ZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVzdWx0cyBm
cm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVzdWx0czog
RXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZpbmFsaXplKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzRXhwaXJlZCgpCitib29s
IFNRTGl0ZVN0YXRlbWVudDo6aGFzU3RhcnRlZFN0ZXBwaW5nKCkKIHsKLSAgICByZXR1cm4gIW1f
c3RhdGVtZW50OworICAgIHJldHVybiBzcWxpdGUzX3N0bXRfYnVzeShtX3N0YXRlbWVudCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCBhN2FjZGU1Y2ZjNWIyZDM1NjJiMWZiNTFmZDZhNzFi
ZDk1Y2NlNDA4Li42MzUxMmJiNmViNDlhNmVlMTllNzFmMWM2N2IxZmU4ZjI5ZjY1YzhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDEwICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNRTGl0ZVN0YXRl
bWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMaXRlU3RhdGVtZW50KTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU1FMaXRlU3Rh
dGVtZW50KFNRTGl0ZURhdGFiYXNlJiwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgflNRTGl0ZVN0YXRlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVu
dChTUUxpdGVTdGF0ZW1lbnQmJik7CiAgICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgaW50IHByZXBh
cmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBjb25zdCB2
b2lkKiBibG9iLCBpbnQgc2l6ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRUZXh0
KGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CkBAIC01MCwyMyArNDksMTggQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGJpbmRQYXJhbWV0ZXJDb3VudCgpIGNvbnN0Owog
CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHN0ZXAoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBpbnQg
ZmluYWxpemUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcmVzZXQoKTsKICAgICAKLSAgICBp
bnQgcHJlcGFyZUFuZFN0ZXAoKSB7IGlmIChpbnQgZXJyb3IgPSBwcmVwYXJlKCkpIHJldHVybiBl
cnJvcjsgcmV0dXJuIHN0ZXAoKTsgfQotICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVwcywgYW5k
IGZpbmFsaXplcyB0aGUgcXVlcnkuCisgICAgLy8gc3RlcHMgYW5kIGZpbmFsaXplcyB0aGUgcXVl
cnkuCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCAzIHN0ZXBzIHN1Y2NlZWQgd2l0aCBzdGVw
KCkgcmV0dXJuaW5nIFNRTElURV9ET05FCiAgICAgLy8gcmV0dXJucyBmYWxzZSBvdGhlcndpc2Ug
IAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAKLSAgICAv
LyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMuICAKKyAgICAvLyBzdGVwcywgYW5kIGZp
bmFsaXplcy4KICAgICAvLyByZXR1cm5zIHRydWUgaXMgc3RlcCgpIHJldHVybnMgU1FMSVRFX1JP
VwogICAgIC8vIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgYm9vbCByZXR1cm5zQXRMZWFz
dE9uZVJlc3VsdCgpOwogCi0gICAgYm9vbCBpc0V4cGlyZWQoKTsKLQogICAgIC8vIFJldHVybnMg
LTEgb24gbGFzdC1zdGVwIGZhaWxpbmcuICBPdGhlcndpc2UsIHJldHVybnMgbnVtYmVyIG9mIHJv
d3MKICAgICAvLyByZXR1cm5lZCBpbiB0aGUgbGFzdCBzdGVwKCkKICAgICBpbnQgY29sdW1uQ291
bnQoKTsKQEAgLTkwLDE1ICs4NCwxNSBAQCBwdWJsaWM6CiAKICAgICBTUUxpdGVEYXRhYmFzZSYg
ZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlOyB9CiAgICAgCi0gICAgY29uc3QgU3RyaW5n
JiBxdWVyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcnk7IH0KLSAgICAKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFNRTGl0ZURhdGFiYXNlOworICAgIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVE
YXRhYmFzZSYsIHNxbGl0ZTNfc3RtdCopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
cmVwYXJlZCBzdGF0ZW1lbnQgaGFzIGJlZW4gc3RlcHBlZCBhdCBsZWFzdCBvbmNlIHVzaW5nIHN0
ZXAoKSBidXQgaGFzIG5laXRoZXIgcnVuIHRvIGNvbXBsZXRpb24gKHJldHVybmVkIFNRTElURV9E
T05FIGZyb20gc3RlcCgpKSBub3IgYmVlbiByZXNldCgpLgorICAgIGJvb2wgaGFzU3RhcnRlZFN0
ZXBwaW5nKCk7CisKICAgICBTUUxpdGVEYXRhYmFzZSYgbV9kYXRhYmFzZTsKLSAgICBTdHJpbmcg
bV9xdWVyeTsKICAgICBzcWxpdGUzX3N0bXQqIG1fc3RhdGVtZW50OwotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgYm9vbCBtX2lzUHJlcGFyZWQgeyBmYWxzZSB9OwotI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nl
YXJjaFBvcHVwTWVudURCLmNwcAppbmRleCA2ZjdmNGJhMTY2MGI0ZjdhOTc3MjEyYzg1NjNhNDNj
NjY1ZTMwYjU0Li40NjFhMmM3ZmNkYTg5YjgzN2E1OTkwM2ViY2ZhM2Q1YjI4M2M1NjI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAK
QEAgLTEzMCwyNSArMTMwLDI1IEBAIGJvb2wgU2VhcmNoUG9wdXBNZW51REI6OmNoZWNrRGF0YWJh
c2VWYWxpZGl0eSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJTZWFyY2giKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGludGVncml0eSht
X2RhdGFiYXNlLCAiUFJBR01BIHF1aWNrX2NoZWNrOyIpOwotICAgIGlmIChpbnRlZ3JpdHkucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW50ZWdyaXR5ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgcXVpY2tfY2hlY2s7Il9zKTsKKyAgICBpZiAoIWludGVn
cml0eSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlIGRhdGFiYXNlIGlu
dGVncml0eSBjaGVjayIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50
IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAgIGludCByZXN1bHRDb2RlID0gaW50
ZWdyaXR5LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMSVRFX1JPVykgewogICAg
ICAgICBMT0dfRVJST1IoIkludGVncml0eSBxdWlja19jaGVjayBzdGVwIHJldHVybmVkICVkIiwg
cmVzdWx0Q29kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgY29s
dW1ucyA9IGludGVncml0eS5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2x1bW5zID0gaW50ZWdy
aXR5LT5jb2x1bW5Db3VudCgpOwogICAgIGlmIChjb2x1bW5zICE9IDEpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJSZWNlaXZlZCAlaSBjb2x1bW5zIHBlcmZvcm1pbmcgaW50ZWdyaXR5IGNoZWNrLCBz
aG91bGQgYmUgMSIsIGNvbHVtbnMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHkuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICBT
dHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS0+Z2V0Q29sdW1uVGV4dCgwKTsKIAogICAgIGlm
IChyZXN1bHRUZXh0ICE9ICJvayIpIHsKICAgICAgICAgTE9HX0VSUk9SKCJTZWFyY2ggYXV0b3Nh
dmUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCAtICVzIiwgcmVzdWx0VGV4dC5hc2Np
aSgpLmRhdGEoKSk7CkBAIC0yMjQsMTcgKzIyNCwxOSBAQCBib29sIFNlYXJjaFBvcHVwTWVudURC
OjpvcGVuRGF0YWJhc2UoKQogCiB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjpjbG9zZURhdGFiYXNl
KCkKIHsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBtX2xvYWRTZWFy
Y2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1faW5zZXJ0U2Vh
cmNoVGVybVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAgbV9yZW1vdmVTZWFyY2hUZXJt
c0Zvck5hbWVTdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKLSAgICB9CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2xvYWRTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1faW5zZXJ0U2VhcmNoVGVybVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9yZW1vdmVTZWFy
Y2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKIH0KIAogdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7
Ci0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlBSQUdNQSB1
c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGlu
dCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwog
ICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjcxLDIzICsyNzMsMjUgQEAgdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6Y2hlY2tTUUxpdGVSZXR1
cm5Db2RlKGludCBhY3R1YWwpCiAKIGludCBTZWFyY2hQb3B1cE1lbnVEQjo6ZXhlY3V0ZVNpbXBs
ZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvcikKIHsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRl
bWVudC5wcmVwYXJlQW5kU3RlcCgpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOworICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5l
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlbWVudC5lcnJvcigpOworICAgIH0KIAotICAg
IGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpOworICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnN0
ZXAoKTsKICAgICBpZiAocmV0ICE9IFNRTElURV9PSyAmJiByZXQgIT0gU1FMSVRFX0RPTkUgJiYg
cmV0ICE9IFNRTElURV9ST1cgJiYgIWlnbm9yZUVycm9yKQogICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0KICAgICByZXR1cm4gcmV0OwogfQogCiBzdGQ6OnVuaXF1
ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiBTZWFyY2hQb3B1cE1lbnVEQjo6Y3JlYXRlUHJlcGFyZWRT
dGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtYWtl
VW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0g
c3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBTUUxJ
VEVfT0spOwotICAgIHJldHVybiBzdGF0ZW1lbnQ7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7CisgICAgQVNTRVJUKHN0YXRlbWVudCk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBzdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJh
dGlvbkRhdGFiYXNlLmNwcAppbmRleCA4OTJjM2Y0OWU5MDE0YTM1ZmU5Mjk4NGVmOWEyOTA0YTdi
ZGVkNTYwLi5iMGM3MTYxYTgwNmE4NjhlYzRmZjQ0NzY1M2JiODUzZmMwOTY4NDViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1Jl
Z2lzdHJhdGlvbkRhdGFiYXNlLmNwcApAQCAtMjg1LDExICsyODUsMTEgQEAgU3RyaW5nIFJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpCiAgICAgU3RyaW5nIGN1
cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBl
eGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KCptX2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKLSAgICAgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIjsKKyAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciX3MpOworICAg
ICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIl9zOwog
Ci0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBp
bnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8gSWYgdGhl
cmUgaXMgbm8gUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgog
ICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CkBAIC0zMDEsNyArMzAx
LDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJs
ZSgpCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAgICAg
IHJldHVybiAiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRo
ZSBSZWNvcmRzIHRhYmxlLiI7CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRD
b2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5
KCkpOwpAQCAtNDI3LDE4ICs0MjcsMTggQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9Q
dXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYKICAgICBT
UUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9kYXRhYmFzZSk7CiAgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PykiX3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8g
aW5zZXJ0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElO
VE8gUmVjb3JkcyBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9z
KTsKKyAgICBpZiAoIWluc2VydFN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHN0b3JlIHJl
Z2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYXV0byYgc2NyaXB0U3RvcmFnZSA9IHRoaXMtPnNjcmlw
dFN0b3JhZ2UoKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlvbiA6IHJlbW92ZWRSZWdpc3Ry
YXRpb25zKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgcmVnaXN0cmF0
aW9uLnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBrZXkg
PSA/Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IGRl
bGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgcmVnaXN0cmF0aW9uLnRvRGF0YWJhc2VLZXkoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBkZWxldGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtl
ciwgIkZhaWxlZCB0byByZW1vdmUgcmVnaXN0cmF0aW9uIGRhdGEgZnJvbSByZWNvcmRzIHRhYmxl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTQ1Nywx
OSArNDU3LDE5IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMoY29u
c3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAgICAgICAgIFdURjo6UGVyc2lz
dGVuY2U6OkVuY29kZXIgY2VydGlmaWNhdGVJbmZvRW5jb2RlcjsKICAgICAgICAgY2VydGlmaWNh
dGVJbmZvRW5jb2RlciA8PCBkYXRhLmNlcnRpZmljYXRlSW5mbzsKIAotICAgICAgICBpZiAoc3Fs
LmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0RhdGFiYXNlS2V5KCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIGRhdGEucmVnaXN0cmF0aW9u
LnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzcWwuYmluZFRleHQoMywgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucGF0aCgpLnRv
U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDQsIGRh
dGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmlnaW4oKS5kYXRhYmFzZUlkZW50aWZpZXIoKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZERvdWJsZSg1LCBkYXRhLnJlZ2lzdHJh
dGlvbi5sYXN0VXBkYXRlVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJp
bmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJpbmcoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoOCwgd29ya2VyVHlwZVRvU3RyaW5n
KGRhdGEud29ya2VyVHlwZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRC
bG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBv
bGljeSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoMTEsIHNjcmlw
dFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1
ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoMTIs
IGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIu
YnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgaWYgKGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoMSwg
ZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGEucmVnaXN0cmF0aW9u
LnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3Bl
VVJMLnBhdGgoKS50b1N0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2Vy
dFN0YXRlbWVudC0+YmluZFRleHQoNCwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvcE9yaWdpbigp
LmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2Vy
dFN0YXRlbWVudC0+YmluZERvdWJsZSg1LCBkYXRhLnJlZ2lzdHJhdGlvbi5sYXN0VXBkYXRlVGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3RyaW5nKGRh
dGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIGRhdGEuc2NyaXB0VVJMLnN0cmluZygp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQo
OCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZl
cigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTEsIHNj
cmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVy
LmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1l
bnQtPmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZp
Y2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBzdG9yZSByZWdpc3Ry
YXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtNTAyLDI2ICs1MDIsMjYgQEAgU3RyaW5nIFJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKIAogICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6aW1wb3J0UmVjb3JkczoiKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNl
LCAiU0VMRUNUICogRlJPTSBSZWNvcmRzOyJfcyk7Ci0gICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gc3FsID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUICogRlJPTSBSZWNvcmRzOyJfcyk7CisgICAgaWYgKCFzcWwpCiAgICAgICAgIHJldHVy
biBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmV0cmlldmUgcmVn
aXN0cmF0aW9ucyBmcm9tIHJlY29yZHMgdGFibGUgKCIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigp
LCAiKSAtICIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKIAotICAgIGludCByZXN1bHQg
PSBzcWwuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKIAotICAgIGZvciAo
OyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0gc3FsLnN0ZXAoKSkgeworICAgIGZvciAo
OyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0gc3FsLT5zdGVwKCkpIHsKICAgICAgICAg
UkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRS
ZWNvcmRzOiBJbXBvcnRpbmcgYSByZWdpc3RyYXRpb24gZnJvbSB0aGUgZGF0YWJhc2UiKTsKLSAg
ICAgICAgYXV0byBrZXkgPSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5Ojpmcm9tRGF0YWJh
c2VLZXkoc3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICBhdXRvIG9yaWdpblVSTCA9IFVS
TCB7IFVSTCgpLCBzcWwuZ2V0Q29sdW1uVGV4dCgxKSB9OwotICAgICAgICBhdXRvIHNjb3BlUGF0
aCA9IHNxbC5nZXRDb2x1bW5UZXh0KDIpOworICAgICAgICBhdXRvIGtleSA9IFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtleShzcWwtPmdldENvbHVtblRleHQoMCkp
OworICAgICAgICBhdXRvIG9yaWdpblVSTCA9IFVSTCB7IFVSTCgpLCBzcWwtPmdldENvbHVtblRl
eHQoMSkgfTsKKyAgICAgICAgYXV0byBzY29wZVBhdGggPSBzcWwtPmdldENvbHVtblRleHQoMik7
CiAgICAgICAgIGF1dG8gc2NvcGVVUkwgPSBVUkwgeyBvcmlnaW5VUkwsIHNjb3BlUGF0aCB9Owot
ICAgICAgICBhdXRvIHRvcE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNl
SWRlbnRpZmllcihzcWwuZ2V0Q29sdW1uVGV4dCgzKSk7Ci0gICAgICAgIGF1dG8gbGFzdFVwZGF0
ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzcWwuZ2V0Q29sdW1uRG91Ymxl
KDQpKTsKLSAgICAgICAgYXV0byB1cGRhdGVWaWFDYWNoZSA9IHN0cmluZ1RvVXBkYXRlVmlhQ2Fj
aGUoc3FsLmdldENvbHVtblRleHQoNSkpOwotICAgICAgICBhdXRvIHNjcmlwdFVSTCA9IFVSTCB7
IFVSTCgpLCBzcWwuZ2V0Q29sdW1uVGV4dCg2KSB9OwotICAgICAgICBhdXRvIHdvcmtlclR5cGUg
PSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLmdldENvbHVtblRleHQoNykpOworICAgICAgICBhdXRv
IHRvcE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihz
cWwtPmdldENvbHVtblRleHQoMykpOworICAgICAgICBhdXRvIGxhc3RVcGRhdGVDaGVja1RpbWUg
PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLT5nZXRDb2x1bW5Eb3VibGUoNCkpOworICAg
ICAgICBhdXRvIHVwZGF0ZVZpYUNhY2hlID0gc3RyaW5nVG9VcGRhdGVWaWFDYWNoZShzcWwtPmdl
dENvbHVtblRleHQoNSkpOworICAgICAgICBhdXRvIHNjcmlwdFVSTCA9IFVSTCB7IFVSTCgpLCBz
cWwtPmdldENvbHVtblRleHQoNikgfTsKKyAgICAgICAgYXV0byB3b3JrZXJUeXBlID0gc3RyaW5n
VG9Xb3JrZXJUeXBlKHNxbC0+Z2V0Q29sdW1uVGV4dCg3KSk7CiAKICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoOCwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YSk7CisgICAgICAgIHNxbC0+
Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEpOwogICAg
ICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNzcERlY29kZXIoY29udGVudFNlY3VyaXR5
UG9saWN5RGF0YS5kYXRhKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKTsKICAg
ICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzPiBjb250
ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGlmIChjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRh
LnNpemUoKSkgewpAQCAtNTMyLDEwICs1MzIsMTAgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwuZ2V0Q29sdW1uVGV4dCg5KTsKKyAgICAgICAgYXV0
byByZWZlcnJlclBvbGljeSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCg5KTsKIAogICAgICAgICBWZWN0
b3I8dWludDhfdD4gc2NyaXB0UmVzb3VyY2VNYXBEYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1u
QmxvYkFzVmVjdG9yKDEwLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEpOworICAgICAgICBzcWwtPmdl
dENvbHVtbkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhKTsKICAgICAgICAg
SGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+IHNj
cmlwdFJlc291cmNlTWFwOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgc2Ny
aXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291cmNlTWFwRGF0YS5kYXRhKCksIHNjcmlw
dFJlc291cmNlTWFwRGF0YS5zaXplKCkpOwpAQCAtNTUwLDcgKzU1MCw3IEBAIFN0cmluZyBSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgICAgIH0KIAogICAgICAgICBW
ZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVJbmZvRGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVt
bkJsb2JBc1ZlY3RvcigxMSwgY2VydGlmaWNhdGVJbmZvRGF0YSk7CisgICAgICAgIHNxbC0+Z2V0
Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0ZUluZm9EYXRhKTsKICAgICAgICAgT3B0
aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUluZm87CiAKICAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUluZm9EZWNvZGVyKGNlcnRpZmljYXRlSW5m
b0RhdGEuZGF0YSgpLCBjZXJ0aWZpY2F0ZUluZm9EYXRhLnNpemUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAppbmRleCAwZDcy
NTJiNTM1Y2EyZjdkMDg4ZWQ5NGVhMjY0Yzk3NmM1ZDQzNWNkLi4xOWIwYTIxNDE2MmJiNjFlYTVj
YzY5NmU1ZDQyNjNkY2Y5ODgwNjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTM4Miw4ICszODIsOCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNldEJ1c3lUaW1lb3V0KG1fZGF0YWJhc2UsICJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAw
MCIpOwotICAgIGlmIChzZXRCdXN5VGltZW91dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IHNl
dEJ1c3lUaW1lb3V0LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgYXV0byBzZXRCdXN5VGlt
ZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGJ1c3lfdGltZW91dCA9
IDUwMDAiX3MpOworICAgIGlmICghc2V0QnVzeVRpbWVvdXQgfHwgc2V0QnVzeVRpbWVvdXQtPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRCdXN5VGltZW91
dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CkBAIC00MDEsMjIgKzQwMSwyMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQogT3B0aW9uYWw8VmVjdG9y
PFN0cmluZz4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1p
c3NpbmdUYWJsZXNJblNjaGVtYSgpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gbWlzc2luZ1RhYmxl
czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgMSBm
cm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCB0YmxfbmFtZT0/Iik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAxIGZyb20gc3FsaXRl
X21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgYW5kIHRibF9uYW1lPT8iX3MpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJ
blNjaGVtYSBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRh
YmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoc3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIHNjaGVtYSBpcyBtaXNzaW5nIHRhYmxlOiAl
cyIsIHRoaXMsIHRhYmxlLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgICAgIG1pc3NpbmdUYWJs
ZXMuYXBwZW5kKFN0cmluZyh0YWJsZSkpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC5y
ZXNldCgpOworICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogICAgIGlmIChtaXNz
aW5nVGFibGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTQy
Niw4ICs0MjYsOCBAQCBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYgogCiB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cygpCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IGVuYWJsZUZvcmVpZ25LZXlzKG1fZGF0YWJhc2UsICJQUkFHTUEgZm9yZWln
bl9rZXlzID0gT04iKTsKLSAgICBpZiAoZW5hYmxlRm9yZWlnbktleXMucHJlcGFyZSgpICE9IFNR
TElURV9PSyB8fCBlbmFibGVGb3JlaWduS2V5cy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQ
UkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3MpOworICAgIGlmICghZW5hYmxlRm9yZWlnbktleXMg
fHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDM2LDMxICs0
MzYsMzEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxl
Rm9yZWlnbktleXMoKQogCiBUYWJsZUFuZEluZGV4UGFpciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRUYWJsZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0
YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICd0YWJsZSciKSk7Ci0gICAgaWYg
KGdldFRhYmxlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGdl
dFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5h
bWUsICInIEFORCB0eXBlID0gJ3RhYmxlJyIpKTsKKyAgICBpZiAoIWdldFRhYmxlU3RhdGVtZW50
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5h
YmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMg
ZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCB0YWJsZSBzY2hlbWEsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIFN0cmluZyBjcmVhdGVUYWJsZVF1ZXJ5ID0gZ2V0VGFibGVTdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdldFRh
YmxlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdl
dEluZGV4U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBz
cWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0g
J2luZGV4JyIpKTsKLSAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gZ2V0SW5kZXhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAnaW5kZXgnIikpOworICAgIGlm
ICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJs
ZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5k
ZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgT3B0aW9uYWw8U3RyaW5n
PiBpbmRleDsKLSAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
IHsKLSAgICAgICAgYXV0byByYXdJbmRleCA9IFN0cmluZyhnZXRJbmRleFN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKTsKKyAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgIGF1dG8gcmF3SW5kZXggPSBTdHJpbmcoZ2V0SW5kZXhTdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICBpZiAoIXJhd0luZGV4LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIGluZGV4ID0gcmF3SW5kZXg7CiAgICAgfQpAQCAtNDgwLDIwICs0ODAsMjAg
QEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bmVlZHNVcGRhdGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2gKIAogYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMoKQogewotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIENPVU5UKCopIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyIpKTsKLSAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCopIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIFVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcyBlcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNvdW50LCBlcnJvciBtZXNzYWdlOiAlcyIs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoc3RhdGVtZW50
LmdldENvbHVtbkludCgwKSA8IGV4cGVjdGVkSW5kZXhDb3VudCkKKyAgICBpZiAoc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291bnQpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU0LDggKzU1NCw4IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5l
Y2Vzc2FyeSgpCiAKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4
UXVlcmllcygpLmtleXMoKSkgewogICAgICAgICBhdXRvIHF1ZXJ5ID0gbWFrZVN0cmluZygiQUxU
RVIgVEFCTEUgIiwgdGFibGUsICIgUkVOQU1FIFRPIF8iLCB0YWJsZSk7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBhbHRlclRhYmxlKG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKGFs
dGVyVGFibGUucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBhbHRlclRhYmxlLnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGFsdGVyVGFibGUgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIWFsdGVyVGFibGUgfHwgYWx0ZXJUYWJs
ZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byByZW5hbWUgdGFibGUsIGVy
cm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU3
MCwxNiArNTcwLDE2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAKICAgICBmb3IgKGF1dG8mIHRh
YmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewogICAgICAgICBh
dXRvIHF1ZXJ5ID0gaW5zZXJ0RGlzdGluY3RWYWx1ZXNJblRhYmxlUXVlcnkodGFibGUpOwotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgbWlncmF0ZVRhYmxlRGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7
Ci0gICAgICAgIGlmIChtaWdyYXRlVGFibGVEYXRhLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwg
bWlncmF0ZVRhYmxlRGF0YS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBt
aWdyYXRlVGFibGVEYXRhID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAg
ICAgICAgaWYgKCFtaWdyYXRlVGFibGVEYXRhIHx8IG1pZ3JhdGVUYWJsZURhdGEtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9O
ZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gbWlncmF0ZSBzY2hlbWEsIGVycm9yIG1lc3Nh
Z2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gZHJvcFF1ZXJ5ID0gbWFrZVN0cmluZygiRFJPUCBUQUJMRSBfIiwgdGFibGUp
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZHJvcFRhYmxlUXVlcnkobV9kYXRhYmFzZSwgZHJv
cFF1ZXJ5KTsKLSAgICAgICAgaWYgKGRyb3BUYWJsZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sgfHwgZHJvcFRhYmxlUXVlcnkuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1
dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoZHJvcFF1ZXJ5
KTsKKyAgICAgICAgaWYgKCFkcm9wVGFibGVRdWVyeSB8fCBkcm9wVGFibGVRdWVyeS0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3Jr
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFU
b05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIHRlbXBvcmFyeSB0YWJsZXMsIGVy
cm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5
NywxNyArNTk3LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAKIFZlY3RvcjxTdHJpbmc+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUoY29uc3Qg
U3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0YWJsZU5hbWUsICIpIikp
OworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VT
dHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7CiAKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0Q29sdW1uc0Zyb21UYWJsZUluZm9TdGF0ZW1lbnQg
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGFibGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnM7Ci0gICAgd2hpbGUg
KHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIG5hbWUgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMSk7CiAgICAgICAgIGNvbHVtbnMuYXBwZW5kKG5hbWUpOwogICAgIH0KIApAQCAtNjIy
LDE4ICs2MjIsMTggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwKICAgICAgICAgaWYgKGV4aXN0
aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNvbHVtbikp
OwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmlu
ZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIEFERCBDT0xVTU4gIiwgY29sdW1uKSk7Cisg
ICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlz
c2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBhZGQgbWlz
c2luZyBjb2x1bW5zIHRvIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgaWYgKHN0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gYWRk
IG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAg
fQogfQogCkBAIC02NDgsMTMgKzY0OCwxMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCkKIAogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVuYW1lQ29sdW1uSW5UYWJsZShTdHJp
bmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29sdW1uTmFtZSYmIGV4aXN0aW5nQ29sdW1uTmFtZSwg
RXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0ZWRDb2x1bW5OYW1lKQogewotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwg
dGFibGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4gIiwgZXhpc3RpbmdDb2x1bW5OYW1lLCAiIFRPICIs
IGV4cGVjdGVkQ29sdW1uTmFtZSkpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBSRU5BTUUgQ09MVU1O
ICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3RlZENvbHVtbk5hbWUpKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVt
bnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byByZW5hbWUgY29sdW1uIGlu
IHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGlu
ZyBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVtbiBpbiB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTcxMiwxNSAr
NzEyLDE1IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5B
bmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAg
ICAgewogICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBPYnNlcnZl
ZCBEb21haW5zIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFt
ZT0nT2JzZXJ2ZWREb21haW5zJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRi
bF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIE9ic2VydmVkRG9tYWlucyB0YWJsZS4iKTsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gT2JzZXJ2ZWREb21haW5zIHRhYmxlIGF0IGFsbCwg
b3IgdGhlcmUgaXMgYW4gZXJyb3IgZXhlY3V0aW5nIHRoZSBmZXRjaCwgZGVsZXRlIHRoZSBmaWxl
LgotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAg
IGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUg
T2JzZXJ2ZWQgRG9tYWlucyB0YWJsZS4iKTsKICAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3RvcmFnZURpcmVjdG9yeVBhdGgpOwpAQCAt
NzI4LDcgKzcyOCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC03
NTEsMTIgKzc1MSwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRl
bWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIGxvZ1N0cmluZykgY29uc3QKIHsK
ICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBBU1NF
UlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnRPckVycm9yID0gbV9kYXRh
YmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmICghc3RhdGVtZW50
T3JFcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiVzIGZhaWxlZCB0byBwcmVwYXJl
IHN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIGxv
Z1N0cmluZy5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgICAgIH0KKyAgICAgICAgc3RhdGVtZW50
ID0gc3RhdGVtZW50T3JFcnJvci52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOworICAgICAgICBB
U1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgfQogICAgIHJldHVybiBTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQoKSB9OwogfQpAQCAtMTAwNCw5ICsx
MDA2LDggQEAgT3B0aW9uYWw8dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVy
eSwgImRvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJp
bmcgZmFpbGVkLiBTdGF0ZW1lbnQ6ICVzLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIHNjb3BlZFN0YXRlbWVudC0+cXVlcnkoKS51dGY4KCkuZGF0YSgpLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudCB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJpbmcg
ZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBAIC0xMDM5LDIzICsxMDQwLDIzIEBA
IFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlQW5kTWFr
ZURvbWFpbkxpc3QoY29uc3QgSGFzaFNlCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgU3RyaW5nJiBz
dGF0ZW1lbnQsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5MaXN0LCB1
bnNpZ25lZCBkb21haW5JRCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0UmVsYXRpb25z
aGlwU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoc3RhdGVtZW50LCBlbnN1cmVBbmRN
YWtlRG9tYWluTGlzdChkb21haW5MaXN0KSwgIiApOyIpKTsKKyAgICBhdXRvIGluc2VydFJlbGF0
aW9uc2hpcFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5n
KHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7
CiAgICAgCi0gICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5iaW5kSW50
KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIWluc2VydFJlbGF0aW9uc2hp
cFN0YXRlbWVudAorICAgICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPmJpbmRJ
bnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAg
IAogICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExBQ0UiKSkgewotICAgICAgICBpZiAo
aW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LmJpbmREb3VibGUoMiwgV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGlm
IChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPmJpbmREb3VibGUoMiwgV2FsbFRpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChp
bnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
aWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMjksMTcgKzEyMzAsMTcgQEAgVmVjdG9yPFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXQKIAogICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxpc3Q7CiAgICAgY29uc3QgYXV0byBw
cmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwgPyAiJSIgOiAiMSI7Ci0g
ICAgU1FMaXRlU3RhdGVtZW50IHNvcnRlZFN0YXRpc3RpY3MobV9kYXRhYmFzZSwgbWFrZVN0cmlu
ZygiU0VMRUNUICIsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpKSk7Ci0gICAgaWYgKHNv
cnRlZFN0YXRpc3RpY3MucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzb3J0ZWRT
dGF0aXN0aWNzLmJpbmRUZXh0KDEsIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVyKQotICAg
ICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwor
ICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLT5i
aW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKKyAgICAgICAgfHwgc29y
dGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJ
Q19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB0aGlyZFBhcnR5RGF0YUxpc3Q7CiAgICAg
fQotICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgIGlmIChoYXNCZWVuVGhpcmRQYXJ0eShzb3J0ZWRTdGF0aXN0aWNzLmdldENvbHVtbklu
dCgxKSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3Rh
dGlzdGljcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKHNvcnRlZFN0YXRpc3RpY3MtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChoYXNCZWVuVGhpcmRQYXJ0eShzb3J0
ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMSkpKSB7CisgICAgICAgICAgICBhdXRvIHRoaXJk
UGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MtPmdldENvbHVtbkludCgwKTsKICAgICAg
ICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbiA9IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZ2V0RG9tYWluU3RyaW5nRnJvbURv
bWFpbklEKHRoaXJkUGFydHlEb21haW5JRCkpOwogICAgICAgICAgICAgdGhpcmRQYXJ0eURhdGFM
aXN0LmFwcGVuZChXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
IHsgdGhpcmRQYXJ0eURvbWFpbiwgZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFy
dHlEb21haW5zKHRoaXJkUGFydHlEb21haW5JRCwgdGhpcmRQYXJ0eURvbWFpbikgfSk7CiAgICAg
ICAgIH0KQEAgLTEyNjUsOSArMTI2Niw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZG9t
YWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNl
cnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCAr
IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5z
KSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwor
ICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
X0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEyODUsMzEg
KzEyODUsMzAgQEAgdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnMKICAgICArK251bWJlck9mUmVjdXJz
aXZlQ2FsbHM7CiAKICAgICBTdGRTZXQ8dW5zaWduZWQ+IG5ld2x5SWRlbnRpZmllZERvbWFpbnM7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNvdXJjZXMobV9kYXRhYmFzZSwgIlNFTEVD
VCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9t
YWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChmaW5kU3VicmVzb3VyY2VzLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFN1YnJlc291cmNlcy5iaW5kSW50KDEs
IHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBmaW5kU3VicmVzb3Vy
Y2VzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJF
IHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQg
PSAwIl9zKTsKKyAgICBpZiAoIWZpbmRTdWJyZXNvdXJjZXMgfHwgZmluZFN1YnJlc291cmNlcy0+
YmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWlu
c1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAK
LSAgICB3aGlsZSAoZmluZFN1YnJlc291cmNlcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLmdldENvbHVtbkludCgwKTsK
KyAgICB3aGlsZSAoZmluZFN1YnJlc291cmNlcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAg
ICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNlcy0+Z2V0Q29sdW1uSW50KDAp
OwogICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291
cmNlcy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29u
ZCkKICAgICAgICAgICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklE
KTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFRvcEZyYW1lcyhtX2RhdGFiYXNl
LCAiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04g
T2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZy
b21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5p
c1ByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChmaW5kVG9wRnJhbWVzLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFRvcEZyYW1lcy5iaW5kSW50KDEsIHByaW1hcnlEb21h
aW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBmaW5kVG9wRnJhbWVzID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZy
b21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9i
c2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyBBTkQg
T2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKCFmaW5kVG9wRnJh
bWVzCisgICAgICAgIHx8IGZpbmRUb3BGcmFtZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklE
KSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJl
Y3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFp
biBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgd2hpbGUgKGZpbmRUb3BGcmFtZXMu
c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFRv
cEZyYW1lcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKGZpbmRUb3BGcmFtZXMtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRUb3BGcmFt
ZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0byBpbnNlcnRSZXN1bHQgPSBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKICAgICAgICAgaWYg
KGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5z
Lmluc2VydChuZXdEb21haW5JRCk7CkBAIC0xMzQxLDIxICsxMzQwLDIwIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBTdGRT
ZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1ZVRvUmVkaXJlY3Q7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5D
VCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJlc291cmNlRG9tYWluSUQgRlJPTSBT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2Vy
dmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21h
aW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHN1
YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKLSAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291
cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291
cmNlUmVkaXJlY3RTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJlc291cmNlRG9tYWlu
SUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5z
IE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Cisg
ICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1
YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAg
ICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VSZWRpcmVjdFN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
dG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21h
aW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWRE
b21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0
ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAodG9wRnJhbWVS
ZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHByZXZh
bGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICBhdXRvIHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBESVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBKT0lO
IE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVu
dCA9IDEiX3MpOworICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAg
IHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
KyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRF
IE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgi
LCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9y
PihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3Qu
ZW5kKCkpKSwgIikiKSk7Ci0gICAgaWYgKG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBtYXJrUHJldmFsZW50U3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gbWFya1ByZXZhbGVudFN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6
Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHByZXZhbGVudER1ZVRv
UmVkaXJlY3QuYmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQoKSkpLCAiKSIpKTsK
KyAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQg
dG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQpAQCAtMTM2NiwxMiArMTM2NCwxMiBAQCBIYXNoTWFwPHVuc2lnbmVkLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVByZXZhbGVudFJlc291cmNlcwog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
Tm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
bm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGRv
bWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7Ci0gICAgaWYgKG5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3
aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKLSAg
ICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUoeyBSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSkKLSAgICAgICAgICAg
ICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIp
ID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkxvdworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFp
biwgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50
ID0gMCJfcyk7CisgICAgaWYgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQpIHsK
KyAgICAgICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBrZXkgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Z2V0Q29sdW1u
SW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUoeyBS
ZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3Ry
aW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkp
CisgICAgICAgICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6TG93CiAgICAgICAgICAgICAgICAgLCAwLCAwLCAwLCAwIH0pOwogICAg
ICAgICAgICAgcmVzdWx0cy5hZGQoa2V5LCB2YWx1ZSk7CiAgICAgICAgIH0KQEAgLTEzODYsNDMg
KzEzODQsNDMgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKIAogICAgIGF1dG8gZG9tYWluSURz
T2ZJbnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklE
KSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VE
b21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3Vy
Y2VEb21haW5JRCIpKTsKLSAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0
YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7
CisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURv
bWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJ
bnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAo
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5J
RCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsK
LSAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnByZXBh
cmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG9Db3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0
byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQs
IENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVS
RSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9V
UCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsK
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAg
ICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1
bHQtPnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJm
cmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJ
bnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKLSAgICBpZiAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVf
T0spIHsKLSAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9t
YWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQobWFrZVN0cmluZygiU0VMRUNUIHN1YmZyYW1lRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9t
YWluSUQpIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJmcmFtZURv
bWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJmcmFtZURv
bWFpbklEIikpOworICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3Vu
dFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnNDb3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnND
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9E
b21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFp
bklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5J
RCIpKTsKLSAgICBpZiAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnBy
ZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9Db3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byB0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0Rv
bWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWlu
SUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklE
IikpOworICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsK
KyAgICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0
cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQo
KSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQt
PnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NDksMTAgKzE1NDcsMTAgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
U3ViRnJhbWVEb21haW4mJgogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBk
b21haW5JRCA9ID8iKTsKLSAgICBpZiAoaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MuYmluZEludCgx
LCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5jcmVt
ZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGluY3Jl
bWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VB
Y2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJ
ICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICghaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcworICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLT5iaW5kSW50KDEsICpzdWJG
cmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbmNyZW1lbnRTdG9y
YWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2
NDYsOSArMTY0NCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNlCiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90
IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNl
LCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0g
MSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMp
LCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMg
U0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21h
aW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQpAQCAtMTc3NiwxMCArMTc3MywxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5j
ZVNhbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlbW92
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZShtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBXSEVSRSBz
b3VyY2VEb21haW5JRCA9ID8iKTsKLSAgICBpZiAocmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlLmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgYXV0byByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWlu
SUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZQorICAg
ICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUtPmJpbmRJbnQoMSwgKnRhcmdl
dFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xODMyLDEwICsxODI5LDEw
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlCiAgICAgfQogICAgIHNldFVzZXJJbnRlcmFjdGlv
bihkb21haW4sIGZhbHNlLCB7IH0pOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZVN0b3Jh
Z2VBY2Nlc3MobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iKTsKLSAgICBpZiAocmVtb3ZlU3RvcmFnZUFj
Y2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nl
c3MuYmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0
byByZW1vdmVTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxF
VEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQg
PSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgcmVtb3Zl
U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJh
Y3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTE5MTgsOSArMTkxNSw4IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5z
aWduZWQ+CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5J
RCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+Ojpp
dGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOwotICAgIGlm
IChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQg
PSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0
ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2luKCksIGRvbWFpbnMuZW5kKCkp
KSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CkBAIC0yMzAxLDE2ICsyMjk3LDE1IEBAIENvb2tpZUFjY2VzcyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzKGNvbnN0IFN1YlJlc291cmNlCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFjdGlvbiBG
Uk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iKTsKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVf
T0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZUFjY2VzcyBm
YWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQogCi0gICAgYm9vbCBoYXNOb0VudHJ5ID0gc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XOwotICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSAhaGFz
Tm9FbnRyeSAmJiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworICAg
IGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1c7CisgICAg
Ym9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYmICEhc3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMCk7CisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSAhaGFzTm9FbnRyeSAmJiBzdGF0
ZW1lbnQtPmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsKIAogICAgIGlmICghYXJlQWxs
VGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVEb21haW4pICYmICFpc1ByZXZh
bGVudCkKICAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tpZVBvbGljeTsK
QEAgLTIzMzMsMTQgKzIzMjgsMTQgQEAgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFMKIAogICAgIGF1
dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9ICpyZXN1bHQuc2Vjb25kOwogCi0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00g
U3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyBBTkQg
dG9wTGV2ZWxEb21haW5JRCA9ID8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgcmVxdWVzdGluZ0RvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgZmlyc3RQ
YXJ0eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8i
X3MpOworICAgIGlmICghc3RhdGVtZW50CisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgx
LCByZXF1ZXN0aW5nRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQt
PmJpbmRJbnQoMiwgZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOwogCi0gICAgcmV0dXJuICEhc3RhdGVtZW50
LmdldENvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzIDogU3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKyAgICByZXR1cm4gISFzdGF0ZW1lbnQtPmdl
dENvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzIDogU3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmRE
ZWxldGVDb29raWVzRm9yKCkgY29uc3QKQEAgLTIzNDgsMTIgKzIzNDMsMTIgQEAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluc1RvQmxvY2tBbmQKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAg
ICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9u
ID0gMCJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVn
aXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAx
IEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2Vk
Q3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCgwKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMjM2MywxMiArMjM1OCwx
MiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0J1dAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFp
biBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDEiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJl
dmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdl
dENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMjM3OCwxMiAr
MjM3MywxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFVzZXJJbgogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJs
ZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2VySW50ZXJhY3Rpb24gPSAx
Il9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3Ry
YWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2VySW50ZXJhY3Rpb24g
PSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAg
ICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
cmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdo
aWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFw
cGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHJl
c3VsdHM7CiB9CkBAIC0yMzkzLDEzICsyMzg4LDEyIEBAIEhhc2hNYXA8VG9wRnJhbWVEb21haW4s
IFN1YlJlc291cmNlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgc3ViRnJh
bWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gKFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9t
YWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVsRG9tYWluSUQgYXMgdG9wTGV2ZWxEb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElOTkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1Vu
ZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5kb21haW5JRCA9IHMuZG9tYWluSUQpIGFz
IHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gZG9tYWluSUQgPSB6LnRvcExldmVsRG9t
YWluSUQ7Il9zKTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IHN1YkZyYW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdpc3Ry
YWJsZURvbWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRvcExl
dmVsRG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VB
Y2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRvbWFp
bklEKSBhcyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50b3BM
ZXZlbERvbWFpbklEOyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwogCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAg
ICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21S
ZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSksIFJlZ2lz
dHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmco
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdl
dENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJl
Z2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yNDQ1LDE5ICsyNDM5LDE4IEBAIFZlY3RvcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6RG9tYWluRGF0YT4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAg
VmVjdG9yPERvbWFpbkRhdGE+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJl
ZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgY291bnRPZlRvcEZyYW1l
UmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9JTiAoU0VMRUNUIHNvdXJjZURv
bWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgZnJvbSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IEdST1VQIEJZ
IHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWluSUQgPSBkb21haW5JRCJfcyk7
Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwg
cmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9NIE9ic2VydmVkRG9tYWlucyBM
RUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQoKikgYXMgY291bnRPZlRvcEZy
YW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCkgYXMgeiBPTiB6LnNvdXJj
ZURvbWFpbklEID0gZG9tYWluSUQiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCi0gICAgICAgICAgICAsIFJlZ2lzdHJhYmxlRG9t
YWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25k
cyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGVtZW50Lmdl
dENvbHVtbkludCg1KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludCg2KSkKKyAgICB3aGlsZSAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSkKKyAgICAgICAgICAg
ICwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAsIFdhbGxU
aW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQtPmdldENvbHVtbkRvdWJsZSgyKSkKKyAgICAg
ICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMykgPyB0cnVlIDogZmFsc2UKKyAgICAg
ICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKKyAgICAg
ICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNSkgPyB0cnVlIDogZmFsc2UKKyAgICAg
ICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDYp
KQogICAgICAgICB9KTsKICAgICB9CiAgICAgCkBAIC0yNDczLDExICsyNDY2LDExIEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmco
VmVjdG9yPHVuc2lnbmVkPiYmCiAKICAgICBhdXRvIGxpc3RUb0NsZWFyID0gYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWluSURzVG9D
bGVhci5iZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgpKSk7CiAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5n
KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOwotICAgIGlmIChjbGVhckdyYW5kZmF0aGVy
aW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjbGVhckdyYW5k
ZmF0aGVyaW5nU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRv
bWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIikiKSk7CisgICAgaWYgKCFjbGVhckdyYW5kZmF0
aGVyaW5nU3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsZWFyR3Jh
bmRmYXRoZXJpbmdTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKGNs
ZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyBmYWls
ZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQpAQCAtMjYxNywyMyArMjYxMCwyMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiAgICAgc2l6ZV90IGNv
dW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87
CiAgICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHJl
Y29yZHNUb1BydW5lKG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERv
bWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBpc1ByZXZhbGVudCwgbGFzdFNlZW4g
TElNSVQgPyIpOwotICAgIGlmIChyZWNvcmRzVG9QcnVuZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IHJlY29yZHNUb1BydW5lLmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkg
IT0gU1FMSVRFX09LKSB7CisgICAgYXV0byByZWNvcmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVS
IEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3Mp
OworICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwgcmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwg
Y291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgVmVjdG9y
PHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUuc3Rl
cCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGVudHJpZXNUb1BydW5lLmFwcGVuZChyZWNvcmRz
VG9QcnVuZS5nZXRDb2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChyZWNvcmRzVG9QcnVuZS0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGVudHJpZXNUb1BydW5lLmFwcGVuZChyZWNvcmRz
VG9QcnVuZS0+Z2V0Q29sdW1uSW50KDApKTsKIAogICAgIGF1dG8gbGlzdFRvUHJ1bmUgPSBidWls
ZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9yPihlbnRy
aWVzVG9QcnVuZS5iZWdpbigpLCBlbnRyaWVzVG9QcnVuZS5lbmQoKSkpOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHBydW5lQ29tbWFuZChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJERUxFVEUgZnJv
bSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIp
KTsKLSAgICBpZiAocHJ1bmVDb21tYW5kLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgcHJ1bmVDb21tYW5kLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcHJ1bmVD
b21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIkRFTEVURSBm
cm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIp
IikpOworICAgIGlmICghcHJ1bmVDb21tYW5kIHx8IHBydW5lQ29tbWFuZC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0
YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0yNzE3LDM1ICsyNzA4LDMzIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZURhdGFSZWNvcmRz
UmVtb3ZlZChjb25zdCBSZWdpc3RyCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc3ViZnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQobV9k
YXRhYmFzZSwgY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50KG1fZGF0YWJhc2UsIGNvdW50U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIGNvdW50U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb1F1ZXJ5KTsKKyAgICBhdXRvIHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVl
cnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVRdWVyeSk7Cisg
ICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5KTsKICAgICAK
LSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8ucHJlcGFy
ZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQg
fHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb3VudFN1
YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQuYmluZEludCgxLCBkb21h
aW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1
YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuYmlu
ZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYmluZEludCgxLCBkb21haW5J
RChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFp
bikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFt
ZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQo
MiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgxLCBkb21haW5JRChz
dWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWlu
KS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJpbmRJ
bnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSykgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVz
dGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN1
YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XCi0gICAgICAgIHx8
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XCi0gICAg
ICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3RlcCgpICE9IFNRTElURV9ST1cp
CisgICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNR
TElURV9ST1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgp
ICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4g
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmdldENvbHVtbkludCgwKSA9PSAxICYmIHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmdldENvbHVtbkludCgwKSA9PSAxICYmIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8uZ2V0Q29sdW1uSW50KDApID09IDEpOworICAgIHJldHVybiAo
c3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmdldENvbHVtbkludCgwKSA9PSAxICYmIHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5nZXRDb2x1bW5JbnQoMCkgPT0gMSk7CiB9CiAKIHN0YXRp
YyB2b2lkIGFwcGVuZEJvb2xlYW4oU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgYm9vbCBmbGFnKQpAQCAtMjgxMiwyNyArMjgwMSwyNiBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0KFN0cmlu
Z0J1aWxkZXImCiAgICAgaWYgKHF1ZXJ5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhKG1fZGF0YWJhc2UsIHF1ZXJ5KTsKKyAgICBhdXRv
IGRhdGEgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwogICAgIAotICAgIGlm
IChkYXRhLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZGF0YS5iaW5kSW50KDEs
IGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChkb21h
aW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIWRhdGEgfHwgZGF0YS0+Ymlu
ZEludCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhv
c3QoZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0LiBTdGF0ZW1lbnQgZmFpbGVk
IHRvIHByZXBhcmUgb3IgYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKGRhdGEuc3Rl
cCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKGRhdGEtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgICAgIik7
CiAgICAgYnVpbGRlci5hcHBlbmQodGFibGVOYW1lKTsKICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIjpcbiIpOwogICAgIAotICAgIGF1dG8gcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURv
bWFpbklEKGRhdGEuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFp
blN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5nZXRDb2x1bW5JbnQoMCkpOwogICAgIGFwcGVuZE5l
eHRFbnRyeShidWlsZGVyLCByZXN1bHQpOwogICAgIAotICAgIHdoaWxlIChkYXRhLnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21h
aW5JRChkYXRhLmdldENvbHVtbkludCgwKSk7CisgICAgd2hpbGUgKGRhdGEtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5J
RChkYXRhLT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICBhcHBlbmROZXh0RW50cnkoYnVpbGRl
ciwgcmVzdWx0KTsKICAgICB9CiB9CkBAIC0yOTQ2LDI4ICsyOTM0LDI2IEBAIGJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShp
bnQgZG9tYWluSUQpCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIE9wZXJhdGluZ0RhdGVzOyJfcyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGdldE1vc3RS
ZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9w
ZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkgREVT
QyBMSU1JVCAxOyJfcyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JE
RVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VU
ID87Il9zKTsKKyAgICBhdXRvIGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIE9wZXJhdGluZ0RhdGVz
OyJfcyk7CisgICAgYXV0byBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBP
UkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMTsiX3Mp
OworICAgIGF1dG8gZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5
ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMSBPRkZTRVQgPzsiX3Mp
OwogCi0gICAgaWYgKGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50IHx8
IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1Bh
cmFtZXRlcnMgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0
ZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgIG1fb3BlcmF0aW5nRGF0ZXNTaXplID0g
Y291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOwogCi0gICAgaWYg
KGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50IHx8IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRl
T3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldEZpcnN0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBm
YWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbklu
dCgyKSk7CisgICAgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0
TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSwgZ2V0TW9z
dFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSwgZ2V0TW9zdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAKLSAgICBpZiAo
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgaWYgKCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMg
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgZHVyaW5nIHRoZSBjYWxsIHRv
IHByZXBhcmUoKSB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiIs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3NiwyNiArMjk2MiwyNiBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1Bh
cmFtZXRlcnMoKQogICAgIGlmIChtX29wZXJhdGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRpbmdEYXRl
c1dpbmRvd1Nob3J0IC0gMSkKICAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBX
VEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50LmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+YmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBv
ciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93
U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRp
bmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIp
KTsKICAgICB9CiAKICAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5nRGF0
ZXNXaW5kb3dMb25nIC0gMSkKICAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IFdU
Rjo6bnVsbG9wdDsKICAgICBlbHNlIHsKLSAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC5yZXNldCgpOwotICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudC5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgICAgICBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50
LT5yZXNldCgpOworICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+
YmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBk
YXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1l
bnQgZmFpbGVkIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIFRo
ZSBlcnJvciBjb3VsZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4iLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fbG9uZ1dp
bmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50
LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMikpOworICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5n
RGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIpKTsKICAgICB9CiB9CiAKQEAg
LTMwMTEsMjEgKzI5OTcsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkKIAogICAgIGludCBy
b3dzVG9QcnVuZSA9IG1fb3BlcmF0aW5nRGF0ZXNTaXplIC0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dM
b25nICsgMTsKICAgICBpZiAocm93c1RvUHJ1bmUgPiAwKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERh
eSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmIChkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZGVsZXRl
TGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGRlbGV0
ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciwgbW9udGgs
IG1vbnRoRGF5IExJTUlUID87Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVMZWFzdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCByb3dzVG9QcnVuZSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGRlbGV0ZUxl
YXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
KG1fZGF0YWJhc2UsICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIs
IG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKLSAgICBpZiAoaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQo
MiwgdG9kYXkubW9udGgoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQuYmluZEludCgzLCB0b2RheS5tb250aERheSgpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRl
cyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOworICAgIGlmICgh
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIHRvZGF5LnllYXIoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgdG9kYXkubW9u
dGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRp
bmdEYXRlSWZOZWNlc3NhcnkgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8g
c3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQpAQCAtMzA2OSwxNiArMzA1NSwxNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdAogICAgICAg
ICBkYXlzQWdvSW5TZWNvbmRzID0gV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSAtIGRheXNUb1N1YnRyYWN0OwogICAgICAgICBhdXRvIGRhdGVUb0luc2VydCA9IE9w
ZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZGF5c0Fn
b0luU2Vjb25kcykpOwogCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5n
RGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKLSAgICAg
ICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEs
IGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQu
YmluZEludCgzLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAg
ICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRl
cyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOworICAgICAgICBp
ZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5i
aW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0
Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3Rpbmcg
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAg
IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiAKICAgICB1cGRhdGVPcGVyYXRp
bmdEYXRlc1BhcmFtZXRlcnMoKTsKQEAgLTMyMDEsMzYgKzMxODcsMzYgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoUHJpdmF0ZUMKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGluc2VydGluZyBhbiBh
dHRyaWJ1dGVkIHByaXZhdGUgY2xpY2sgbWVhc3VyZW1lbnQgdmFsdWUgaW50byB0aGUgZGF0YWJh
c2Ugd2l0aG91dCB2YWxpZCByZXBvcnQgdGltZXMuCiAgICAgICAgIEFTU0VSVChzb3VyY2VFYXJs
aWVzdFRpbWVUb1NlbmQgIT0gLTEgJiYgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgIT0g
LTEpOwogCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsIGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICAg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBz
dGF0ZW1lbnQuYmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25E
YXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZElu
dCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IHN0YXRlbWVudC5iaW5kSW50KDQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoNSwgcHJpb3JpdHkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNiwgYXR0cmlidXRp
b24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg3LCBzb3VyY2VFYXJsaWVz
dFRpbWVUb1NlbmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRU
ZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9r
ZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHN0YXRlbWVudC5iaW5kVGV4dCg5LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxp
bmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDEwLCBzb3VyY2VVbmxpbmth
YmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlT
dHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJs
ZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAgICAgIGlmICghc3RhdGVtZW50Cisg
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmli
dXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0LCBhdHRyaWJ1dGlvblRy
aWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRE
b3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg5LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6
IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omlu
c2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
c3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgxLCAqc291cmNl
RGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgy
LCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDQsIGF0dHJpYnV0aW9u
LnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2Vu
ID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNiwgc291cmNlVW5s
aW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwg
OiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRU
ZXh0KDcsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5
SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkpOworICAgIGlmICghc3RhdGVtZW50CisgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29u
ZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1
dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kRG91YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5C
YXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxl
VG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/
IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVl
cnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTM0MzUsMTQgKzM0MjEsMTQgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjphdHRyaWJ1dGlvblRvU3RyaW5nKFdlYkNvcmU6OlNRTGl0ZVMKIAogU3RyaW5n
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnREYXRhRXhpc3RzKG1fZGF0YWJhc2UsICJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9N
IFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENP
VU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9z
KTsKLSAgICBpZiAocHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sgfHwgcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKSB7CisgICAgYXV0byBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlz
dHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAoU0VMRUNUIENPVU5UKCop
IEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpIGFzIGNudDEsIChTRUxF
Q1QgQ09VTlQoKikgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpIGFzIGNu
dDIiX3MpOworICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzIHx8IHBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcgZmFp
bGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50
RGF0YUV4aXN0cy5nZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0
YUV4aXN0cy5nZXRDb2x1bW5JbnQoMSkpCisgICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dERhdGFFeGlzdHMtPmdldENvbHVtbkludCgwKSAmJiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRE
YXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQoMSkpCiAgICAgICAgIHJldHVybiAiXG5ObyBzdG9yZWQg
UHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zOwogCiAgICAgYXV0byB1bmF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCwgYWxsVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSwgInByaXZh
dGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmciX3MpOwpAQCAtMzU3MywxMSArMzU1OSwxMSBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclNlbnRBdHRyaWJ1
dGlvbihXZWJDb3JlOjpQcml2YXRlQwogICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZCB8fCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRF
TEVURSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VT
aXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3MpOwotICAg
IGlmIChjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuYmluZEludCgxLCAqc291cmNlU2l0ZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50
LmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hF
UkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/
Il9zKTsKKyAgICBpZiAoIWNsZWFyQXR0cmlidXRlZFN0YXRlbWVudAorICAgICAgICB8fCBjbGVh
ckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgy
LCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVh
ckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24gZmFpbGVkIHRv
IHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KQEAgLTM1ODcsMTggKzM1NzMsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHMKIHsKICAg
ICBhdXRvIGV4cGlyZWRUaW1lVG9TZW5kID0gV2FsbFRpbWU6Om5vdygpIC0gMV9oOwogCi0gICAg
YXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBT
RVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Iik7Ci0gICAgYXV0byBlYXJsaWVzdFRp
bWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVz
dFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCIpOworICAgIGF1dG8gZWFybGllc3RUaW1l
VG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQ
REFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlID0gPyJfcyk7CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3Rp
bmF0aW9uU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rl
c3RpbmF0aW9uID0gbnVsbCJfcyk7CiAKLSAgICBpZiAoZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRp
bWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQKKyAgICAgICAgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZXhwaXJlZFRp
bWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBpZiAo
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmRU
b0Rlc3RpbmF0aW9uU3RhdGVtZW50IHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25T
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4
cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAppbmRleCA1MjMyMzNk
MThiMDQwMDNlZjMwZDMzNjMyY2ZlNjJmMDJmMjdhMzQ4Li4zYTY1ZmNjZWYxODlmMDdjODkxNjVh
OWM2MjI3YTVjYWQxNDA3MDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKQEAg
LTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGdldEl0ZW1zUXVlcnlTdHJpbmdbXSA9ICJTRUxFQ1Qg
a2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSI7CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGdl
dEl0ZW1zUXVlcnlTdHJpbmcgeyAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiX3Mg
fTsKIAogUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3Jl
YXRlKFN0cmluZyYmIGRhdGFiYXNlUGF0aCwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewpAQCAt
OTksMTAgKzk5LDEwIEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1pZ3JhdGVJdGVtVGFi
bGVJZk5lZWRlZCgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJJdGVtVGFibGUi
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9k
YXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIik7CisgICAgYXV0
byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00g
SXRlbVRhYmxlIExJTUlUIDEiX3MpOwogCiAgICAgLy8gVGhpcyBxdWVyeSBpc24ndCBldmVyIGV4
ZWN1dGVkLCBpdCdzIGp1c3QgdXNlZCB0byBjaGVjayB0aGUgY29sdW1uIHR5cGUuCi0gICAgaWYg
KHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCisgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5
LT5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IC8vIENyZWF0ZSBhIG5ldyB0YWJsZSB3aXRoIHRoZSByaWdodCB0eXBlLCBjb3B5IGFsbCB0aGUg
ZGF0YSBvdmVyIHRvIGl0IGFuZCB0aGVuIHJlcGxhY2UgdGhlIG5ldyB0YWJsZSB3aXRoIHRoZSBv
bGQgdGFibGUuCkBAIC0zMDIsMTkgKzMwMiwxOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNl
OjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0
YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBpZiAocXVlcnku
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAg
aWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3VudCBudW1iZXIg
b2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7Ci0gICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKHF1ZXJ5LT5zdGVwKCkgIT0gU1FMSVRF
X1JPVykgewogICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGluZyBudW1i
ZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiAhcXVlcnkuZ2V0Q29sdW1uSW50KDApOwor
ICAgIHJldHVybiAhcXVlcnktPmdldENvbHVtbkludCgwKTsKIH0KIAogdm9pZCBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6b3BlbklmRXhpc3RpbmcoKQpAQCAtMzMwLDE0ICszMjksMTUgQEAgdm9pZCBM
b2NhbFN0b3JhZ2VEYXRhYmFzZTo6b3BlbklmRXhpc3RpbmcoKQogICAgICAgICBzY29wZWRTdGF0
ZW1lbnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CiB9CiAKLVNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRT
dGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgY29uc3QKK1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFNRTGl0
ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25zdAogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLCBx
dWVyeSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1l
bnRPckVycm9yID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50T3JFcnJvcikKICAgICAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CisgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9y
RXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJh
c2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgK
aW5kZXggYjdlZjAzNGQyYTg2YzI0YmQwNGRmNzk0MzE3Y2FiYWZjMDNlNzQ2Yy4uMzk4ZGE3ZGNm
YjI4ZGQzMGQyZTYwYTUxNGRkZTliMTlkNTUzNjIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1pZ3JhdGVJdGVtVGFi
bGVJZk5lZWRlZCgpOwogICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5KCkgY29uc3Q7CiAKLSAgICBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5KSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBz
Y29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4m
LCBBU0NJSUxpdGVyYWwgcXVlcnkpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VQYXRo
OwogICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCmluZGV4
IGY0NTA2ZjhiZDE0MGZkNDk0YzExMDBhY2ZhNDQ1MzRkMDRhMWU3ZGIuLjI0N2NjMjNlN2JjNDk0
NTI0NzNjMmFlNjkyOGMwNjkzMWMyODRiNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcApAQCAtNjYsNyArNjYsOCBAQCBJY29uRGF0
YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0YWJhc2VXcml0
ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgIlNF
TEVDVCB2YWx1ZSBGUk9NIEljb25EYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ1ZlcnNpb24nOyIp
LmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byB2ZXJzaW9uU3RhdGVtZW50ID0gbV9kYi5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJhc2VJbmZvIFdIRVJF
IGtleSA9ICdWZXJzaW9uJzsiX3MpOworICAgICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbk51bWJl
ciA9IHZlcnNpb25TdGF0ZW1lbnQgPyB2ZXJzaW9uU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkg
OiAwOwogICAgICAgICBpZiAoZGF0YWJhc2VWZXJzaW9uTnVtYmVyID4gY3VycmVudERhdGFiYXNl
VmVyc2lvbikgewogICAgICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkRhdGFiYXNlIHZlcnNp
b24gbnVtYmVyICVkIGlzIGdyZWF0ZXIgdGhhbiBvdXIgY3VycmVudCB2ZXJzaW9uIG51bWJlciAl
ZCAtIGNsb3NpbmcgdGhlIGRhdGFiYXNlIHRvIHByZXZlbnQgb3ZlcndyaXRpbmcgbmV3ZXIgdmVy
c2lvbnMiLAogICAgICAgICAgICAgICAgIGRhdGFiYXNlVmVyc2lvbk51bWJlciwgY3VycmVudERh
dGFiYXNlVmVyc2lvbik7CkBAIC04NCw3ICs4NSw3IEBAIEljb25EYXRhYmFzZTo6SWNvbkRhdGFi
YXNlKGNvbnN0IFN0cmluZyYgcGF0aCwgQWxsb3dEYXRhYmFzZVdyaXRlIGFsbG93RGF0YWJhc2VX
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWR1Y2Ugc3FsaXRlIFJBTSBjYWNoZSBzaXplIGZy
b20gZGVmYXVsdCAyMDAwIHBhZ2VzICh+MS41a0IgcGVyIHBhZ2UpLiAzTUIgb2YgY2FjaGUgZm9y
IGljb24gZGF0YWJhc2UgaXMgb3ZlcmtpbGwuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudChtX2Ri
LCAiUFJBR01BIGNhY2hlX3NpemUgPSAyMDA7IikuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAgICAg
bV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIGNhY2hlX3NpemUgPSAyMDA7Il9zKTsKIAogICAg
ICAgICBpZiAoYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKSB7
CiAgICAgICAgICAgICBtX3BydW5lVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPElj
b25EYXRhYmFzZT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkljb25EYXRhYmFzZTo6cHJ1
bmVUaW1lckZpcmVkKTsKQEAgLTE3NSwxNyArMTc2LDE3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpw
b3B1bGF0ZVBhZ2VVUkxUb0ljb25VUkxNYXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJp
bmcgaW1wb3J0UXVlcnkgPSBtYWtlU3RyaW5nKCJTRUxFQ1QgUGFnZVVSTC51cmwsIEljb25JbmZv
LnVybCwgSWNvbkluZm8uc3RhbXAgRlJPTSBQYWdlVVJMIElOTkVSIEpPSU4gSWNvbkluZm8gT04g
UGFnZVVSTC5pY29uSUQ9SWNvbkluZm8uaWNvbklEIFdIRVJFIEljb25JbmZvLnN0YW1wID4gIiwg
Zmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNlY29u
ZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSwgJzsnKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVl
cnkobV9kYiwgaW1wb3J0UXVlcnkpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7CisgICAgYXV0byBxdWVyeSA9IG1fZGIucHJlcGFyZVN0YXRlbWVudChpbXBvcnRRdWVy
eSk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVw
YXJlIGljb24gdXJsIGltcG9ydCBxdWVyeSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgYXV0byByZXN1bHQgPSBxdWVyeS0+
c3RlcCgpOwogICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX3BhZ2VVUkxUb0ljb25VUkxNYXBM
b2NrKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgbV9wYWdl
VVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1
bW5UZXh0KDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgICAgICBtX3Bh
Z2VVUkxUb0ljb25VUkxNYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS0+Z2V0
Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgfQog
CiAgICAgc3RhcnRQcnVuZVRpbWVyKCk7CkBAIC0yMTQsMTIgKzIxNSwxMiBAQCB2b2lkIEljb25E
YXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKCkKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7CiAK
ICAgICBpZiAoIW1fcHJ1bmVJY29uc1N0YXRlbWVudCkgewotICAgICAgICBtX3BydW5lSWNvbnNT
dGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9N
IEljb25JbmZvIFdIRVJFIHN0YW1wIDw9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fcHJ1bmVJY29u
c1N0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHBydW5l
SWNvbnNTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJ
Y29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFwcnVuZUljb25z
U3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQg
cHJ1bmVJY29ucyBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9
IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9wcnVu
ZUljb25zU3RhdGVtZW50ID0gcHJ1bmVJY29uc1N0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1
ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgxLCBmbG9vcigoV2FsbFRpbWU6Om5vdygpIC0gbm90VXNlZEljb25FeHBpcmF0aW9uVGltZSku
c2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpKSAhPSBTUUxJVEVfT0spIHsKQEAgLTIzMCw4
ICsyMzEsOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKCkKICAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKICAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OwogICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfRE9ORSkg
ewotICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJY29uRGF0YSBXSEVS
RSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyIpOwotICAgICAg
ICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIGljb25JRCBO
T1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Iik7CisgICAgICAgIG1fZGIuZXhl
Y3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIGljb25JRCBOT1QgSU4gKFNF
TEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Il9zKTsKKyAgICAgICAgbV9kYi5leGVjdXRlQ29t
bWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNv
bklEIEZST00gSWNvbkluZm8pOyJfcyk7CiAgICAgfQogICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVu
dC0+cmVzZXQoKTsKIApAQCAtMjg1LDEyICsyODYsMTIgQEAgT3B0aW9uYWw8aW50NjRfdD4gSWNv
bkRhdGFiYXNlOjppY29uSURGb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgYm9vbCYg
ZXgKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7CiAKICAgICBpZiAoIW1faWNvbklERm9ySWNv
blVSTFN0YXRlbWVudCkgewotICAgICAgICBtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBt
YWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVDVCBJY29uSW5mby5pY29uSUQs
IEljb25JbmZvLnN0YW1wIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8udXJsID0gKD8pOyIp
OwotICAgICAgICBpZiAobV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gaWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9IG1f
ZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlNFTEVDVCBJY29uSW5mby5pY29uSUQsIEljb25JbmZv
LnN0YW1wIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8udXJsID0gKD8pOyJfcyk7CisgICAg
ICAgIGlmICghaWNvbklERm9ySWNvblVSTFN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGljb25JREZvckljb25VUkwgZmFpbGVkIik7Ci0gICAg
ICAgICAgICBtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQorICAgICAgICBtX2ljb25JREZvcklj
b25VUkxTdGF0ZW1lbnQgPSBpY29uSURGb3JJY29uVVJMU3RhdGVtZW50LnZhbHVlKCkubW92ZVRv
VW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVu
dC0+YmluZFRleHQoMSwgaWNvblVSTCkgIT0gU1FMSVRFX09LKSB7CkBAIC0zMTUsMTIgKzMxNiwx
MiBAQCBib29sIEljb25EYXRhYmFzZTo6c2V0SWNvbklERm9yUGFnZVVSTChpbnQ2NF90IGljb25J
RCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0
ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fc2V0SWNvbklERm9y
UGFnZVVSTFN0YXRlbWVudCkgewotICAgICAgICBtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJTlRPIFBhZ2VV
UkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Iik7Ci0gICAgICAgIGlmIChtX3NldElj
b25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0
YXRlbWVudCgiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29uSUQpIFZBTFVFUyAoKD8pLCA/
KTsiX3MpOworICAgICAgICBpZiAoIXNldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBzZXRJY29uSURGb3JQYWdl
VVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAg
ICBtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBzZXRJY29uSURGb3JQYWdlVVJMU3Rh
dGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fc2V0
SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC0+YmluZFRleHQoMSwgcGFnZVVSTCkgIT0gU1FMSVRF
X09LCkBAIC0zNDIsMTIgKzM0MywxMiBAQCBWZWN0b3I8Y2hhcj4gSWNvbkRhdGFiYXNlOjppY29u
RGF0YShpbnQ2NF90IGljb25JRCkKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7CiAKICAgICBp
ZiAoIW1faWNvbkRhdGFTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9
IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiU0VMRUNUIEljb25EYXRhLmRhdGEg
RlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlm
IChtX2ljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gaWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJTRUxF
Q1QgSWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/
KTsiX3MpOworICAgICAgICBpZiAoIWljb25EYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgaWNvbkRhdGEgZmFpbGVkIik7Ci0gICAgICAg
ICAgICBtX2ljb25EYXRhU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiB7
IH07CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9IGljb25EYXRhU3Rh
dGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1faWNv
bkRhdGFTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBpY29uSUQpICE9IFNRTElURV9PSykgewpAQCAt
MzcwLDIwICszNzEsMjAgQEAgT3B0aW9uYWw8aW50NjRfdD4gSWNvbkRhdGFiYXNlOjphZGRJY29u
KGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgVmVjdG9yPGNoYXIKICAgICBBU1NFUlQobV9h
bGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYg
KCFtX2FkZEljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9hZGRJY29uU3RhdGVtZW50ID0gbWFr
ZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBJY29uSW5mbyAodXJs
LCBzdGFtcCkgVkFMVUVTICg/LCAwKTsiKTsKLSAgICAgICAgaWYgKG1fYWRkSWNvblN0YXRlbWVu
dC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGFkZEljb25TdGF0ZW1l
bnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29uSW5mbyAodXJs
LCBzdGFtcCkgVkFMVUVTICg/LCAwKTsiX3MpOworICAgICAgICBpZiAoIWFkZEljb25TdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBhZGRJY29u
IGZhaWxlZCIpOwotICAgICAgICAgICAgbV9hZGRJY29uU3RhdGVtZW50ID0gbnVsbHB0cjsKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9hZGRJ
Y29uU3RhdGVtZW50ID0gYWRkSWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KICAgICBpZiAoIW1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9h
ZGRJY29uRGF0YVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAi
SU5TRVJUIElOVE8gSWNvbkRhdGEgKGljb25JRCwgZGF0YSkgVkFMVUVTICg/LCA/KTsiKTsKLSAg
ICAgICAgaWYgKG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgYXV0byBhZGRJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBT
dGF0ZW1lbnQoIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVFUyAoPywg
Pyk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGFkZEljb25EYXRhIGZhaWxlZCIpOwot
ICAgICAgICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvbkRhdGFT
dGF0ZW1lbnQgPSBhZGRJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KIAogICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGljb25V
UkwpICE9IFNRTElURV9PSykgewpAQCAtNDEzLDEyICs0MTQsMTIgQEAgdm9pZCBJY29uRGF0YWJh
c2U6OnVwZGF0ZUljb25UaW1lc3RhbXAoaW50NjRfdCBpY29uSUQsIGludDY0X3QgdGltZXN0YW1w
KQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6
Olllcyk7CiAKICAgICBpZiAoIW1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCkgewotICAg
ICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0
YXRlbWVudD4obV9kYiwgIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAgPSA/IFdIRVJFIGljb25J
RCA9ID87Iik7Ci0gICAgICAgIGlmIChtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byB1cGRhdGVJY29uVGltZXN0YW1w
U3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiVVBEQVRFIEljb25JbmZvIFNF
VCBzdGFtcCA9ID8gV0hFUkUgaWNvbklEID0gPzsiX3MpOworICAgICAgICBpZiAoIXVwZGF0ZUlj
b25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5n
IHN0YXRlbWVudCB1cGRhdGVJY29uVGltZXN0YW1wIGZhaWxlZCIpOwotICAgICAgICAgICAgbV91
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSB1
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAg
ICAgfQogCiAgICAgaWYgKG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC0+YmluZEludDY0
KDEsIHRpbWVzdGFtcCkgIT0gU1FMSVRFX09LIHx8IG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRl
bWVudC0+YmluZEludDY0KDIsIGljb25JRCkgIT0gU1FMSVRFX09LKSB7CkBAIC00MzcsMjggKzQz
OCwyOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6ZGVsZXRlSWNvbihpbnQ2NF90IGljb25JRCkKICAg
ICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMp
OwogCiAgICAgaWYgKCFtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCkgewotICAgICAg
ICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3Rh
dGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBQYWdlVVJMLmljb25JRCA9
ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50LT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlUGFnZVVSTHNGb3JJ
Y29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gUGFn
ZVVSTCBXSEVSRSBQYWdlVVJMLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0
ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVw
YXJpbmcgc3RhdGVtZW50IGRlbGV0ZVBhZ2VVUkxzRm9ySWNvbiBmYWlsZWQiKTsKLSAgICAgICAg
ICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0
YXRlbWVudCA9IGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQpIHsK
LSAgICAgICAgbV9kZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3Rh
dGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNvbklE
ID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVJY29uRGF0YVN0YXRlbWVudC0+cHJlcGFy
ZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZUljb25EYXRhU3RhdGVtZW50
ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUg
SWNvbkRhdGEuaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlSWNvbkRhdGFT
dGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBk
ZWxldGVJY29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVJY29uRGF0YVN0YXRlbWVu
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9k
ZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IGRlbGV0ZUljb25EYXRhU3RhdGVtZW50LnZhbHVlKCku
bW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9kZWxldGVJY29uU3RhdGVtZW50
KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3Rh
dGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8uaWNvbklE
ID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVJY29uU3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlSWNvblN0YXRlbWVudCA9IG1fZGIu
cHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZv
Lmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZUljb25TdGF0ZW1lbnQpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBkZWxldGVJY29uIGZh
aWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gbnVsbHB0cjsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RlbGV0ZUljb25TdGF0ZW1l
bnQgPSBkZWxldGVJY29uU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAg
fQogCiAgICAgaWYgKG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgaWNvbklEKSAhPSBTUUxJVEVfT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
U3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdl
L1N0b3JhZ2VBcmVhU3luYy5jcHAKaW5kZXggY2U1YzI5YmFhNTgwNWNhNDJmNDhlZjA1MGI4MzJk
MGNkNWNjZTExYy4uY2FlMDgyZjEzZGNkMzY4YzQ4MTk1YmUzMTFmMjBhNWI2NjQ0OGZhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAg
LTI3OCw5ICsyNzgsOSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlm
TmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAx
Iik7CisgICAgICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKICAgICAgICAgLy8gdGhpcyBx
dWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLgotICAgICAgICBpZiAocXVlcnkuaXNDb2x1bW5EZWNs
YXJlZEFzQmxvYigwKSkKKyAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LT5pc0NvbHVtbkRlY2xh
cmVkQXNCbG9iKDApKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI2LDggKzMy
Niw4IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VM
RUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIXF1
ZXJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0
ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzM1LDEwICszMzUsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnBlcmZvcm1JbXBvcnQoKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbU1hcDsK
IAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHF1ZXJ5
LT5zdGVwKCk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGl0
ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQoMCksIHF1ZXJ5LmdldENvbHVtbkJsb2JBc1N0
cmluZygxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaXRlbU1h
cC5zZXQocXVlcnktPmdldENvbHVtblRleHQoMCksIHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJp
bmcoMSkpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTQxMiwyNyArNDEyLDI3IEBAIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mIGl0ZW1zCiAKICAgICAvLyBJZiB0aGUgY2xlYXIgZmxhZyBpcyBzZXQsIHRoZW4g
d2UgY2xlYXIgYWxsIGl0ZW1zIG91dCBiZWZvcmUgd2Ugd3JpdGUgYW55IG5ldyBvbmVzIGluLgog
ICAgIGlmIChjbGVhckl0ZW1zKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhcihtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7Ci0gICAgICAgIGlmIChjbGVhci5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gY2xlYXIgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgICAgIGlmICgh
Y2xlYXIpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xlYXIg
c3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBjbGVh
ci5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBjbGVhci0+c3RlcCgpOwogICAgICAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIs
IHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJdGVtVGFibGUg
VkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gaW5zZXJ0ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnQpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fu
bm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmUobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOwotICAgIGlmIChyZW1vdmUucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGF1dG8gcmVtb3ZlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3MpOworICAgIGlmICghcmVt
b3ZlKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgZGVsZXRlIHN0YXRl
bWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC00NDMsMjEgKzQ0MywyMSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBp
dGVtcwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywg
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpdGVtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgLy8gQmFzZWQgb24gdGhlIG51bGwtbmVzcyBvZiB0aGUgc2Vjb25kIGFy
Z3VtZW50LCBkZWNpZGUgd2hldGhlciB0aGlzIGlzIGFuIGluc2VydCBvciBhIGRlbGV0ZS4KLSAg
ICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92
ZSA6IGluc2VydDsKKyAgICAgICAgYXV0byYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyBy
ZW1vdmUgOiBpbnNlcnQ7CiAKLSAgICAgICAgcXVlcnkuYmluZFRleHQoMSwgaXQtPmtleSk7Cisg
ICAgICAgIHF1ZXJ5LT5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUg
c2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJp
bmQgaXQgYXMgdGhlIHZhbHVlLgogICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CisgICAgICAgICAgICBxdWVy
eS0+YmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnku
c3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3Vs
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHF1ZXJ5LnJlc2V0
KCk7CisgICAgICAgIHF1ZXJ5LT5yZXNldCgpOwogICAgIH0KICAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKIH0KQEAgLTQ5OSwzMSArNDk5LDMzIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpkZWxl
dGVFbXB0eURhdGFiYXNlKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNU
IENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9m
IHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgYXV0byBjb3VudCA9IFsmXSB7CisgICAgICAgIGF1dG8gcXVlcnkgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJf
cyk7CisgICAgICAgIGlmICghcXVlcnkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIp
OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJlc3Vs
dCA9IHF1ZXJ5LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9m
IHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KIAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7Ci0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExPR19FUlJPUigiTm8gcmVzdWx0
cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOworICAgICAgICByZXR1cm4gcXVlcnktPmdldENvbHVtbkludCgwKTsKKyAgICB9KCk7
CisgICAgaWYgKGNvdW50KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgaW50IGNvdW50
ID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOwotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgcXVl
cnkuZmluYWxpemUoKTsKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICBpZiAo
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtkYXRhYmFzZUlkZW50aWZpZXIgPSBtX2RhdGFiYXNlSWRlbnRpZmllci5p
c29sYXRlZENvcHkoKV0gewotICAgICAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNl
RmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNl
SWRlbnRpZmllcik7Ci0gICAgICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGF0
YWJhc2VGaWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVs
ZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIH0KKyAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgaWYgKFN0b3JhZ2VUcmFj
a2VyOjp0cmFja2VyKCkuaXNBY3RpdmUoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtk
YXRhYmFzZUlkZW50aWZpZXIgPSBtX2RhdGFiYXNlSWRlbnRpZmllci5pc29sYXRlZENvcHkoKV0g
eworICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW5XaXRo
SWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpOworICAgICAgICB9KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxE
YXRhYmFzZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQorICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5h
bWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9T
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAppbmRleCAwNjEwYzk0NmYyZWRmOTg2ZWJjYTk4YjZh
N2QyMWJmMGE5MzM5NjQ2Li5jN2YzMGMzMDkxOTQ0OWNmOTFkMGE1YzMwNDdjMGU2OWUwOGJkZmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAK
QEAgLTE4OSw4ICsxODksOCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2lu
SWRlbnRpZmllcnMoKQogICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewogICAgICAg
ICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25D
b3VudGVyOwogCi0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgICAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdp
bnMiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xOTksOCArMTk5LDggQEAgdm9pZCBTdG9yYWdl
VHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja09yaWdpbnMobV9vcmln
aW5TZXRNdXRleCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQu
c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNldC5h
ZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkuaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAg
ICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cp
CisgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC0zMTYsMTYgKzMxNiwx
NiBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8s
ID8pIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVudGlm
aWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAgICAgCi0gICAg
c3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luSWRlbnRpZmllcik7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUp
OwogICAgIAotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlm
IChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAKICAgICB7CkBAIC00MDQsMjMgKzQwNCwyMyBAQCB2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCiAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdp
bnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdp
biwgcGF0aCBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAogICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGlmICghY2FuRGVsZXRl
T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKKyAgICB3aGlsZSAoKHJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmICghY2FuRGVs
ZXRlT3JpZ2luKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDEpKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQtPmdl
dENvbHVtblRleHQoMSkpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fY2xpZW50TXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC00NDEsMTIgKzQ0MSwxMiBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRl
QWxsT3JpZ2lucygpCiAgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwogICAgICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9N
IE9yaWdpbnMiKTsKLSAgICAgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgaWYgKCFkZWxl
dGVTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
ZGVsZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAg
ICAgIGlmICghZGVsZXRlU3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUxOSwxMyArNTE5LDEzIEBAIHZv
aWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hl
cmUgb3JpZ2luPT8iKTsKLSAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyJfcyk7CisgICAgaWYg
KCFkZWxldGVTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFy
ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRh
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRlbGV0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKSB7CisgICAgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewog
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIG9yaWdpbiAn
JXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC02MTQsMTcgKzYxNCwxNyBAQCBTdHJpbmcgU3RvcmFnZVRyYWNrZXI6OmRhdGFi
YXNlUGF0aEZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiAKICAgICBT
UUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
IHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHBhdGhTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcGF0aFN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJF
IG9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIXBhdGhTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2luICclcyci
LCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgIH0KLSAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZp
ZXIpOwotICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKKyAgICBwYXRoU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0g
cGF0aFN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICByZXR1cm4gcGF0aFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsK
IH0KICAgICAKIGxvbmcgbG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlza1VzYWdlRm9yT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggODE1NzQ3Y2U3NDZjZDFhMzk1OTQ4MjY0YTc3ODdiMDlhMmM5ODk1
Ni4uMmE0MjE5NjUyYzE1ZDE0NGRmZDcyZGQzYjE5ZmFjM2MwNzcxY2M4NiAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9k
ZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1Nzkx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRl
IGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0ZW1lbnQg
QVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJhbHMuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFj
a2VyVGVzdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFkZFRvRGF0YWJhc2VzVGFibGUp
OgorCiAyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgSW50cm9kdWNlIEZpbGVTeXN0ZW06OmhhcmRMaW5rQ291bnQoKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3Qu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFj
a2VyVGVzdC5tbQppbmRleCA2NjgyYmY0NTg2NjYxMTU1M2YxMGExN2U3MmE3MjllY2FhNjk1OGM0
Li4yYzdmNDQ0ZThiYzhhZWI5MDZjMGJiOTBhNjliOTU1M2M3MTgxMzE2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVz
dC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJh
c2VUcmFja2VyVGVzdC5tbQpAQCAtNjYsMTIgKzY2LDEyIEBAIHN0YXRpYyB2b2lkIGFkZFRvRGF0
YWJhc2VzVGFibGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luCiAgICAgU1FMaXRlRGF0YWJhc2UgZGF0YWJhc2U7CiAgICAgZGF0YWJhc2Uub3BlbihkYXRh
YmFzZVBhdGgpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGFkZERhdGFiYXNlU3RhdGVtZW50KGRh
dGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVF
UyAoPywgPywgPyk7Iik7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQucHJlcGFyZSgpOwotICAg
IGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZp
ZXIoKSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMiwgbmV3RGF0YWJhc2VO
YW1lKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgzLCBuZXdEYXRhYmFzZVBh
dGgpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CisgICAgaWYg
KGF1dG8gYWRkRGF0YWJhc2VTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJ
TlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/
KTsiX3MpKSB7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+
YmluZFRleHQoMiwgbmV3RGF0YWJhc2VOYW1lKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1l
bnQtPmJpbmRUZXh0KDMsIG5ld0RhdGFiYXNlUGF0aCk7CisgICAgICAgIGFkZERhdGFiYXNlU3Rh
dGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworICAgIH0KIAogICAgIGRhdGFiYXNlLmNsb3NlKCk7
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428596</attachid>
            <date>2021-05-13 20:50:23 -0700</date>
            <delta_ts>2021-05-13 23:08:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513205022.patch</filename>
            <type>text/plain</type>
            <size>269189</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3MmQ3MjVjNzQxODM3YmVhZmYyN2Zl
Nzk1ZWI3NDIyZDg3ZjdhMDYuLmRmMDZmOTY3ZGY2OWQ2YWE1OGNlNDIyMDAyNWY5ZWU1ZDcyNmNm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpoYXJkTGlu
a0NvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDZkN2Q2NTdmOWExNmUzYmRhOWUwYmU0MDQ1NGI3ZGIx
ODE4NDcxLi5lYTllZTA2MzkzZTNjNmM0Y2MwOTRhOWYxNzZiZDAzNTVkYzIxMGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNy
ZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBUaGUgU1FMaXRlU3RhdGVtZW50IGNv
bnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2UgbmV2ZXIgaGF2ZSBhCisgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVuICJwcmVwYXJlZCIuIE9ubHkgdGhl
IFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBjb25zdHJ1Y3QgU1FMaXRlU3RhdGVt
ZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBhc3MKKyAgICAgICAgICBhIFNRTGl0
ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgU1FMaXRlU3RhdGVtZW50
IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFORCBwcmVwYXJlIGEgU1FMaXRlU3Rh
dGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3Rh
dGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisgICAgICAgICAgU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEgaGVhcCBvbmUuIFRoZXNlIGZ1bmN0
aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+IHR5cGUgc28gdGhleSB3aWxsIGVp
dGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9yIGFu
IHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAgICAgIC0gVGhlIHByZXBhcmUqU3Rh
dGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcgYWxsb2NhdGlvbnMgaW4gbW9zdAor
ICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMgdGFraW5nIGluIHRoZSBxdWVyeSBh
cyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBmaW5hbGl6ZSgpIGZ1bmN0aW9uIG9u
IFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cworICAgICAgICAgIGFy
ZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0
ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlvbnMuIFRoZSBTUUxpdGVTdGF0ZW1l
bnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVtZW50CisgICAgICAgICAgc28gdXNl
cnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0ZW1lbnQgaWYgdGhleSBuZWVkIHRo
ZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBhdCBhIGNlcnRhaW4gcG9pbnQgKGUu
Zy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAgICAgIC0gRHJvcCB0aGUgcHJlcGFy
ZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1lbnQgbWVtYmVyIGZ1bmN0aW9ucyBu
b3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBhcmUgYWx3YXlzIHByZXBhcmVkLgor
ICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5IGFzIGEgU3RyaW5nIGRhdGEgbWVt
YmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAgICAgICBUaGlzIGlzIG5vIGxvbmdl
ciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUgcHJlcGFyZSBzdGVwIGFmdGVyIHRo
ZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtlcyB0aGUgU1FMaXRlU3RhdGVtZW50
IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Y3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVG
b3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpyZXNldEFuZFJlYmluZFByZUlu
ZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRW
YWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVO
YW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5v
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFu
ZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnF1b3RhTm9Mb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1wdHkpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9y
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRp
bmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjaGVja0Rh
dGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNlYXJjaENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERvbWFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Bl
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZXhl
Y3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJldHVybnNB
dExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0YWJs
ZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZE51bGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVu
dURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OnZlcmlm
eVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmV4
ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51REI6OmNy
ZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlv
bkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisKIDIwMjEtMDUtMTMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBXazIgXSBtZWRp
YS9tZWRpYS1mcmFnbWVudHMvVEMwMDUxLmh0bWwgaXMgZmxha2V5IGNyYXNoaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQ5MjJmMTI1OWM4NjE5N2Y4YTdlZTg4NjQ3NGE0ZjMwOWQzM2VmMjEuLmVmZTRmYjZmZjUy
OGI1MDc4OWM0NWI3YWRjMGFkZDVhOWQwNmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0
ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFN0
b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJT
dGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKToK
KyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0
OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxldGVJY29uKToKKwog
MjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFBy
b2Nlc3Mgc3VzcGVuc2lvbiBtYXkgYmUgZGVsYXllZCBieSB1cCB0byA1IHNlY29uZHMgYWZ0ZXIg
dGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkYXRhYmFzZSBhY3Rpdml0eQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBmYmI0MWUyNmFhMDFlMDZiMzQ4YjJmZTM5ODc5ZWFjZjM3NDBkMjdhLi40MjRiYmFk
MDk1MGIxNmYwMmVjNGVkY2Y0YTc3ZDRhNzZiZjI5NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0
aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2Ug
JiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3Jl
IEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNr
ZXI6OmRhdGFiYXNlUGF0aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTEgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IFdURjo6RmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Vu
aXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2MGNm
ZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNmMjM3
YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKKysr
IGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVSZWYo
VCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVybiAq
bV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxj
bGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1
ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBj
bGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDogbV9y
ZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUuLmNj
ZDYzYjNkZmFiNGEzYTY5ZWFhZjkyODFkZWE2NDNlZThmZmVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2No
ZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVt
YTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25h
bWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAog
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM1
OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgsMTMg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiAK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2Ig
ZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVu
IGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTM5
MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBp
ZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hl
bWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0Mjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
VGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNv
cmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcgKzQ1
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVj
b3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyArNTgz
LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAog
ICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50
TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0
YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxp
dGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVF
UyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIo
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNpb25z
IGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBkb2Vz
bid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgICAg
IC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFi
YXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFi
YXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBz
cWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUlu
Zm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVS
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJvb2wg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZShj
b25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBr
ZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9i
amVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZv
OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4SW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsK
LSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1h
cC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1Zl
Y3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkg
PSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8gX1Rl
bXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgICAg
IGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAgICAg
fQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAi
U0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3JlUmVj
b3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFs
dWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5nZXQo
eyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtl
eUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1ZmZl
cik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJl
Y29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwgPyk7
Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNv
bnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAg
ICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYgKHNx
bC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRoZSBp
bmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVz
JykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDAw
LDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVpbnQ2
NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNp
b24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9l
cyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNp
b24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwxNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9
IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBr
ZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0g
c3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5h
bWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBr
ZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigyLCBr
ZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBvYmpl
Y3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSksIGtl
eVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDExICsx
MDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZN
b3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTEw
NTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwg
bmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJ
bmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBG
Uk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9t
IHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50NjQo
Mik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7
CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAg
ICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAKICAg
ICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4S2V5
UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wg
bXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVuaXF1
ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0g
c3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBk
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQpOwog
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8
IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSArMTE2
MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAiU0VM
RUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUn
OyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3MpOwor
ICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJl
IHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29sdW1u
VGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7
Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJf
cyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENvbHVt
blRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRv
ZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJz
aW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQsMTAg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaW5m
by5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAgICAg
IG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVlID0g
PyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJp
bmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAoIXNx
bAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5l
d1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMTcsMTIgKzMwMjEsMTIgQEAgdm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3Jl
ZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmls
ZXM7Il9zKTsKLSAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0
byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJP
TSBCbG9iRmlsZXM7Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQo
c3FsLmdldENvbHVtblRleHQoMCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwu
c3RlcCgpOworICAgICAgICAgICAgICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0RPTkUpCkBAIC0zMDYxLDE0ICszMDY1LDEzIEBAIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhCiAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQog
Ci0gICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7
CisgICAgaWYgKG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQog
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAg
IGlmIChtX3NxbGl0ZURCKSB7Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURC
LCBzdGF0ZW1lbnQpOwotICAgICAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0
PHNpemVfdD4oc3FsKV0tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2Nh
Y2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAg
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3RhdGVtZW50KTsKKyAgICAgICAgaWYgKHNxbFN0YXRlbWVudCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gc3FsU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0uZ2V0KCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggYzJjZWQ4NDE5MzAw
YjVhOGM1OGE4ZTg0MDIyMmYyNTU2MTI1YjM1Yy4uZjI4OTA4Y2E1MTVlN2I5YjJmZmY4NDg4YzAw
NmQyYjBlODFiYmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTIzNSwxMiArMjM1LDEy
IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVTUUxpdGVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRVcHBlcktleS5pc051bGwoKSk7CiAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOwogCi0gICAgbV9zdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKSwgc3FsKTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChwcmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBtX3N0YXRlbWVudCA9IHN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogCiAgICAgcmV0dXJuIGJpbmRBcmd1bWVudHMo
KTsKIH0KQEAgLTM0MSwxMiArMzQxLDEyIEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpyZXNldEFu
ZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkoKQogCiAgICAgYXV0byYgZGF0YWJh
c2UgPSBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpOwogICAg
IGlmICghbV9wcmVJbmRleFN0YXRlbWVudCkgewotICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCBidWlsZFByZUluZGV4U3Rh
dGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Ci0KLSAgICAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcmVJbmRleFN0
YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKKyAgICAgICAgaWYgKCFwcmVJbmRleFN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBwcmUgc3RhdGVt
ZW50IC0gJyVzJyIsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBtX3ByZUluZGV4U3RhdGVtZW50ID0gcHJlSW5k
ZXhTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVJbmRleFN0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKQEAgLTU4OCw5ICs1
ODgsOCBAQCBTUUxpdGVJREJDdXJzb3I6OkZldGNoUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50
ZXJuYWxGZXRjaE5leHRSZWNvcmQoU1FMaXRlQ3VycwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50IHx8IG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5k
IG9iamVjdFN0b3JlSUQgPSA/OyIpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0
byBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhU
KSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAppbmRleCBhYjQ3ODI2YzgzZWJiNThiNzdiNGE2MTUyNzEzOTIxMzNjZjg0
MGU2Li5lNzRlMjhmNWI5ZTVmNzlmYzVkNWNkMGNlNzY2Y2EwZGRmMWJmNDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtMTEzLDE4
ICsxMTMsMTUgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
bWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29uc3QKIAogc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHZhbHVlKTsKIAotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0
YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNCwxNyArMTMxLDE1IEBA
IHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zCiAKIHN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3Vs
dEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHN0YXRlbWVudC5lcnJvcigpLCBxdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0g
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTcxNCw4ICs3MDksOCBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1
dG8gc3RhdGVtZW50ID0gc3FsaXRlRGF0YWJhc2UoKS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlz
dCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CkBAIC03MjMsOCArNzE4LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFt
ZXM7CiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAobmFtZSAhPSB1bnF1YWxpZmllZEluZm9UYWJsZU5hbWUp
CiAgICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChuYW1lKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
aW5kZXggMGFkM2I0ODAyM2YxZjk2ZWFiOWJjZjRmNzcyZGU0OTMzMDdlYmY4NC4uYjdlMTdhODc0
ZDk3MGJlNmJjNWQzMTk2NzYzMWIyYmYzYTNjZDQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjM1LDE1
ICsyMzUsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2Nr
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3Jp
Z2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCkBAIC0yNTYsMTUgKzI1NiwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzRW50cnlGb3JEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0YWJhc2UuIFNldCB1cCBh
IHF1ZXJ5IHRvIGFzayBmb3IgdGhlIGRiIG9mIGludGVyZXN0OgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAotICAgIHJldHVybiBzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1c7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0
aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87
Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICgh
Y3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUg
JXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRl
RmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3Rz
KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVu
dC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZp
bGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0g
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwor
ICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkp
OwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNR
TElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VU
cmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9N
IERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZE
b2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
IApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFz
ZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdp
biwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5h
bWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewot
ICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
Y2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRh
YmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGlu
IHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBp
cyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIg
Y29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQot
ICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4g
b3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNl
dCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBu
ZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMg
Zm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIK
KyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRl
cm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQn
cyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAg
ICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9
PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5h
bWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAg
IHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0
YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVu
dC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3
MSwxNSArNjczLDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3Rh
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luCiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBx
dW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBsCiAK
ICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2lu
ICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9y
aWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5l
d09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9
PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAgICBpZiAoIWVy
cm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
Ci0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29u
c3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRp
bCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBW
QUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21t
YW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xu
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBk
YXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIG9yaWdpblN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBv
cmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0
YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwot
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAg
ICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyAr
MTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Ug
JXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
OTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRh
dGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
ID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmls
ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0x
MjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZp
bGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQg
d2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3Jp
dGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9
IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsi
X3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVk
MS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAt
MTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRi
KQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlm
eSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1l
bnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHBy
ZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOworICAgIGlmICgh
c3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBj
b3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQu
YXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAi
aW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0
ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90
IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUs
IHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVt
YmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkg
bWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBp
ZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkg
eworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRT
ZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0
Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1l
bnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5j
b2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAg
ICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVt
blZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYjA4MDMwYzliNDFmMjcxZTdhYTMyN2MzYWU0
ZWM0ZjYzMGE3MDcyMS4uNWYwNGE3MmZjYjRjN2ExZGQ5MzkyMjAwOTM0NTFiNTM3ODgzZTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJM
JiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBu
ZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAg
ICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25z
dCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3Jh
Z2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIp
KTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICBncm91cC5z
ZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3Vw
OwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
ZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RI
YXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVy
bCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNo
ZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
aW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1l
bW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAg
IC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhl
IG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcg
VVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2Vz
dENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFu
aWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkp
KTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5n
KCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25z
dCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAg
IGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZh
bGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0
b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
KSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNo
ZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNl
dChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYs
MTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3Jk
IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBi
ZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhp
c3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3Rh
IG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVv
dGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hF
UkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhl
IHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZh
dWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJv
b2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
cXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAs
MTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2Fn
ZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmln
aW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAg
IC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8g
YSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2lu
ID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hl
R3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBD
YWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1c2FnZSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ4Nywy
MyArNDg3LDIzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFp
bmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAgICAgICAgICAgICAgICAgIiBX
SEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDAp
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVy
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0
aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZv
ciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9m
Q2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51
bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1h
aW5pbmdTaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVt
YWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMg
U0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRh
KCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0
KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50
KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3Rh
dGVtZW50LnZhbHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01B
IHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VE
KHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkp
ID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1p
dCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0
b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBA
IC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5
IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVz
dFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwg
bWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RV
UkwoKSkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQo
c3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAg
LTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91
cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNh
Y2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFs
bG93bGlzdCgpOwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxp
bmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOwor
ICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUg
b25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAg
ICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAg
ICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFs
bGJhY2tVUkxzKCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFs
bGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkws
IGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFy
ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwg
Y2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5n
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQp
OwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAg
ICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQs
MTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwg
cGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxl
U3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRh
U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5n
IHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2Ug
ZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJl
LCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgx
MywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAg
ICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0Rmls
ZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsK
LSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxv
YigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwor
ICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQt
PmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2gg
d2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0Mywz
NiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhl
YWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAg
ICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRv
IHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVy
cywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywg
PywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
YXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBj
YWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2Ug
YWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICBy
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRh
SWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291
cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Cisg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVy
cyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChy
ZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxh
c3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hl
IGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/
LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMg
KD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFn
ZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVt
ZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
QEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJU
KHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRh
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
Q2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRy
eVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VU
IHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwg
cmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNl
LT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUo
KSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2
LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBB
IHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBz
aXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYg
KCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6
ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEz
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwot
ICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGlu
c2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3
ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUg
Q2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1
cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlv
bkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2
LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4g
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7
CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29k
ZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5O
RVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNv
dXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVz
Q29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVz
b3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMg
SU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVS
ZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAg
IGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2Fj
aGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURp
cmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0Owot
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2Fj
aGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwot
ICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7Cisg
ICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAg
ICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAt
MTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgz
KTsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAot
ICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7
CisgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
NSk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAog
ICAgICAgICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
dXJsLCByZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsx
MTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBj
YWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAg
YWxsb3dsaXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBW
ZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVS
TCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgYWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0
KGFsbG93bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxh
Zy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3Rz
IFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBh
bGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAg
Ci0gICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJl
c3VsdCA9IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hl
IG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVl
c3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBj
YWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBt
YW55IHJvd3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8g
TG9hZCBmYWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFj
a1VSTHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFs
bGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBzdG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAg
d2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cp
IAotICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZh
bGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tT
dGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkp
OwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0
YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hl
cyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRs
eSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5
IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
X3MpOworICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1l
bnQpOworICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAg
ICAgfQpAQCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hl
R3JvdXBzIik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0g
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMu
YXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxl
IChzZWxlY3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVy
bHM7CiB9CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAg
aWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZl
c3RVUkwpOworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAg
ICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNh
Y2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdI
RVJFIGNhY2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdy
b3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwot
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVt
ZW50KTsKKyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3Rh
dGVtZW50LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDEx
LDIwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBp
biBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVS
ZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0
aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAg
ICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENh
Y2hlUmVzb3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldI
RVJFIChTRUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURh
dGEucGF0aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAg
ICAKLSAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAo
IXNlbGVjdFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhz
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNR
TElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSBzZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgp
ID09IFNRTElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0
ZWRDYWNoZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEs
IGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgcGF0
aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBGaWxlU3lz
dGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOwog
ICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUgPSAwOwogICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCAyNDI1ZjgzZDcy
NjI2ZTBlNTBkZmM2YzZjYjk1MDY3ZjA2ZjU3NWY1Li41ZmU5NzkyY2JlNzc1ODYxNWZiZDM0MzZm
NjAzM2Q4ODA4NWMxYWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKQEAgLTE4MSw4ICsxODEsNiBAQCBib29sIENvb2tp
ZUphckRCOjpvcGVuRGF0YWJhc2UoKQogdm9pZCBDb29raWVKYXJEQjo6Y2xvc2VEYXRhYmFzZSgp
CiB7CiAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzdGF0ZW1lbnQgOiBtX3N0YXRlbWVudHMpCi0gICAgICAgICAgICBzdGF0ZW1lbnQudmFs
dWUuZ2V0KCktPmZpbmFsaXplKCk7CiAgICAgICAgIG1fc3RhdGVtZW50cy5jbGVhcigpOwogICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CiAgICAgfQpAQCAtMTkzLDcgKzE5MSw4IEBAIHZvaWQg
Q29va2llSmFyREI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGlmIChpc09uTWVtb3J5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92
ZXJzaW9uIl9zKTsKKyAgICBpbnQgdmVyc2lvbiA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI3MywyNSArMjcyLDI1IEBAIGJvb2wgQ29va2llSmFyREI6OmNo
ZWNrRGF0YWJhc2VWYWxpZGl0eSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJD
b29raWUiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGlu
dGVncml0eShtX2RhdGFiYXNlLCAiUFJBR01BIHF1aWNrX2NoZWNrOyIpOwotICAgIGlmIChpbnRl
Z3JpdHkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW50ZWdyaXR5ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgcXVpY2tfY2hlY2s7Il9zKTsKKyAgICBp
ZiAoIWludGVncml0eSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlIGRh
dGFiYXNlIGludGVncml0eSBjaGVjayIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAgIGludCByZXN1bHRD
b2RlID0gaW50ZWdyaXR5LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMSVRFX1JP
VykgewogICAgICAgICBMT0dfRVJST1IoIkludGVncml0eSBxdWlja19jaGVjayBzdGVwIHJldHVy
bmVkICVkIiwgcmVzdWx0Q29kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBpbnQgY29sdW1ucyA9IGludGVncml0eS5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2x1bW5z
ID0gaW50ZWdyaXR5LT5jb2x1bW5Db3VudCgpOwogICAgIGlmIChjb2x1bW5zICE9IDEpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJSZWNlaXZlZCAlaSBjb2x1bW5zIHBlcmZvcm1pbmcgaW50ZWdyaXR5
IGNoZWNrLCBzaG91bGQgYmUgMSIsIGNvbHVtbnMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHkuZ2V0Q29sdW1uVGV4dCgw
KTsKKyAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS0+Z2V0Q29sdW1uVGV4dCgwKTsK
IAogICAgIGlmIChyZXN1bHRUZXh0ICE9ICJvayIpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb29r
aWUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCAtICVzIiwgcmVzdWx0VGV4dC5hc2Np
aSgpLmRhdGEoKSk7CkBAIC0zODYsMjAgKzM4NSwxNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2ll
Pj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dAogCiAgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0VXJs
IH07CiAKLSAgICBjb25zdCBTdHJpbmcgc3FsID0KLSAgICAgICAgIlNFTEVDVCBuYW1lLCB2YWx1
ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00g
Q29va2llIFdIRVJFICJcCisgICAgYXV0byBwc3RtdCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5
LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUgV0hFUkUgIlwKICAgICAgICAgIihOT1QgKChz
ZXNzaW9uID0gMCkgQU5EIChleHBpcmVzIDwgPykpKSIKICAgICAgICAgIkFORCAoaHR0cG9ubHkg
PSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBodHRwb25seSkpICJcCiAgICAgICAgICJBTkQgKHNl
Y3VyZSA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlY3VyZSkpICJcCiAgICAgICAgICJBTkQg
KHNlc3Npb24gPSBDT0FMRVNDRShOVUxMSUYoPywgLTEpLCBzZXNzaW9uKSkgIlwKICAgICAgICAg
IkFORCAoKGRvbWFpbiA9ID8pIE9SIChkb21haW4gR0xPQiA/KSkgIlwKLSAgICAgICAgIk9SREVS
IEJZIGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCI7Ci0KLSAgICBhdXRvIHBzdG10ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CisgICAgICAgICJP
UkRFUiBCWSBsZW5ndGgocGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiX3MpOwogICAgIGlmICghcHN0
bXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBwc3RtdC0+cHJlcGFyZSgp
OwogICAgIHBzdG10LT5iaW5kSW50NjQoMSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVw
b2NoKCkubWlsbGlzZWNvbmRzKCkpOwogICAgIHBzdG10LT5iaW5kSW50KDIsIGh0dHBPbmx5ID8g
Kmh0dHBPbmx5IDogLTEpOwogICAgIHBzdG10LT5iaW5kSW50KDMsIHNlY3VyZSA/ICpzZWN1cmUg
OiAtMSk7CkBAIC00MTEsOSArNDA2LDYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENvb2tp
ZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKICAgICBl
bHNlCiAgICAgICAgIHBzdG10LT5iaW5kVGV4dCg2LCBTdHJpbmcoIiouIikgKyByZWdpc3RyYWJs
ZURvbWFpbi5zdHJpbmcoKSk7CiAKLSAgICBpZiAoIXBzdG10KQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCiAgICAgVmVjdG9yPENvb2tpZT4gcmVzdWx0czsKIAogICAgIHdoaWxlIChw
c3RtdC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKQEAgLTQ1Myw3ICs0NDUsNiBAQCBPcHRpb25h
bDxWZWN0b3I8Q29va2llPj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdAogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IGNvb2tpZVNlc3Npb247
CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CiAgICAgfQotICAgIHBz
dG10LT5maW5hbGl6ZSgpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC00NjMsMTEgKzQ1
NCwxMSBAQCBWZWN0b3I8Q29va2llPiBDb29raWVKYXJEQjo6Z2V0QWxsQ29va2llcygpCiAgICAg
VmVjdG9yPENvb2tpZT4gcmVzdWx0OwogICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nIHNx
bCA9ICJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHks
IHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSJfczsKLSAgICBhdXRvIHBzdG10ID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CisKKyAgICBhdXRvIHBzdG10
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFp
biwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSJf
cyk7CiAgICAgaWYgKCFwc3RtdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBwc3RtdC0+
cHJlcGFyZSgpOworCiAgICAgd2hpbGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewog
ICAgICAgICBDb29raWUgY29va2llOwogICAgICAgICBjb29raWUubmFtZSA9IHBzdG10LT5nZXRD
b2x1bW5UZXh0KDApOwpAQCAtNDgyLDcgKzQ3Myw2IEBAIFZlY3RvcjxDb29raWU+IENvb2tpZUph
ckRCOjpnZXRBbGxDb29raWVzKCkKICAgICAgICAgY29va2llLnNlc3Npb24gPSAocHN0bXQtPmdl
dENvbHVtbkludCg3KSA9PSAxKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvb2tp
ZSkpOwogICAgIH0KLSAgICBwc3RtdC0+ZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC01NzEsMTYgKzU2MSwxNSBAQCBib29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJgogCiBIYXNo
U2V0PFN0cmluZz4gQ29va2llSmFyREI6OmFsbERvbWFpbnMoKQogewotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7Ci0gICAg
c3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChTRUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zOwot
ICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0
byBkb21haW4gPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoc3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIGRvbWFpbiA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgZG9tYWlucy5hZGQoZG9tYWluKTsKICAg
ICB9Ci0KLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKICAgICByZXR1cm4gZG9tYWluczsKIH0K
IApAQCAtNjM3LDEwICs2MjYsOSBAQCBib29sIENvb2tpZUphckRCOjpkZWxldGVBbGxDb29raWVz
KCkKIAogdm9pZCBDb29raWVKYXJEQjo6Y3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJp
bmcmIHNxbCkKIHsKLSAgICBhdXRvIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihtX2RhdGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnByZXBhcmUo
KTsKLSAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAgbV9zdGF0
ZW1lbnRzLmFkZChzcWwsIFdURk1vdmUoc3RhdGVtZW50KSk7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7CisgICAgQVNTRVJUKHN0YXRl
bWVudCk7CisgICAgbV9zdGF0ZW1lbnRzLmFkZChzcWwsIHN0YXRlbWVudC52YWx1ZSgpLm1vdmVU
b1VuaXF1ZVB0cigpKTsKIH0KIAogU1FMaXRlU3RhdGVtZW50JiBDb29raWVKYXJEQjo6cHJlcGFy
ZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCkBAIC02NTMsMTAgKzY0MSwxMyBAQCBTUUxp
dGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHNxbCkKIAogYm9vbCBDb29raWVKYXJEQjo6ZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmIHNxbCkK
IHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAg
aW50IHJldCA9IHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpOwotICAgIHN0YXRlbWVudC5maW5h
bGl6ZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KHNxbCk7CisgICAgaWYgKCFzdGF0ZW1lbnQgJiYgIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0
ZW1lbnQuZXJyb3IoKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSAl
cyBlcnJvcjogJXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCisgICAgaW50IHJldCA9IHN0YXRl
bWVudC0+c3RlcCgpOwogICAgIGlmICghY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSAlcyBlcnJvcjogJXMiLCBzcWwuYXNj
aWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cAppbmRleCBjMjM5YjQ0MjBiMzI1YjAwNjRjNGY2YWI2OWIxYjgxYjdhMGFkN2JmLi5iNmRlMzFk
MTJjOWE3MGY3MDFjMzA2NDkxNWRjYjc4NTE3MzM2MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RA
cmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBT
UUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBPcGVuTW9kZSBvcGVu
TW9kZSkKIAogICAgIHsKICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0Nv
dW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudCgq
dGhpcywgIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykuZXhlY3V0ZUNvbW1hbmQoKSkK
KyAgICAgICAgaWYgKCFleGVjdXRlQ29tbWFuZCgiUFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7
Il9zKSkKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBz
ZXQgdGVtcF9zdG9yZSB0byBtZW1vcnkiKTsKICAgICB9CiAKQEAgLTE5NywxMCArMTk3LDEwIEBA
IHZvaWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpvdXJuYWxNb2RlKCkKIHsKICAgICBtX3VzZVdB
TCA9IHRydWU7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgd2FsU3RhdGVtZW50KCp0
aGlzLCAiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKLSAgICAgICAgaWYgKHdhbFN0YXRl
bWVudC5wcmVwYXJlQW5kU3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byB3YWxT
dGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3Mp
OworICAgICAgICBpZiAod2FsU3RhdGVtZW50ICYmIHdhbFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBTdHJpbmcgbW9kZSA9IHdh
bFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3
YWxTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ3YWwiKSkKICAgICAgICAgICAgICAgICBMT0df
RVJST1IoImpvdXJuYWxfbW9kZSBvZiBkYXRhYmFzZSBzaG91bGQgYmUgJ1dBTCcsIGJ1dCBpcyAn
JXMnIiwgbW9kZS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgpAQCAtMjEwLDkgKzIxMCw5IEBAIHZv
aWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpvdXJuYWxNb2RlKCkKIAogICAgIHsKICAgICAgICAg
U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVy
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2hlY2twb2ludFN0YXRlbWVudCgqdGhpcywgIlBS
QUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSkiX3MpOwotICAgICAgICBpZiAoY2hlY2twb2lu
dFN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAg
IGlmIChjaGVja3BvaW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSkKKyAgICAgICAgYXV0byBj
aGVja3BvaW50U3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHdhbF9jaGVja3Bv
aW50KFRSVU5DQVRFKSJfcyk7CisgICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVtZW50ICYmIGNo
ZWNrcG9pbnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBp
ZiAoY2hlY2twb2ludFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKQogICAgICAgICAgICAgICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZSBkYXRhYmFzZSBjaGVja3BvaW50IGlzIGJsb2NrZWQi
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFz
ZSBmYWlsZWQgdG8gY2hlY2twb2ludDogJXMiLCBsYXN0RXJyb3JNc2coKSk7CkBAIC0yNzIsOCAr
MjcyLDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6bWF4aW11bVNpemUoKQogICAgIHsKICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJs
ZUF1dGhvcml6ZXIoZmFsc2UpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0
aGlzLCAiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKLSAgICAgICAgbWF4UGFnZUNvdW50ID0g
c3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHBy
ZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCJfcyk7CisgICAgICAgIG1heFBh
Z2VDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwog
ICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMjkzLDkgKzI5Myw4
IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldE1heGltdW1TaXplKGludDY0X3Qgc2l6ZSkKICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICBlbmFibGVBdXRob3Jp
emVyKGZhbHNlKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsIG1ha2VT
dHJpbmcoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOwotICAg
IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X1JPVykKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygi
UFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50KSk7CisgICAgaWYgKCFz
dGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gc2V0IG1heGltdW0gc2l6ZSBvZiBkYXRhYmFzZSB0byAlbGxpIGJ5
dGVzIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzaXplKSk7CiAKICAgICBlbmFibGVBdXRob3Jp
emVyKHRydWUpOwpAQCAtMzEwLDggKzMwOSw4IEBAIGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNp
emUoKQogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAg
ICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7Ci0gICAgICAgIG1f
cGFnZVNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgICAgICBhdXRvIHN0YXRl
bWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBwYWdlX3NpemUiX3MpOworICAgICAgICBt
X3BhZ2VTaXplID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwog
ICAgICAgICAKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CkBAIC0zMjcs
OCArMzI2LDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSgpCiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVB
dXRob3JpemVyKGZhbHNlKTsKICAgICAgICAgLy8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFk
ZGVkIGluIFNRTGl0ZSAzLjQuMS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgq
dGhpcywgIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7Ci0gICAgICAgIGZyZWVsaXN0Q291bnQg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
cHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKKyAgICAgICAgZnJl
ZWxpc3RDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAw
OwogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMzQyLDggKzM0
MSw4IEBAIGludDY0X3QgU1FMaXRlRGF0YWJhc2U6OnRvdGFsU2l6ZSgpCiAgICAgewogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0
aG9yaXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMs
ICJQUkFHTUEgcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVt
ZW50KCJQUkFHTUEgcGFnZV9jb3VudCJfcyk7CisgICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVu
dCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwogICAgICAgICBlbmFibGVBdXRo
b3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMzcxLDE0ICszNzAsMjIgQEAgdm9pZCBTUUxpdGVE
YXRhYmFzZTo6c2V0QnVzeUhhbmRsZXIoaW50KCpoYW5kbGVyKSh2b2lkKiwgaW50KSkKICAgICAg
ICAgTE9HKFNRTERhdGFiYXNlLCAiQnVzeSBoYW5kbGVyIHNldCBvbiBub24tb3BlbiBkYXRhYmFz
ZSIpOwogfQogCi1ib29sIFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJp
bmcmIHNxbCkKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgcXVlcnkpCiB7Ci0gICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5leGVj
dXRlQ29tbWFuZCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVy
eSk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7
Cit9CisKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKK3sKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwor
ICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogfQog
CiBib29sIFNRTGl0ZURhdGFiYXNlOjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJp
bmcmIHNxbCkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWwpLnJldHVy
bnNBdExlYXN0T25lUmVzdWx0KCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVt
ZW50KHNxbCk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPnJldHVybnNBdExl
YXN0T25lUmVzdWx0KCk7CiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKGNv
bnN0IFN0cmluZyYgdGFibGVuYW1lKQpAQCAtMzg2LDE4ICszOTMsMTUgQEAgYm9vbCBTUUxpdGVE
YXRhYmFzZTo6dGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJiB0YWJsZW5hbWUpCiAgICAgaWYgKCFp
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIHN0YXRlbWVudCA9
ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5E
IG5hbWUgPSAnIiArIHRhYmxlbmFtZSArICInOyI7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCp0aGlzLCBzdGF0ZW1lbnQpOwotICAgIHNxbC5wcmVwYXJlKCk7Ci0gICAgcmV0dXJuIHNxbC5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBB
TkQgbmFtZSA9ICciICsgdGFibGVuYW1lICsgIic7Iik7CisgICAgcmV0dXJuIHN0YXRlbWVudCAm
JiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwogfQogCiB2b2lkIFNRTGl0ZURhdGFi
YXNlOjpjbGVhckFsbFRhYmxlcygpCiB7Ci0gICAgU3RyaW5nIHF1ZXJ5ID0gIlNFTEVDVCBuYW1l
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Il9zOwogICAgIFZlY3RvcjxT
dHJpbmc+IHRhYmxlczsKLSAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudCgqdGhpcywgcXVlcnkpLnJl
dHVyblRleHRSZXN1bHRzKDAsIHRhYmxlcykpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0
YWJsZSc7Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCAhc3RhdGVtZW50LT5yZXR1cm5UZXh0
UmVzdWx0cygwLCB0YWJsZXMpKSB7CiAgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlVuYWJsZSB0
byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmcm9tIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC01ODMsMTAgKzU4NywxMCBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjppc0F1
dG9Db21taXRPbigpIGNvbnN0CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVu
dGFsQXV0b1ZhY3V1bSgpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywg
IlBSQUdNQSBhdXRvX3ZhY3V1bSJfcyk7Ci0gICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCgwKTsKKyAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSAwOworICAgIGlm
IChhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBhdXRvX3ZhY3V1bSJf
cykpCisgICAgICAgIGF1dG9WYWN1dW1Nb2RlID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7
CiAgICAgaW50IGVycm9yID0gbGFzdEVycm9yKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7
CiAKICAgICAvLyBDaGVjayBpZiB3ZSBnb3QgYW4gZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGdldCB0
aGUgdmFsdWUgb2YgdGhlIGF1dG9fdmFjdXVtIGZsYWcuCiAgICAgLy8gSWYgd2UgZ290IGEgU1FM
SVRFX0JVU1kgZXJyb3IsIHRoZW4gdGhlcmUncyBwcm9iYWJseSBhbm90aGVyIHRyYW5zYWN0aW9u
IGluCkBAIC02NDMsNCArNjQ3LDcyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnJlbGVhc2VNZW1v
cnkoKQogICAgIHNxbGl0ZTNfZGJfcmVsZWFzZV9tZW1vcnkobV9kYik7CiB9CiAKK3N0YXRpYyBF
eHBlY3RlZDxzcWxpdGUzX3N0bXQqLCBpbnQ+IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQo
U1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBxdWVyeSwgc2l6ZV90IHF1ZXJ5
TGVuZ3RoKQoreworICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKGRhdGFiYXNlLmRhdGFiYXNl
TXV0ZXgoKSk7CisgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gcHJlcGFyZSAtICVzIiwgcXVl
cnkpOworCisgICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRo
ZSBudWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7CisgICAgLy8gdGhpcyBsZXRz
IFNRTGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KKyAgICBzaXplX3QgbGVuZ3RoSW5j
bHVkaW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5TGVuZ3RoICsgMTsKKworICAgIHNxbGl0ZTNfc3Rt
dCogc3RhdGVtZW50IHsgbnVsbHB0ciB9OworICAgIGNvbnN0IGNoYXIqIHRhaWwgPSBudWxscHRy
OworICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYXRhYmFzZS5zcWxpdGUzSGFu
ZGxlKCksIHF1ZXJ5LCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyLCAmc3RhdGVtZW50LCAm
dGFpbCk7CisKKyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIExPRyhTUUxE
YXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwg
cXVlcnksIHNxbGl0ZTNfZXJybXNnKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3IpOworICAgIH0KKworICAgIGlmICh0YWlsICYm
ICp0YWlsKSB7CisgICAgICAgIHNxbGl0ZTNfZmluYWxpemUoc3RhdGVtZW50KTsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNRTElURV9FUlJPUik7CisgICAgfQorCisgICAgcmV0dXJu
IHN0YXRlbWVudDsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0ZURh
dGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgcXVlcnlTdHJpbmcpCit7Cisg
ICAgQ1N0cmluZyBxdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsK
KyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRo
aXMsIHF1ZXJ5LmRhdGEoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJh
c2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1Ymxp
Y31zIiwgcXVlcnkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0
YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCB7ICp0
aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxTUUxpdGVTdGF0ZW1l
bnQsIGludD4gU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1
ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRl
bWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVycygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYg
KCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2Us
ICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50ICV7cHVibGljfXMiLCBxdWVyeS5jaGFyYWN0ZXJzKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4g
U1FMaXRlU3RhdGVtZW50IHsgKnRoaXMsIHNxbFN0YXRlbWVudC52YWx1ZSgpIH07Cit9CisKK0V4
cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IFNRTGl0ZURhdGFiYXNlOjpw
cmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENT
dHJpbmcgcXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAg
YXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBx
dWVyeS5kYXRhKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpw
cmVwYXJlSGVhcFN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50ICV7cHVibGlj
fXMiLCBxdWVyeS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3FsU3Rh
dGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5pcXVlUmVmPFNRTGl0ZVN0YXRl
bWVudD4oKm5ldyBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbFN0YXRlbWVudC52YWx1ZSgpKSk7
Cit9CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IFNRTGl0ZURh
dGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAg
YXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBx
dWVyeS5jaGFyYWN0ZXJzKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVu
dCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50ICV7
cHVibGljfXMiLCBxdWVyeS5jaGFyYWN0ZXJzKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5pcXVlUmVm
PFNRTGl0ZVN0YXRlbWVudD4oKm5ldyBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbFN0YXRlbWVu
dC52YWx1ZSgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggZDNkMDY5NmRiZjViMGYwZDY2
MGI3MDg1MjBmYTYzYTk5ODAyOGU1Ny4uYzA0NWZlNTkzZDc5OWQ1MjA4MGRkYjkzOTZjNDkzNDIx
M2U3Y2Q4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxz
cWxpdGUzLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNjEsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsKTsKKwogICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RP
bmVSZXN1bHQoY29uc3QgU3RyaW5nJik7CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCB0
YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKQEAgLTcwLDYgKzc0LDExIEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxTUUxp
dGVTdGF0ZW1lbnQsIGludD4gcHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxTUUxpdGVTdGF0ZW1lbnQsIGludD4gcHJlcGFy
ZVN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVj
dGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IHByZXBhcmVIZWFwU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgcXVlcnkpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFVuaXF1
ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IHByZXBhcmVIZWFwU3RhdGVtZW50KEFTQ0lJTGl0
ZXJhbCBxdWVyeSk7CisKICAgICAvLyBBYm9ydHMgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0
aW9uLiBUaGlzIGlzIHRocmVhZCBzYWZlLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW50ZXJy
dXB0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVT
dGF0ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5jcHAKaW5kZXggZGVhOGZmZjhhNWVhNGZkZTQxNjhiZDlkM2VmNGZkZTJlYzZmNTVhOC4uNDhm
OWFlZTJkNzFkOTFmYjQ1NzAyMjJkNGU1YjA3ODhhMGJlMTVkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsODcg
KzQxLDQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1FMaXRlU3RhdGVtZW50OjpTUUxp
dGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHNxbCkKK1NRTGl0
ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiBkYiwgc3FsaXRlM19z
dG10KiBzdGF0ZW1lbnQpCiAgICAgOiBtX2RhdGFiYXNlKGRiKQotICAgICwgbV9xdWVyeShzcWwp
Ci0gICAgLCBtX3N0YXRlbWVudCgwKQorICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogewor
ICAgIEFTU0VSVChzdGF0ZW1lbnQpOwogfQogCi1TUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVTdGF0
ZW1lbnQoKQorU1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50
JiYgb3RoZXIpCisgICAgOiBtX2RhdGFiYXNlKG90aGVyLmRhdGFiYXNlKCkpCisgICAgLCBtX3N0
YXRlbWVudChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fc3RhdGVtZW50LCBudWxscHRyKSkKIHsKLSAg
ICBmaW5hbGl6ZSgpOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKCkKK1NRTGl0
ZVN0YXRlbWVudDo6flNRTGl0ZVN0YXRlbWVudCgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzUHJlcGFy
ZWQpOwotCi0gICAgTG9ja0hvbGRlciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11
dGV4KCkpOwotCi0gICAgQ1N0cmluZyBxdWVyeSA9IG1fcXVlcnkuc3RyaXBXaGl0ZVNwYWNlKCku
dXRmOCgpOwotICAgIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIs
IHF1ZXJ5LmRhdGEoKSk7Ci0KLSAgICAvLyBQYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBp
bmNsdWRpbmcgdGhlIG51bGwgY2hhcmFjdGVyIHRvIHNxbGl0ZTNfcHJlcGFyZV92MjsKLSAgICAv
LyB0aGlzIGxldHMgU1FMaXRlIGF2b2lkIGFuIGV4dHJhIHN0cmluZyBjb3B5LgotICAgIHNpemVf
dCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyID0gcXVlcnkubGVuZ3RoKCkgKyAxOwotCi0g
ICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7Ci0gICAgaW50IGVycm9yID0gc3FsaXRlM19w
cmVwYXJlX3YyKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVyeS5kYXRhKCksIGxlbmd0
aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIsICZtX3N0YXRlbWVudCwgJnRhaWwpOwotCi0gICAgaWYg
KGVycm9yICE9IFNRTElURV9PSykKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19w
cmVwYXJlMTYgZmFpbGVkICglaSlcbiVzXG4lcyIsIGVycm9yLCBxdWVyeS5kYXRhKCksIHNxbGl0
ZTNfZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0KLSAgICBpZiAodGFpbCAm
JiAqdGFpbCkKLSAgICAgICAgZXJyb3IgPSBTUUxJVEVfRVJST1I7Ci0KLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGVycm9yID09IFNRTElURV9PSzsKLSNlbmRpZgotICAg
IHJldHVybiBlcnJvcjsKKyAgICBzcWxpdGUzX2ZpbmFsaXplKG1fc3RhdGVtZW50KTsKIH0KIAog
aW50IFNRTGl0ZVN0YXRlbWVudDo6c3RlcCgpCiB7CiAgICAgTG9ja0hvbGRlciBkYXRhYmFzZUxv
Y2sobV9kYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCkK
LSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQogICAgIC8vIFRoZSBkYXRhYmFzZSBuZWVkcyB0
byB1cGRhdGUgaXRzIGxhc3QgY2hhbmdlcyBjb3VudCBiZWZvcmUgZWFjaCBzdGF0ZW1lbnQKICAg
ICAvLyBpbiBvcmRlciB0byBjb21wdXRlIHByb3Blcmx5IHRoZSBsYXN0Q2hhbmdlcygpIHJldHVy
biB2YWx1ZS4KICAgICBtX2RhdGFiYXNlLnVwZGF0ZUxhc3RDaGFuZ2VzQ291bnQoKTsKIAotICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHN0ZXAgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOwogICAgIGludCBlcnJvciA9IHNxbGl0ZTNfc3RlcChtX3N0YXRlbWVudCk7Ci0gICAgaWYg
KGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAg
TE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVwIGZhaWxlZCAoJWkpXG5RdWVyeSAtICVzXG5F
cnJvciAtICVzIiwgCi0gICAgICAgICAgICBlcnJvciwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSwg
c3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKLSAgICB9CisgICAg
aWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9ST1cpCisgICAgICAg
IExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxuRXJyb3IgLSAlcyIs
IGVycm9yLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwogCiAg
ICAgcmV0dXJuIGVycm9yOwogfQotICAgIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6ZmluYWxpemUo
KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVkID0gZmFsc2U7Ci0jZW5k
aWYKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FMSVRFX09LOwotICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIGZpbmFsaXplIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCku
ZGF0YSgpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3FsaXRlM19maW5hbGl6ZShtX3N0YXRlbWVudCk7
Ci0gICAgbV9zdGF0ZW1lbnQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OnJlc2V0KCkgCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLSAgICBMT0coU1FM
RGF0YWJhc2UsICJTUUwgLSByZXNldCAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAg
ICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQobV9zdGF0ZW1lbnQpOwogICAgIHNxbGl0ZTNf
Y2xlYXJfYmluZGluZ3MobV9zdGF0ZW1lbnQpOwogICAgIHJldHVybiBzdGF0dXM7CkBAIC0xMjks
NDIgKzgzLDIxIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkKIAogYm9vbCBTUUxpdGVT
dGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKIHsKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQo
bV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAg
IGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZmluYWxpemUo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ET05FOwog
fQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKQogewot
ICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlmIChzdGVwKCkg
IT0gU1FMSVRFX1JPVykgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0KKyAgICByZXR1
cm4gc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRC
bG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpCiB7Ci0gICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogICAgIEFT
U0VSVChibG9iIHx8ICFzaXplKTsKICAgICBBU1NFUlQoc2l6ZSA+PSAwKTsKIAotICAgIGlmICgh
bV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7Ci0KICAgICByZXR1cm4g
c3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9iLCBzaXplLCBTUUxJVEVf
VFJBTlNJRU5UKTsKIH0KIApAQCAtMTg1LDcgKzExOCw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBpbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBB
U1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAK
QEAgLTIwNCw3ICsxMzYsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludChp
bnQgaW5kZXgsIGludCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAg
IEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjEzLDcgKzE0NCw2IEBAIGludCBT
UUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdlcikKIAogaW50IFNR
TGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogewot
ICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFT
U0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgp
KTsKIApAQCAtMjIyLDcgKzE1Miw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQ2NChp
bnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERv
dWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJl
ZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yMzEsNyArMTYwLDYg
QEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1i
ZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmROdWxsKGludCBpbmRleCkKIHsKLSAgICBB
U1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAK
QEAgLTI0OSwyNiArMTc3LDE5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRWYWx1ZShpbnQg
aW5kZXgsIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSkKIAogdW5zaWduZWQgU1FMaXRlU3RhdGVtZW50
OjpiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQp
OwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBz
cWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KG1fc3RhdGVtZW50KTsKIH0KIAogaW50IFNRTGl0
ZVN0YXRlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwot
ICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzcWxp
dGUzX2RhdGFfY291bnQobV9zdGF0ZW1lbnQpOwogfQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6
aXNDb2x1bW5OdWxsKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAo
IW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5n
KCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjc4
LDE5ICsxOTksMTQgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbChpbnQgY29s
KQogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoaW50IGNvbCkK
IHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpIHsKLSAgICAg
ICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdW
aWV3KHNxbGl0ZTNfY29sdW1uX2RlY2x0eXBlKG1fc3RhdGVtZW50LCBjb2wpKSwgImJsb2IiKTsK
IH0KIAogU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogewog
ICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYg
KHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fbmFtZTE2KG1fc3RhdGVtZW50
LCBjb2wpKSk7CkBAIC0yOTksOSArMjE1LDggQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0
Q29sdW1uTmFtZShpbnQgY29sKQogU1FMVmFsdWUgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5W
YWx1ZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRl
bWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYg
c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChj
b2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMCw5
ICsyNDUsOCBAQCBTUUxWYWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVlKGludCBj
b2wpCiBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiB7CiAg
ICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAo
cHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9S
T1cpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBj
b2wpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzcWxpdGUzX2NvbHVtbl90ZXh0MTYobV9zdGF0ZW1lbnQs
IGNvbCkpLCBzcWxpdGUzX2NvbHVtbl9ieXRlczE2KG1fc3RhdGVtZW50LCBjb2wpIC8gc2l6ZW9m
KFVDaGFyKSk7CkBAIC0zNDEsOSArMjU1LDggQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0
Q29sdW1uVGV4dChpbnQgY29sKQogZG91YmxlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91
YmxlKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVt
ZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAg
ICAgICAgcmV0dXJuIDAuMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gMC4wOwogICAgIGlmIChjb2x1bW5Db3Vu
dCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICByZXR1cm4gc3FsaXRlM19jb2x1
bW5fZG91YmxlKG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzUyLDkgKzI2NSw4IEBAIGRvdWJsZSBT
UUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQgY29sKQogaW50IFNRTGl0ZVN0YXRl
bWVudDo6Z2V0Q29sdW1uSW50KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAg
ICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBp
bmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3Fs
aXRlM19jb2x1bW5faW50KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzYzLDkgKzI3NSw4IEBAIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQogaW50NjRfdCBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAw
KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYXNTdGFydGVk
U3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gc3FsaXRlM19jb2x1bW5faW50NjQobV9zdGF0ZW1lbnQsIGNvbCk7CkBAIC0zNzUsNyArMjg2
LDcgQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKGludCBj
b2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYg
cHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmICghaGFzU3RhcnRlZFN0ZXBw
aW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKQEAgLTM5Nyw3ICszMDgsNyBAQCB2b2lk
IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKGludCBjb2wsIFZlY3Rvcjxj
aGFyPiYgcmVzdWx0KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3Rh
dGVtZW50ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICghaGFz
U3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgcmVz
dWx0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MjMsNyArMzM0LDcgQEAg
dm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0
b3I8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYg
KCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBp
ZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAg
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDUxLDE5ICsz
NjIsMTYgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1bHRzKGludCBjb2ws
IFZlY3RvcjxTdHJpbmc+JiB2KQogCiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVt
ZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQor
ICAgICAgICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAg
ICAgICB2LmFwcGVuZChnZXRDb2x1bW5UZXh0KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1
ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVh
ZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5U
ZXh0UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZpbmFsaXpl
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDcxLDE5ICszNzksMTYgQEAgYm9vbCBT
UUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGludD4mIHYp
CiB7CiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5h
bGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQorICAgICAgICByZXNldCgpOwog
CiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRD
b2x1bW5JbnQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFi
YXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBk
YXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0co
U1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHM6IEVycm9yIHJl
YWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTQ5MSwxOSArMzk2LDE2IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1
cm5JbnQ2NFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGludDY0X3Q+JiB2KQogewogICAgIHYuY2xl
YXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBp
ZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChz
dGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uSW50NjQoY29s
KSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJv
cigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBM
T0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVy
eSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0YWJhc2Us
ICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludDY0UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1
bHRzIik7CiAgICAgfQotICAgIGZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNTExLDI1ICs0MTMsMjIgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkRvdWJsZVJl
c3VsdHMoaW50IGNvbCwgVmVjdG9yPGRvdWJsZT4mIHYpCiB7CiAgICAgdi5jbGVhcigpOwogCi0g
ICAgaWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0
ZWRTdGVwcGluZygpKQorICAgICAgICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRDb2x1bW5Eb3VibGUoY29sKSk7CiAgICAg
Ym9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBMT0coU1FMRGF0
YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1f
cXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGVT
dGF0ZW1lbnQ6OnJldHVybkRvdWJsZVJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwog
ICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgU1FM
aXRlU3RhdGVtZW50Ojppc0V4cGlyZWQoKQorYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6Omhhc1N0YXJ0
ZWRTdGVwcGluZygpCiB7Ci0gICAgcmV0dXJuICFtX3N0YXRlbWVudDsKKyAgICByZXR1cm4gc3Fs
aXRlM19zdG10X2J1c3kobV9zdGF0ZW1lbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKaW5kZXgg
YTdhY2RlNWNmYzViMmQzNTYyYjFmYjUxZmQ2YTcxYmQ5NWNjZTQwOC4uNjM1MTJiYjZlYjQ5YTZl
ZTE5ZTcxZjFjNjdiMWZlOGYyOWY2NWM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCArMzUsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBTUUxpdGVTdGF0ZW1lbnQgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNRTGl0ZVN0YXRlbWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYsIGNv
bnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVTdGF0ZW1lbnQoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiYpOwogICAg
IAotICAgIFdFQkNPUkVfRVhQT1JUIGludCBwcmVwYXJlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYp
OwpAQCAtNTAsMjMgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25l
ZCBiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGludCBz
dGVwKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IGZpbmFsaXplKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgaW50IHJlc2V0KCk7CiAgICAgCi0gICAgaW50IHByZXBhcmVBbmRTdGVwKCkgeyBpZiAo
aW50IGVycm9yID0gcHJlcGFyZSgpKSByZXR1cm4gZXJyb3I7IHJldHVybiBzdGVwKCk7IH0KLSAg
ICAKLSAgICAvLyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgorICAg
IC8vIHN0ZXBzIGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgogICAgIC8vIHJldHVybnMgdHJ1ZSBp
ZiBhbGwgMyBzdGVwcyBzdWNjZWVkIHdpdGggc3RlcCgpIHJldHVybmluZyBTUUxJVEVfRE9ORQog
ICAgIC8vIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlICAKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGV4ZWN1dGVDb21tYW5kKCk7CiAgICAgCi0gICAgLy8gcHJlcGFyZXMsIHN0ZXBzLCBhbmQgZmlu
YWxpemVzLiAgCisgICAgLy8gc3RlcHMsIGFuZCBmaW5hbGl6ZXMuCiAgICAgLy8gcmV0dXJucyB0
cnVlIGlzIHN0ZXAoKSByZXR1cm5zIFNRTElURV9ST1cKICAgICAvLyByZXR1cm5zIGZhbHNlIG90
aGVyd2lzZQogICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsKIAotICAgIGJvb2wg
aXNFeHBpcmVkKCk7Ci0KICAgICAvLyBSZXR1cm5zIC0xIG9uIGxhc3Qtc3RlcCBmYWlsaW5nLiAg
T3RoZXJ3aXNlLCByZXR1cm5zIG51bWJlciBvZiByb3dzCiAgICAgLy8gcmV0dXJuZWQgaW4gdGhl
IGxhc3Qgc3RlcCgpCiAgICAgaW50IGNvbHVtbkNvdW50KCk7CkBAIC05MCwxNSArODQsMTUgQEAg
cHVibGljOgogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRh
YmFzZTsgfQogICAgIAotICAgIGNvbnN0IFN0cmluZyYgcXVlcnkoKSBjb25zdCB7IHJldHVybiBt
X3F1ZXJ5OyB9Ci0gICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTUUxpdGVEYXRhYmFz
ZTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBzcWxpdGUzX3N0bXQqKTsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IGhhcyBiZWVu
IHN0ZXBwZWQgYXQgbGVhc3Qgb25jZSB1c2luZyBzdGVwKCkgYnV0IGhhcyBuZWl0aGVyIHJ1biB0
byBjb21wbGV0aW9uIChyZXR1cm5lZCBTUUxJVEVfRE9ORSBmcm9tIHN0ZXAoKSkgbm9yIGJlZW4g
cmVzZXQoKS4KKyAgICBib29sIGhhc1N0YXJ0ZWRTdGVwcGluZygpOworCiAgICAgU1FMaXRlRGF0
YWJhc2UmIG1fZGF0YWJhc2U7Ci0gICAgU3RyaW5nIG1fcXVlcnk7CiAgICAgc3FsaXRlM19zdG10
KiBtX3N0YXRlbWVudDsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9pc1ByZXBhcmVk
IHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAKaW5kZXgg
NmY3ZjRiYTE2NjBiNGY3YTk3NzIxMmM4NTYzYTQzYzY2NWUzMGI1NC4uNDYxYTJjN2ZjZGE4OWI4
MzdhNTk5MDNlYmNmYTNkNWIyODNjNTYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCkBAIC0xMzAsMjUgKzEzMCwyNSBAQCBib29s
IFNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkoKQogICAgIGlmICghbV9k
YXRhYmFzZS50YWJsZUV4aXN0cygiU2VhcmNoIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3JpdHkobV9kYXRhYmFzZSwgIlBSQUdNQSBxdWlja19j
aGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHF1
aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFpbnRlZ3JpdHkpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2siKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5LnN0
ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS0+c3RlcCgpOwogICAgIGlmIChy
ZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlZ3JpdHkg
cXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAlZCIsIHJlc3VsdENvZGUpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IGNvbHVtbnMgPSBpbnRlZ3JpdHkuY29sdW1uQ291
bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGludGVncml0eS0+Y29sdW1uQ291bnQoKTsKICAgICBp
ZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAgIExPR19FUlJPUigiUmVjZWl2ZWQgJWkgY29sdW1u
cyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVjaywgc2hvdWxkIGJlIDEiLCBjb2x1bW5zKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50
ZWdyaXR5LmdldENvbHVtblRleHQoMCk7CisgICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3Jp
dHktPmdldENvbHVtblRleHQoMCk7CiAKICAgICBpZiAocmVzdWx0VGV4dCAhPSAib2siKSB7CiAg
ICAgICAgIExPR19FUlJPUigiU2VhcmNoIGF1dG9zYXZlIGRhdGFiYXNlIGludGVncml0eSBjaGVj
ayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5kYXRhKCkpOwpAQCAtMjI0LDE3ICsy
MjQsMTkgQEAgYm9vbCBTZWFyY2hQb3B1cE1lbnVEQjo6b3BlbkRhdGFiYXNlKCkKIAogdm9pZCBT
ZWFyY2hQb3B1cE1lbnVEQjo6Y2xvc2VEYXRhYmFzZSgpCiB7Ci0gICAgaWYgKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpIHsKLSAgICAgICAgbV9sb2FkU2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50LT5m
aW5hbGl6ZSgpOwotICAgICAgICBtX2luc2VydFNlYXJjaFRlcm1TdGF0ZW1lbnQtPmZpbmFsaXpl
KCk7Ci0gICAgICAgIG1fcmVtb3ZlU2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50LT5maW5hbGl6
ZSgpOwotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgfQorICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sb2FkU2VhcmNoVGVybXNG
b3JOYW1lU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2luc2VydFNlYXJjaFRlcm1TdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1fcmVtb3ZlU2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CiB9CiAKIHZvaWQgU2VhcmNoUG9wdXBN
ZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewotICAgIGludCB2ZXJzaW9uID0gU1FMaXRl
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50
KDApOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQ
UkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICBpbnQgdmVyc2lvbiA9IHN0YXRlbWVudCA/IHN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFW
ZXJzaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MSwyMyArMjczLDI1IEBAIHZvaWQgU2Vh
cmNoUG9wdXBNZW51REI6OmNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0dWFsKQogCiBpbnQg
U2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVTaW1wbGVTcWwoY29uc3QgU3RyaW5nJiBzcWwsIGJv
b2wgaWdub3JlRXJyb3IpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAoKTsKLSAg
ICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIGNo
ZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBz
dGF0ZW1lbnQuZXJyb3IoKTsKKyAgICB9CiAKLSAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0
KTsKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJldCAhPSBTUUxJ
VEVfT0sgJiYgcmV0ICE9IFNRTElURV9ET05FICYmIHJldCAhPSBTUUxJVEVfUk9XICYmICFpZ25v
cmVFcnJvcikKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSAlcyBlcnJvcjog
JXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotCiAg
ICAgcmV0dXJuIHJldDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gU2Vh
cmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3Fs
KQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1f
ZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJlcGFyZSgpOwotICAg
IEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICByZXR1cm4gc3RhdGVt
ZW50OworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVu
dChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQpOworICAgIGlmICghc3RhdGVtZW50KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGVtZW50LnZhbHVlKCkubW92ZVRv
VW5pcXVlUHRyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKaW5kZXggODky
YzNmNDllOTAxNGEzNWZlOTI5ODRlZjlhMjkwNGE3YmRlZDU2MC4uYjBjNzE2MWE4MDZhODY4ZWM0
ZmY0NDc2NTNiYjg1M2ZjMDk2ODQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKQEAg
LTI4NSwxMSArMjg1LDExIEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFs
aWRSZWNvcmRzVGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAg
ICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgcmVjb3JkcyB0YWJsZS4KLSAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBl
LCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyIpOwotICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBy
ZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRo
ZSBSZWNvcmRzIHRhYmxlLiI7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hl
bWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiJfczsKIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQg
YWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9
PSBTUUxJVEVfRE9ORSkgewpAQCAtMzAxLDcgKzMwMSw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25E
YXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKQogICAgICAgICBpZiAoc3FsaXRlUmVz
dWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgICAgICByZXR1cm4gIkVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iOwogCi0gICAg
ICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAg
Y3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAg
ICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTQyNywxOCArNDI3LDE4IEBA
IGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNl
cnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24oKm1fZGF0YWJhc2UpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9zKTsKLSAgICBpZiAoc3FsLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGluc2VydFN0YXRlbWVudCA9IG1fZGF0YWJh
c2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnRTdGF0ZW1l
bnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0
byBwcmVwYXJlIHN0YXRlbWVudCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29y
ZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGF1
dG8mIHNjcmlwdFN0b3JhZ2UgPSB0aGlzLT5zY3JpcHRTdG9yYWdlKCk7CiAgICAgZm9yIChhdXRv
JiByZWdpc3RyYXRpb24gOiByZW1vdmVkUmVnaXN0cmF0aW9ucykgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiREVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBrZXkg
PSA/Iik7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3FsLmJpbmRUZXh0KDEsIHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNlS2V5KCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gPyJfcyk7CisgICAgICAgIGlmICghZGVs
ZXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgZGVsZXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gcmVtb3ZlIHJlZ2lz
dHJhdGlvbiBkYXRhIGZyb20gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC00NTcsMTkgKzQ1NywxOSBAQCBib29sIFJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29u
dGV4dERhdGE+JgogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGNlcnRpZmljYXRl
SW5mb0VuY29kZXI7CiAgICAgICAgIGNlcnRpZmljYXRlSW5mb0VuY29kZXIgPDwgZGF0YS5jZXJ0
aWZpY2F0ZUluZm87CiAKLSAgICAgICAgaWYgKHNxbC5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJh
dGlvbi5rZXkudG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQ
b3J0KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDMsIGRhdGEu
cmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBhdGgoKS50b1N0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg0LCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9wT3Jp
Z2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
c3FsLmJpbmREb3VibGUoNSwgZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVwZGF0ZVRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5i
aW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNoZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0
ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoNywg
ZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3Fs
LmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZlcigp
LCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBz
cWwuYmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3FsLmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVy
KCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1
ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGlm
IChpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0Rh
dGFiYXNlS2V5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50
LT5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQ
b3J0KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5k
VGV4dCgzLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGRh
dGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmlnaW4oKS5kYXRhYmFzZUlkZW50aWZpZXIoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmREb3VibGUoNSwg
ZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVwZGF0ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFD
YWNoZSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5k
VGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRh
LndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVu
dC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXpl
KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4
dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVm
ZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNh
dGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXpl
KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VX
b3JrZXIsICJGYWlsZWQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRh
YmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUw
MiwyNiArNTAyLDI2IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jk
cygpCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKICAgICBSRUxFQVNFX0xPRyhTZXJ2
aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6Iik7Ci0gICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZST00gUmVjb3Jkczsi
X3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHNxbCA9
IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3Mp
OworICAgIGlmICghc3FsKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50IHRvIHJldHJpZXZlIHJlZ2lzdHJhdGlvbnMgZnJvbSByZWNvcmRzIHRh
YmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgIikgLSAiLCBtX2RhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7CiAKLSAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICBpbnQgcmVz
dWx0ID0gc3FsLT5zdGVwKCk7CiAKLSAgICBmb3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJl
c3VsdCA9IHNxbC5zdGVwKCkpIHsKKyAgICBmb3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJl
c3VsdCA9IHNxbC0+c3RlcCgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIs
ICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczogSW1wb3J0aW5nIGEgcmVnaXN0
cmF0aW9uIGZyb20gdGhlIGRhdGFiYXNlIik7Ci0gICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFiYXNlS2V5KHNxbC5nZXRDb2x1bW5UZXh0KDAp
KTsKLSAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRl
eHQoMSkgfTsKLSAgICAgICAgYXV0byBzY29wZVBhdGggPSBzcWwuZ2V0Q29sdW1uVGV4dCgyKTsK
KyAgICAgICAgYXV0byBrZXkgPSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5Ojpmcm9tRGF0
YWJhc2VLZXkoc3FsLT5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgYXV0byBvcmlnaW5VUkwg
PSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRDb2x1bW5UZXh0KDEpIH07CisgICAgICAgIGF1dG8gc2Nv
cGVQYXRoID0gc3FsLT5nZXRDb2x1bW5UZXh0KDIpOwogICAgICAgICBhdXRvIHNjb3BlVVJMID0g
VVJMIHsgb3JpZ2luVVJMLCBzY29wZVBhdGggfTsKLSAgICAgICAgYXV0byB0b3BPcmlnaW4gPSBT
ZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3FsLmdldENvbHVtblRl
eHQoMykpOwotICAgICAgICBhdXRvIGxhc3RVcGRhdGVDaGVja1RpbWUgPSBXYWxsVGltZTo6ZnJv
bVJhd1NlY29uZHMoc3FsLmdldENvbHVtbkRvdWJsZSg0KSk7Ci0gICAgICAgIGF1dG8gdXBkYXRl
VmlhQ2FjaGUgPSBzdHJpbmdUb1VwZGF0ZVZpYUNhY2hlKHNxbC5nZXRDb2x1bW5UZXh0KDUpKTsK
LSAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQo
NikgfTsKLSAgICAgICAgYXV0byB3b3JrZXJUeXBlID0gc3RyaW5nVG9Xb3JrZXJUeXBlKHNxbC5n
ZXRDb2x1bW5UZXh0KDcpKTsKKyAgICAgICAgYXV0byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3FsLT5nZXRDb2x1bW5UZXh0KDMpKTsKKyAg
ICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHNxbC0+Z2V0Q29sdW1uRG91YmxlKDQpKTsKKyAgICAgICAgYXV0byB1cGRhdGVWaWFDYWNoZSA9
IHN0cmluZ1RvVXBkYXRlVmlhQ2FjaGUoc3FsLT5nZXRDb2x1bW5UZXh0KDUpKTsKKyAgICAgICAg
YXV0byBzY3JpcHRVUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRDb2x1bW5UZXh0KDYpIH07Cisg
ICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmluZ1RvV29ya2VyVHlwZShzcWwtPmdldENvbHVt
blRleHQoNykpOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjb250ZW50U2VjdXJpdHlQb2xp
Y3lEYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRTZWN1
cml0eVBvbGljeURhdGEpOworICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBj
b250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBjc3BEZWNvZGVyKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuZGF0YSgpLCBjb250ZW50
U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSk7CiAgICAgICAgIE9wdGlvbmFsPENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycz4gY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAg
ICBpZiAoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXplKCkpIHsKQEAgLTUzMiwxMCArNTMy
LDEwIEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3Fs
LmdldENvbHVtblRleHQoOSk7CisgICAgICAgIGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwtPmdl
dENvbHVtblRleHQoOSk7CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNjcmlwdFJlc291cmNl
TWFwRGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVz
b3VyY2VNYXBEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNj
cmlwdFJlc291cmNlTWFwRGF0YSk7CiAgICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGE6OkltcG9ydGVkU2NyaXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKIAogICAgICAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3Jp
cHRSZXNvdXJjZU1hcERhdGEuZGF0YSgpLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEuc2l6ZSgpKTsK
QEAgLTU1MCw3ICs1NTAsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJl
Y29yZHMoKQogICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRl
SW5mb0RhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRpZmlj
YXRlSW5mb0RhdGEpOworICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgY2Vy
dGlmaWNhdGVJbmZvRGF0YSk7CiAgICAgICAgIE9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2Vy
dGlmaWNhdGVJbmZvOwogCiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlm
aWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZpY2F0ZUluZm9EYXRhLmRhdGEoKSwgY2VydGlmaWNhdGVJ
bmZvRGF0YS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggMGQ3MjUyYjUzNWNhMmY3ZDA4OGVkOTRlYTI2NGM5
NzZjNWQ0MzVjZC4uMTliMGEyMTQxNjJiYjYxZWE1Y2M2OTZlNWQ0MjYzZGNmOTg4MDY0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
Y3BwCkBAIC0zODIsOCArMzgyLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzZXRCdXN5VGltZW91dChtX2RhdGFi
YXNlLCAiUFJBR01BIGJ1c3lfdGltZW91dCA9IDUwMDAiKTsKLSAgICBpZiAoc2V0QnVzeVRpbWVv
dXQucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBzZXRCdXN5VGltZW91dC5zdGVwKCkgIT0gU1FM
SVRFX1JPVykgeworICAgIGF1dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1
c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0QnVzeVRpbWVvdXQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDIy
ICs0MDEsMjIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3Bl
bklUUERhdGFiYXNlKCkKIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQogewog
ICAgIFZlY3RvcjxTdHJpbmc+IG1pc3NpbmdUYWJsZXM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5
cGU9J3RhYmxlJyBhbmQgdGJsX25hbWU9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
IGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEgZmFpbGVkIHRvIHByZXBhcmUs
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMo
KSkgewotICAgICAgICBpZiAoc3RhdGVtZW50LmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElU
RV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0lu
U2NoZW1hIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9
IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNj
aGVtYSBzY2hlbWEgaXMgbWlzc2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgICAgICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsK
ICAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50
LT5yZXNldCgpOwogICAgIH0KICAgICBpZiAobWlzc2luZ1RhYmxlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC00MjYsOCArNDI2LDggQEAgT3B0aW9uYWw8VmVj
dG9yPFN0cmluZz4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zv
ck1pc3NpbmdUYWIKIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZW5hYmxlRm9yZWlnbktleXMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBlbmFibGVGb3JlaWdu
S2V5cyhtX2RhdGFiYXNlLCAiUFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIik7Ci0gICAgaWYgKGVu
YWJsZUZvcmVpZ25LZXlzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgZW5hYmxlRm9yZWlnbktl
eXMuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBlbmFibGVGb3JlaWduS2V5cyA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIl9z
KTsKKyAgICBpZiAoIWVuYWJsZUZvcmVpZ25LZXlzIHx8IGVuYWJsZUZvcmVpZ25LZXlzLT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25L
ZXlzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTQzNiwzMSArNDM2LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKIAogVGFibGVBbmRJ
bmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJs
ZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZ2V0VGFibGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNU
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicg
QU5EIHR5cGUgPSAndGFibGUnIikpOwotICAgIGlmIChnZXRUYWJsZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICd0YWJsZSci
KSk7CisgICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYg
KGdldFRhYmxlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKGdldFRh
YmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQg
dG8gZmV0Y2ggdGFibGUgc2NoZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBTdHJpbmcgY3Jl
YXRlVGFibGVRdWVyeSA9IGdldFRhYmxlU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAg
U3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRJbmRleFN0YXRlbWVudChtX2RhdGFiYXNl
LCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFt
ZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKGdldElu
ZGV4U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGdldEluZGV4
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVD
VCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICIn
IEFORCB0eXBlID0gJ2luZGV4JyIpKTsKKyAgICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRv
IHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGZvciB0aGUgdGFibGUsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4
U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gcmF3SW5kZXgg
PSBTdHJpbmcoZ2V0SW5kZXhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgaWYgKGdl
dEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIHJh
d0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAg
ICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpbmRleCA9IHJhd0lu
ZGV4OwogICAgIH0KQEAgLTQ4MCwyMCArNDgwLDIwIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2No
CiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlx
dWVJbmRpY2VzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
IG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlw
ZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciX3Mp
OworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5p
cXVlSW5kaWNlcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggY291
bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAo
c3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bWlzc2luZ1VuaXF1ZUluZGljZXMgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBp
bmRleCBjb3VudCwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi0gICAgaWYgKHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3Rl
ZEluZGV4Q291bnQpCisgICAgaWYgKHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDwgZXhwZWN0
ZWRJbmRleENvdW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTU1NCw4ICs1NTQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRv
JiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAg
ICAgYXV0byBxdWVyeSA9IG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFN
RSBUTyBfIiwgdGFibGUpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgYWx0ZXJUYWJsZShtX2Rh
dGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIGlmIChhbHRlclRhYmxlLnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sgfHwgYWx0ZXJUYWJsZS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0
byBhbHRlclRhYmxlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAg
ICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vz
c2FyeSBmYWlsZWQgdG8gcmVuYW1lIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01NzAsMTYgKzU3MCwxNiBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRl
eFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAgICAgYXV0byBxdWVyeSA9IGluc2VydERpc3RpbmN0
VmFsdWVzSW5UYWJsZVF1ZXJ5KHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IG1pZ3Jh
dGVUYWJsZURhdGEobV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAobWlncmF0ZVRhYmxl
RGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IG1pZ3JhdGVUYWJsZURhdGEuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gbWlncmF0ZVRhYmxlRGF0YSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmICghbWlncmF0ZVRhYmxlRGF0
YSB8fCBtaWdyYXRlVGFibGVEYXRhLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVk
IHRvIG1pZ3JhdGUgc2NoZW1hLCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIGRyb3BRdWVyeSA9IG1h
a2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IGRyb3BUYWJsZVF1ZXJ5KG1fZGF0YWJhc2UsIGRyb3BRdWVyeSk7Ci0gICAgICAgIGlmIChkcm9w
VGFibGVRdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGRyb3BUYWJsZVF1ZXJ5LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGRyb3BUYWJsZVF1ZXJ5ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KGRyb3BRdWVyeSk7CisgICAgICAgIGlmICghZHJvcFRhYmxl
UXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWls
ZWQgdG8gZHJvcCB0ZW1wb3JhcnkgdGFibGVzLCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01OTcsMTcgKzU5NywxNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkoKQogCiBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiUFJBR01B
IHRhYmxlX2luZm8oIiwgdGFibGVOYW1lLCAiKSIpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygi
LCB0YWJsZU5hbWUsICIpIikpOwogCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omdl
dENvbHVtbnNGcm9tVGFibGVJbmZvU3RhdGVtZW50IFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBjb2x1bW5zOwotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgYXV0byBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7
CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
YXV0byBuYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgICAgICBjb2x1bW5z
LmFwcGVuZChuYW1lKTsKICAgICB9CiAKQEAgLTYyMiwxOCArNjIyLDE4IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZShT
dHJpbmcmJiB0YWJsCiAgICAgICAgIGlmIChleGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1u
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJs
ZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFt
ZSwgIiBBREQgQ09MVU1OICIsIGNvbHVtbikpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBl
cnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAg
ICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtNjQ4LDEzICs2NDgsMTMg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0Nv
bHVtbnNJZk5lY2Vzc2FyeSgpCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnJlbmFtZUNvbHVtbkluVGFibGUoU3RyaW5nJiYgdGFibGVOYW1lLCBFeGlzdGluZ0Nv
bHVtbk5hbWUmJiBleGlzdGluZ0NvbHVtbk5hbWUsIEV4cGVjdGVkQ29sdW1uTmFtZSYmIGV4cGVj
dGVkQ29sdW1uTmFtZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsIG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBSRU5BTUUgQ09MVU1O
ICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3RlZENvbHVtbk5hbWUpKTsKLSAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJM
RSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIg
VE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVtbiBpbiB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1
bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47CkBAIC03MTIsMTUgKzcxMiwxNSBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3Nhcnko
KQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhl
IHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0YWJsZS4KLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBG
Uk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9tYWlucyciKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJf
cyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZl
ZERvbWFpbnMgdGFibGUuIik7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5v
IE9ic2VydmVkRG9tYWlucyB0YWJsZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1
dGluZyB0aGUgZmV0Y2gsIGRlbGV0ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7
CiAgICAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNl
c3NhcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCgh
Y3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNzUxLDEyICs3NTEsMTQgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVj
ZXNzYXJ5KCkKIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29u
c3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAg
ICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1f
ZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwot
ICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQo
cXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9
OwogICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUo
KS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkp
OwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0
ZW1lbnQuZ2V0KCkgfTsKIH0KQEAgLTEwMDQsOSArMTAwNiw4IEBAIE9wdGlvbmFsPHVuc2lnbmVk
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVn
aXN0cmFiCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gU3RhdGVtZW50OiAlcy4g
RXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBzY29wZWRTdGF0ZW1l
bnQtPnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBk
b21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQpAQCAtMTAzOSwyMyArMTA0MCwyMyBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPiYgZG9tYWluTGlzdCwgdW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAg
U1FMaXRlU3RhdGVtZW50IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoZG9tYWluTGlzdCks
ICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VE
b21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7IikpOwogICAgIAotICAgIGlmIChpbnNlcnRSZWxh
dGlvbnNoaXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNl
cnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09L
KSB7CisgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5z
ZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVf
T0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21h
aW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICBpZiAoc3RhdGVtZW50LmNvbnRh
aW5zKCJSRVBMQUNFIikpIHsKLSAgICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVu
dC5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkpICE9IFNRTElURV9PSykgeworICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVt
ZW50LT5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBA
IC0xMjI5LDE3ICsxMjMwLDE3IEBAIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0CiAKICAgICBWZWN0
b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gdGhpcmRQ
YXJ0eURhdGFMaXN0OwogICAgIGNvbnN0IGF1dG8gcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0
ZXIgPSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZTo6QWxsID8gIiUiIDogIjEiOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzb3J0ZWRT
dGF0aXN0aWNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlz
dGljc0ZvclNvcnRpbmcoKSkpOwotICAgIGlmIChzb3J0ZWRTdGF0aXN0aWNzLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5kVGV4dCgxLCBwcmV2
YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5i
aW5kVGV4dCgyLCAiJSIpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc29ydGVkU3RhdGlzdGlj
cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9p
blN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkpKTsKKyAgICBpZiAoIXNvcnRlZFN0YXRpc3RpY3MK
KyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMSwgcHJldmFsZW50RG9tYWlu
c0JpbmRQYXJhbWV0ZXIpCisgICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDIs
ICIlIikgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFy
dHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIH0KLSAgICB3aGlsZSAoc29ydGVkU3RhdGlz
dGljcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFy
dHkoc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5JbnQoMSkpKSB7Ci0gICAgICAgICAgICBhdXRv
IHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDApOwor
ICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy0+Z2V0Q29sdW1uSW50
KDEpKSkgeworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0
aXN0aWNzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21h
aW4gPSBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh0aGlyZFBhcnR5RG9tYWluSUQp
KTsKICAgICAgICAgICAgIHRoaXJkUGFydHlEYXRhTGlzdC5hcHBlbmQoV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSB7IHRoaXJkUGFydHlEb21haW4sIGdldFRo
aXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh0aGlyZFBhcnR5RG9tYWlu
SUQsIHRoaXJkUGFydHlEb21haW4pIH0pOwogICAgICAgICB9CkBAIC0xMjY1LDkgKzEyNjYsOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNv
cmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucwogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jk
c1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWlu
IElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAgIGlmIChkb21haW5z
VG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFr
ZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0g
ZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9t
YWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50U3RhdGlz
dGljc0ZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMjg1LDMxICsxMjg1LDMwIEBAIHVuc2lnbmVkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxl
bnREb21haW5zCiAgICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOwogCiAgICAgU3RkU2V0PHVu
c2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOwotICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5k
U3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsICJTRUxFQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJ
Tk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsK
LSAgICBpZiAoZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGZpbmRTdWJyZXNvdXJjZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gZmluZFN1YnJlc291cmNlcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWlu
SUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZl
ZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBB
TkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKCFmaW5kU3Vi
cmVzb3VyY2VzIHx8IGZpbmRTdWJyZXNvdXJjZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklE
KSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJl
Y3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFp
biBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJj
ZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmlu
ZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJj
ZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdEb21haW5JRCA9IGZp
bmRTdWJyZXNvdXJjZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0byBpbnNlcnRSZXN1
bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFpbklEKTsK
ICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAgICBuZXdseUlkZW50
aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgfQogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFzZSwgIlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9t
YWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBp
ZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRU
b3BGcmFtZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAg
IGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWRE
b21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5J
RCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVu
dCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZyYW1lcworICAgICAgICB8fCBmaW5kVG9wRnJh
bWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnRE
b21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29sdW1uSW50KDApOwor
ICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAg
ICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAg
ICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmlu
c2VydChuZXdEb21haW5JRCk7CiAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAg
ICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluSUQpOwpAQCAt
MTM0MSwyMSArMTM0MCwyMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbAogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVU
b1JlZGlyZWN0OwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
byBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5p
c1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50
LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVk
aXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxl
bnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LmdldENv
bHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWlu
SUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVk
RG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdWJyZXNvdXJjZVJlZGlyZWN0
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJl
Y3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7
CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNv
dXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVk
RG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3Mp
OwotICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVf
T0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0
b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byB0b3BG
cmFtZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9N
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2
ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklE
IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0
YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVU
b1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFsZW50U3RhdGVtZW50
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJl
dmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JS
YW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5i
ZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikpOwotICAgIGlmICht
YXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
bWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRv
IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFr
ZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJF
IGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNp
Z25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHByZXZhbGVu
dER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKCFtYXJrUHJldmFsZW50U3Rh
dGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEzNjYsMTIgKzEzNjQs
MTIgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIAogICAgIEhhc2hNYXA8dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+
IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4s
IGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9
IDAiX3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnByZXBh
cmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50
UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21S
ZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKKyAgICBhdXRvIG5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAgIGlmIChub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAg
ICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgICAgICwgbm90VmVy
eVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdwogICAgICAg
ICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKICAgICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwg
dmFsdWUpOwogICAgICAgICB9CkBAIC0xMzg2LDQzICsxMzg0LDQzIEBAIEhhc2hNYXA8dW5zaWdu
ZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50
UmVzb3VyY2VzCiAKICAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElU
RV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9t
YWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCht
YWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21h
aW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291
cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJl
c291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0
byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3Vs
dCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5J
RCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAg
ICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJp
bmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAo
IiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIp
KTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7
CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1l
bnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5J
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291
bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3Vs
dHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3ViZnJhbWVEb21haW5JRCwgQ09VTlQodG9wRnJh
bWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YmZy
YW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YmZy
YW1lRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3Vu
dFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9S
T1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCkpOworICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJm
cmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJ
bnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAgICBpZiAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChz
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21h
aW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50
U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1
ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJT
RUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRl
cmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0g
ICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNF
TEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVy
ZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0
LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbklu
dCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xNTQ5LDEwICsxNTQ3LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAg
fQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzKG1f
ZGF0YWJhc2UsICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJz
dFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBp
bmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9z
KTsKKyAgICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgaW5jcmVtZW50
U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3Rv
cmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNjQ2LDkgKzE2NDQsOCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5z
KGNvbnN0IEhhc2hTZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omdy
YW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
SU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRv
bWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtl
U3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVS
RSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIp
KTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE3NzYsMTAg
KzE3NzMsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUo
bV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWluSUQgPSA/Iik7Ci0gICAg
aWYgKHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5iaW5kSW50KDEsICp0
YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVt
b3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1v
dmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBm
YWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQpAQCAtMTgzMiwxMCArMTgyOSwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJs
ZQogICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQg
PSA/Iik7Ci0gICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgKnRhcmdldFJlc3Vs
dC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFjY2VzcyA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVT
dG9yYWdlQWNjZXNzCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwg
KnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCByZW1vdmVTdG9y
YWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xOTE4
LDkgKzE5MTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPgogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0
ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwg
ZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVt
ZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwg
YnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4o
ZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAgIGlmICghZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRE
b21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMwMSwxNiArMjI5NywxNSBAQCBD
b29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZUFj
Y2Vzcyhjb25zdCBTdWJSZXNvdXJjZQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlz
UHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUg
cmVnaXN0cmFibGVEb21haW4gPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVy
YWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
cyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdWJyZXNv
dXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGJvb2wgaGFz
Tm9FbnRyeSA9IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKLSAgICBib29sIGlzUHJl
dmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOwotICAg
IGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3RhdGVtZW50LmdldENv
bHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsKKyAgICBib29sIGhhc05vRW50cnkgPSBzdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XOworICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhaGFzTm9F
bnRyeSAmJiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOworICAgIGJvb2wgaGFkVXNlcklu
dGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkgPyB0
cnVlIDogZmFsc2U7CiAKICAgICBpZiAoIWFyZUFsbFRoaXJkUGFydHlDb29raWVzQmxvY2tlZFVu
ZGVyKHRvcEZyYW1lRG9tYWluKSAmJiAhaXNQcmV2YWxlbnQpCiAgICAgICAgIHJldHVybiBDb29r
aWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xpY3k7CkBAIC0yMzMzLDE0ICsyMzI4LDE0IEBAIFN0
b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aGFzVXNlckdyYW50ZWRTCiAKICAgICBhdXRvIGZpcnN0UGFydHlQcmltYXJ5RG9tYWlu
SUQgPSAqcmVzdWx0LnNlY29uZDsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
RG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Iik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHN0YXRlbWVudC5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VO
VCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5J
RCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudAor
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcmVxdWVzdGluZ0RvbWFpbklEKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmlt
YXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3du
OjpObzsKIAotICAgIHJldHVybiAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6
Tm87CisgICAgcmV0dXJuICEhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNj
ZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87
CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNvbnN0CkBA
IC0yMzQ4LDEyICsyMzQzLDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kCiAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZh
bGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDAiX3MpOwotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0g
MCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAg
IAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJl
c3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0
cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGls
ZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBl
bmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0czsKIH0KQEAgLTIzNjMsMTIgKzIzNTgsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tC
dXQKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBG
Uk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRl
cmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVz
dWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQot
ICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRl
RnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7
CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJl
c3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0
cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICBy
ZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNzgsMTIgKzIzNzMsMTIgQEAgVmVjdG9yPFJlZ2lzdHJh
YmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dp
dGhVc2VySW4KICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxS
ZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQu
c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxl
RG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMjM5MywxMyArMjM4
OCwxMiBAQCBIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1YkZyYW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFp
biBGUk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJsZURvbWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50
b3BMZXZlbERvbWFpbklEIGFzIHRvcExldmVsRG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
YXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdI
RVJFIG8uZG9tYWluSUQgPSBzLmRvbWFpbklEKSBhcyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21h
aW5zIE9OIGRvbWFpbklEID0gei50b3BMZXZlbERvbWFpbklEOyJfcyk7Ci0KLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFi
bGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21h
aW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
YXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2Vy
dmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsiX3MpOworICAgIGlm
ICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAgIHdoaWxlIChzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3Jl
YXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAg
IHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0
cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAt
MjQ0NSwxOSArMjQzOSwxOCBAQCBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYQogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxEb21haW5EYXRhPiByZXN1bHRz
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21h
aW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBo
YWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9NIE9ic2VydmVkRG9t
YWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQoKikgYXMgY291bnRP
ZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCkgYXMgeiBPTiB6
LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVk
LCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVS
ZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9t
YWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkg
c291cmNlRG9tYWluSUQpIGFzIHogT04gei5zb3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAg
d2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHRz
LmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDAp
KQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJl
Z2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQotICAgICAg
ICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LmdldENvbHVtbkRvdWJs
ZSgyKSkKLSAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCgzKSA/IHRydWUgOiBm
YWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZh
bHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNSkgPyB0cnVlIDogZmFs
c2UKLSAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoNikpCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNo
ZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVt
ZW50LT5nZXRDb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludCg2KSkKICAgICAgICAgfSk7CiAgICAgfQogICAg
IApAQCAtMjQ3MywxMSArMjQ2NiwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJgogCiAgICAg
YXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVu
c2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklEc1RvQ2xlYXIuYmVnaW4oKSwgZG9tYWluSURzVG9D
bGVhci5lbmQoKSkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyR3JhbmRmYXRoZXJpbmdT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAi
KSIpKTsKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIs
ICIpIikpOworICAgIGlmICghY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTI2MTcsMjMgKzI2MTAs
MjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0
aXN0aWNzSWZOZWVkZWQoKQogICAgIHNpemVfdCBjb3VudExlZnRUb1BydW5lID0gY291bnQgLSBw
YXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvOwogICAgIEFTU0VSVChjb3VudExlZnRUb1By
dW5lKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZWNvcmRzVG9QcnVuZShtX2RhdGFiYXNlLCAi
U0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRl
cmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iKTsKLSAgICBpZiAocmVjb3Jk
c1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZWNvcmRzVG9QcnVu
ZS5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykgeworICAgIGF1dG8g
cmVjb3Jkc1RvUHJ1bmUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50ZXJhY3Rpb24sIGlz
UHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Il9zKTsKKyAgICBpZiAoIXJlY29yZHNUb1BydW5l
IHx8IHJlY29yZHNUb1BydW5lLT5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElU
RV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFp
bGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gZW50cmllc1RvUHJ1bmU7
Ci0gICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUuZ2V0Q29sdW1uSW50KDApKTsK
KyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAg
ICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmdldENvbHVtbkludCgwKSk7
CiAKICAgICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxW
ZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZW50cmllc1RvUHJ1bmUuYmVnaW4oKSwgZW50cmll
c1RvUHJ1bmUuZW5kKCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwcnVuZUNvbW1hbmQobV9k
YXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRv
bWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7Ci0gICAgaWYgKHBydW5lQ29tbWFuZC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHBydW5lQ29tbWFuZC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUg
ZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIpKTsKKyAgICBpZiAoIXBydW5lQ29tbWFu
ZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjcxNywzNSArMjcwOCwzMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cgogCiBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0NvcnJlY3RTdWJTdGF0
aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YmZyYW1lRG9tYWluLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50KG1fZGF0YWJhc2UsIGNvdW50U3ViZnJhbWVVbmRl
clRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5
KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtX2Rh
dGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CisgICAgYXV0
byBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BG
cmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBp
ZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQg
dG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5k
ZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVl
KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5i
aW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuYmluZEludCgxLCBkb21h
aW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVE
b21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJp
bmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSykg
eworICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgxLCBkb21haW5J
RChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YkZy
YW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWlu
KS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJpbmRJbnQoMSwgZG9tYWlu
SUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9t
YWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5z
dGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVD
b3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3Vu
dC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5n
ZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldENv
bHVtbkludCgwKSA9PSAxKTsKKyAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50
LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+
Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Z2V0
Q29sdW1uSW50KDApID09IDEpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKQEAgLTI4
MTIsMjcgKzI4MDEsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJgogICAgIGlmIChxdWVyeS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0
YShtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAgYXV0byBkYXRhID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KHF1ZXJ5KTsKICAgICAKLSAgICBpZiAoZGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGRhdGEuYmluZEludCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFp
bjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09L
KSB7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEtPmJpbmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNR
TElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3Vi
U3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxlZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGlmIChkYXRhLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlm
IChkYXRhLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgICIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKHRhYmxl
TmFtZSk7CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6XG4iKTsKICAgICAKLSAgICBhdXRv
IHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLmdldENvbHVtbkludCgw
KSk7CisgICAgYXV0byByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+
Z2V0Q29sdW1uSW50KDApKTsKICAgICBhcHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsK
ICAgICAKLSAgICB3aGlsZSAoZGF0YS5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBy
ZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRDb2x1bW5JbnQoMCkp
OworICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1
bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsK
ICAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAgICAgfQogfQpAQCAt
Mjk0NiwyOCArMjkzNCwyNiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklEKQogCiB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFt
ZXRlcnMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3Mp
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFy
IERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMTsiX3MpOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KG1fZGF0YWJhc2UsICJT
RUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVT
QywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CisgICAgYXV0byBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOworICAgIGF1dG8gZ2V0TW9zdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBE
RVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKKyAgICBhdXRvIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAq
IEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250
aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87Il9zKTsKIAotICAgIGlmIChjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY291bnRP
cGVyYXRpbmdEYXRlc1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICgh
Y291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9J
Rl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50T3BlcmF0aW5nRGF0
ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9vcGVyYXRp
bmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LmdldENvbHVtbkludCgw
KTsKKyAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1l
bnQtPmdldENvbHVtbkludCgwKTsKIAotICAgIGlmIChnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGdldE1vc3RSZWNl
bnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYg
KCFnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRNb3N0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBn
ZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RS
ZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2Vu
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgIG1fbW9zdFJlY2VudE9w
ZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMikpOwogCi0gICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghZ2V0T3BlcmF0aW5nRGF0
ZVdpbmRvd1N0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQgZmFpbGVkIGR1cmluZyB0aGUgY2FsbCB0byBwcmVwYXJlKCkgd2l0aCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI5NzYsMjYgKzI5NjIsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKICAgICBpZiAobV9vcGVy
YXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpCiAgICAgICAg
IG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2Ugewot
ICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5iaW5kSW50KDEsIG9w
ZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsK
KyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
b3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRp
bmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQg
d2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNv
dWxkIGJlIGluIHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJh
dGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVt
bkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikp
OworICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVX
aW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogCiAgICAgaWYgKG1fb3Bl
cmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpCiAgICAgICAg
IG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucmVzZXQoKTsKLSAgICAgICAg
aWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZEludCgxLCBvcGVyYXRpbmdE
YXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAg
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNX
aW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVy
cyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNh
bGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0
aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgwKSwg
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAgICAgICAgbV9sb25n
V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdl
dENvbHVtbkludCgyKSk7CiAgICAgfQogfQogCkBAIC0zMDExLDIxICsyOTk3LDIxIEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0
aW5nRGF0ZUlmTmVjZXNzYXJ5CiAKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0Rh
dGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1By
dW5lID4gMCkgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlTGVhc3RSZWNlbnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcGVyYXRpbmdEYXRl
cyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3MpOwotICAgICAgICBp
ZiAoZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC5iaW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9wZXJh
dGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7Cisg
ICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAg
ICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJ
bnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlTGVh
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09w
ZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/
LCA/LCA/OyJfcyk7Ci0gICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LmJpbmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywg
dG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNF
UlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkg
U0VMRUNUID8sID8sID87Il9zKTsKKyAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCB0
b2RheS55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LT5iaW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIHRvZGF5Lm1vbnRo
RGF5KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTMwNjksMTYgKzMwNTUsMTYgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxU
aW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsK
ICAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUo
V2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsKIAotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhE
YXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCBkYXRlVG9JbnNlcnQueWVhcigpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmlu
ZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1v
bnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNF
UlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkg
U0VMRUNUID8sID8sID87Il9zKTsKKyAgICAgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50CisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5k
SW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9u
dGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omlu
c2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LnJlc2V0KCk7CisgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0
KCk7CiAgICAgfQogCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CkBAIC0z
MjAxLDM2ICszMTg3LDM2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDCiAgICAgICAgIC8vIFdl
IHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2YXRlIGNsaWNrIG1l
YXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVwb3J0IHRp
bWVzLgogICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5kICE9IC0xICYmIGRl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKIAotICAgICAgICBhdXRvIHN0YXRl
bWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJj
ZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5k
SW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQo
KS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCg0LCBh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0
YXRlbWVudC5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9r
ZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoOSwgc291
cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNl
NjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJs
ZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RU
aW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVl
cnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29u
ZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0
cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRJbnQoNCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNSwgcHJpb3JpdHkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRp
bWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGlt
ZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5C
YXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5r
YWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoMTAsIHNvdXJjZVVubGlua2Fi
bGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0
cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJs
ZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1
ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25E
YXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMs
IGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0
ZW1lbnQuYmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJp
bmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+
dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3RhdGVtZW50LmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlu
a2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9r
ZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChp
bnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKKyAgICBpZiAo
IXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEu
c2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICph
dHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50
aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg1LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4g
PyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNiwgc291cmNlVW5s
aW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwg
OiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtl
eUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNDM1LDE0ICszNDIxLDE0IEBAIFN0
cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXR0cmlidXRpb25Ub1N0
cmluZyhXZWJDb3JlOjpTUUxpdGVTCiAKIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZygpCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyhtX2RhdGFiYXNl
LCAiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7Ci0gICAgaWYgKHByaXZhdGVDbGlja01l
YXN1cmVtZW50RGF0YUV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IHByaXZhdGVDbGlj
a01lYXN1cmVtZW50RGF0YUV4aXN0cy5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8g
cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZST00gQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKKyAgICBpZiAoIXByaXZhdGVD
bGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFF
eGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0g
ICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDAp
ICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDEpKQor
ICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQo
MCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0Q29sdW1uSW50KDEp
KQogICAgICAgICByZXR1cm4gIlxuTm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQg
ZGF0YS5cbiJfczsKIAogICAgIGF1dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQsIGFsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25zUXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
Il9zKTsKQEAgLTM1NzMsMTEgKzM1NTksMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUMKICAg
ICBpZiAoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgfHwgc291cmNlRWFybGllc3RUaW1l
VG9TZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJBdHRy
aWJ1dGVkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoY2xlYXJBdHRyaWJ1dGVkU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNp
dGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8g
QU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFjbGVhckF0dHJp
YnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVh
ckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNTg3LDE4ICszNTczLDE3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9
IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9T
b3VyY2VTdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291
cmNlID0gPyIpOwotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRl
bWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9
IG51bGwiKTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9ID8iX3MpOworICAg
IGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCi0g
ICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQu
YmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNl
U3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGlu
YXRpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVz
dFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCB8fCBl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggNTIzMjMzZDE4YjA0MDAzZWYzMGQzMzYzMmNmZTYyZjAy
ZjI3YTM0OC4uM2E2NWZjY2VmMTg5ZjA3Yzg5MTY1YTljNjIyN2E1Y2FkMTQwNzAyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgY29uc3QgY2hhciBn
ZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUi
Oworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVD
VCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07CiAKIFJlZjxMb2NhbFN0b3JhZ2VEYXRh
YmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShTdHJpbmcmJiBkYXRhYmFzZVBhdGgs
IHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKQEAgLTk5LDEwICs5OSwxMCBAQCBib29sIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgIGlmICghbV9k
YXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJP
TSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKIAog
ICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8g
Y2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNC
bG9iKDApKQorICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigw
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgd2l0
aCB0aGUgcmlnaHQgdHlwZSwgY29weSBhbGwgdGhlIGRhdGEgb3ZlciB0byBpdCBhbmQgdGhlbiBy
ZXBsYWNlIHRoZSBuZXcgdGFibGUgd2l0aCB0aGUgb2xkIHRhYmxlLgpAQCAtMzAyLDE5ICszMDIs
MTggQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZS
T00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09V
TlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBs
b2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQg
cmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewor
ICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZv
ciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gIXF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICByZXR1cm4gIXF1ZXJ5LT5nZXRDb2x1
bW5JbnQoMCk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5n
KCkKQEAgLTMzMCwxNCArMzI5LDE1IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5J
ZkV4aXN0aW5nKCkKICAgICAgICAgc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQs
IGdldEl0ZW1zUXVlcnlTdHJpbmcpOwogfQogCi1TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxT
UUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0CitT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVk
U3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFT
Q0lJTGl0ZXJhbCBxdWVyeSkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVl
PFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBBU1NFUlQobV9k
YXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJl
cGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3Ip
CiAgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9Owor
ICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVl
UHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKICAgICB9CiAgICAg
cmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGI3ZWYwMzRkMmE4NmMyNGJkMDRk
Zjc5NDMxN2NhYmFmYzAzZTc0NmMuLjM5OGRhN2RjZmIyOGRkMzBkMmU2MGE1MTRkZGU5YjE5ZDU1
MzYyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC02Miw3ICs2Miw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRh
dGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3Q7CisgICAgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25z
dDsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcAppbmRleCBmNDUwNmY4YmQxNDBmZDQ5NGMxMTAwYWNm
YTQ0NTM0ZDA0YTFlN2RiLi4yNDdjYzIzZTdiYzQ5NDUyNDczYzJhZTY5MjhjMDY5MzFjMjg0YjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFz
ZS5jcHAKQEAgLTY2LDcgKzY2LDggQEAgSWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNlV3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uTnVt
YmVyID0gU1FMaXRlU3RhdGVtZW50KG1fZGIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJh
c2VJbmZvIFdIRVJFIGtleSA9ICdWZXJzaW9uJzsiKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAg
IGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnVmVyc2lvbic7Il9zKTsKKyAg
ICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVy
c2lvblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgaWYgKGRhdGFiYXNl
VmVyc2lvbk51bWJlciA+IGN1cnJlbnREYXRhYmFzZVZlcnNpb24pIHsKICAgICAgICAgICAgIExP
RyhJY29uRGF0YWJhc2UsICJEYXRhYmFzZSB2ZXJzaW9uIG51bWJlciAlZCBpcyBncmVhdGVyIHRo
YW4gb3VyIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgJWQgLSBjbG9zaW5nIHRoZSBkYXRhYmFzZSB0
byBwcmV2ZW50IG92ZXJ3cml0aW5nIG5ld2VyIHZlcnNpb25zIiwKICAgICAgICAgICAgICAgICBk
YXRhYmFzZVZlcnNpb25OdW1iZXIsIGN1cnJlbnREYXRhYmFzZVZlcnNpb24pOwpAQCAtODQsNyAr
ODUsNyBAQCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFs
bG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICB9CiAKICAgICAgICAgLy8g
UmVkdWNlIHNxbGl0ZSBSQU0gY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgMjAwMCBwYWdlcyAofjEu
NWtCIHBlciBwYWdlKS4gM01CIG9mIGNhY2hlIGZvciBpY29uIGRhdGFiYXNlIGlzIG92ZXJraWxs
LgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgIlBSQUdNQSBjYWNoZV9zaXplID0gMjAw
OyIpLmV4ZWN1dGVDb21tYW5kKCk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdN
QSBjYWNoZV9zaXplID0gMjAwOyJfcyk7CiAKICAgICAgICAgaWYgKGFsbG93RGF0YWJhc2VXcml0
ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6OlllcykgewogICAgICAgICAgICAgbV9wcnVuZVRpbWVy
ID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxJY29uRGF0YWJhc2U+PihSdW5Mb29wOjpjdXJy
ZW50KCksIHRoaXMsICZJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCk7CkBAIC0xNzUsMTcg
KzE3NiwxNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFw
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGltcG9ydFF1ZXJ5ID0gbWFrZVN0cmlu
ZygiU0VMRUNUIFBhZ2VVUkwudXJsLCBJY29uSW5mby51cmwsIEljb25JbmZvLnN0YW1wIEZST00g
UGFnZVVSTCBJTk5FUiBKT0lOIEljb25JbmZvIE9OIFBhZ2VVUkwuaWNvbklEPUljb25JbmZvLmlj
b25JRCBXSEVSRSBJY29uSW5mby5zdGFtcCA+ICIsIGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBu
b3RVc2VkSWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSks
ICc7Jyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIGltcG9ydFF1ZXJ5KTsKLSAg
ICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBt
X2RiLnByZXBhcmVTdGF0ZW1lbnQoaW1wb3J0UXVlcnkpOworICAgIGlmICghcXVlcnkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBpY29uIHVybCBpbXBvcnQgcXVlcnki
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0ID0gcXVlcnkuc3Rl
cCgpOworICAgIGF1dG8gcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICBMb2NrSG9sZGVyIGxv
Y2tIb2xkZXIobV9wYWdlVVJMVG9JY29uVVJMTWFwTG9jayk7CiAgICAgd2hpbGUgKHJlc3VsdCA9
PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnku
Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uVGV4dCgxKSk7Ci0gICAgICAgIHJlc3Vs
dCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgbV9wYWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVy
eS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnktPmdldENvbHVtblRleHQoMSkpOworICAgICAgICBy
ZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAgIHN0YXJ0UHJ1bmVUaW1lcigpOwpA
QCAtMjE0LDEyICsyMTUsMTIgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgp
CiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX3BydW5lSWNvbnNTdGF0
ZW1lbnQpIHsKLSAgICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAo
Pyk7Iik7Ci0gICAgICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcnVuZUljb25zU3RhdGVtZW50ID0gbV9kYi5wcmVw
YXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8p
OyJfcyk7CisgICAgICAgIGlmICghcHJ1bmVJY29uc1N0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHBydW5lSWNvbnMgZmFpbGVkIik7Ci0gICAg
ICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9IHBydW5lSWNv
bnNTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAo
bV9wcnVuZUljb25zU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZmxvb3IoKFdhbGxUaW1lOjpub3co
KSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25k
cygpKSkgIT0gU1FMSVRFX09LKSB7CkBAIC0yMzAsOCArMjMxLDggQEAgdm9pZCBJY29uRGF0YWJh
c2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYik7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBpZiAobV9wcnVuZUljb25zU3Rh
dGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29t
bWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGlj
b25JRCBGUk9NIEljb25JbmZvKTsiKTsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVM
RVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00g
SWNvbkluZm8pOyIpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJ
Y29uRGF0YSBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8p
OyJfcyk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIFBhZ2VVUkwg
V0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiX3MpOwog
ICAgIH0KICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnJlc2V0KCk7CiAKQEAgLTI4NSwxMiAr
Mjg2LDEyIEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6aWNvbklERm9ySWNvblVS
TChjb25zdCBTdHJpbmcmIGljb25VUkwsIGJvb2wmIGV4CiAgICAgQVNTRVJUKG1fZGIuaXNPcGVu
KCkpOwogCiAgICAgaWYgKCFtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAg
bV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGIsICJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25J
bmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbklERm9y
SWNvblVSTFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IGljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJT
RUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJF
IEljb25JbmZvLnVybCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWljb25JREZvckljb25VUkxT
dGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBp
Y29uSURGb3JJY29uVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uSURGb3JJY29uVVJM
U3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIH0KKyAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gaWNvbklERm9y
SWNvblVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAg
IGlmIChtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGljb25VUkwpICE9
IFNRTElURV9PSykgewpAQCAtMzE1LDEyICszMTYsMTIgQEAgYm9vbCBJY29uRGF0YWJhc2U6OnNl
dEljb25JREZvclBhZ2VVUkwoaW50NjRfdCBpY29uSUQsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkK
ICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZ
ZXMpOwogCiAgICAgaWYgKCFtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQpIHsKLSAgICAg
ICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmwsIGljb25JRCkgVkFMVUVTICgo
PyksID8pOyIpOwotICAgICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc2V0SWNvbklERm9yUGFnZVVS
TFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFBhZ2VV
UkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzZXRJ
Y29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBh
cmluZyBzdGF0ZW1lbnQgc2V0SWNvbklERm9yUGFnZVVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAg
IG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3Rh
dGVtZW50ID0gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1
ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHBhZ2VVUkwpICE9IFNRTElURV9PSwpAQCAtMzQyLDEyICszNDMsMTIgQEAg
VmVjdG9yPGNoYXI+IEljb25EYXRhYmFzZTo6aWNvbkRhdGEoaW50NjRfdCBpY29uSUQpCiAgICAg
QVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25EYXRhU3RhdGVtZW50KSB7
Ci0gICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVu
dD4obV9kYiwgIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRh
dGEuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+cHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25EYXRhU3RhdGVtZW50ID0g
bV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIEljb25EYXRhLmRhdGEgRlJPTSBJY29u
RGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29u
RGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVt
ZW50IGljb25EYXRhIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9
IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CisgICAgICAgIG1f
aWNvbkRhdGFTdGF0ZW1lbnQgPSBpY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1
ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2ljb25EYXRhU3RhdGVtZW50LT5iaW5kSW50NjQo
MSwgaWNvbklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTM3MCwyMCArMzcxLDIwIEBAIE9wdGlvbmFs
PGludDY0X3Q+IEljb25EYXRhYmFzZTo6YWRkSWNvbihjb25zdCBTdHJpbmcmIGljb25VUkwsIGNv
bnN0IFZlY3RvcjxjaGFyCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93
RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9hZGRJY29uU3RhdGVtZW50KSB7Ci0g
ICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50Piht
X2RiLCAiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Iik7
Ci0gICAgICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgYXV0byBhZGRJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRl
bWVudCgiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Il9z
KTsKKyAgICAgICAgaWYgKCFhZGRJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgYWRkSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1f
YWRkSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IGFkZEljb25TdGF0
ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2FkZElj
b25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtl
VW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29u
SUQsIGRhdGEpIFZBTFVFUyAoPywgPyk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25EYXRhU3Rh
dGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gYWRkSWNvbkRh
dGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29u
RGF0YSAoaWNvbklELCBkYXRhKSBWQUxVRVMgKD8sID8pOyJfcyk7CisgICAgICAgIGlmICghYWRk
SWNvbkRhdGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0
YXRlbWVudCBhZGRJY29uRGF0YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNvbkRhdGFT
dGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICAgICAgfQorICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gYWRkSWNvbkRhdGFTdGF0
ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9hZGRJ
Y29uU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBTUUxJVEVfT0spIHsKQEAgLTQx
MywxMiArNDE0LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGltZXN0YW1wKGlu
dDY0X3QgaWNvbklELCBpbnQ2NF90IHRpbWVzdGFtcCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFi
YXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3VwZGF0
ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1w
U3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJVUERBVEUgSWNv
bkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyIpOwotICAgICAgICBpZiAobV91
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGF1dG8gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhl
YXBTdGF0ZW1lbnQoIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAgPSA/IFdIRVJFIGljb25JRCA9
ID87Il9zKTsKKyAgICAgICAgaWYgKCF1cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgdXBkYXRlSWNvblRpbWVz
dGFtcCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVu
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV91
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVu
dC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3VwZGF0ZUlj
b25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB0aW1lc3RhbXApICE9IFNRTElURV9P
SyB8fCBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBpY29uSUQp
ICE9IFNRTElURV9PSykgewpAQCAtNDM3LDI4ICs0MzgsMjggQEAgdm9pZCBJY29uRGF0YWJhc2U6
OmRlbGV0ZUljb24oaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdy
aXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9kZWxldGVQYWdl
VVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25T
dGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9N
IFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2Rl
bGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICBhdXRvIGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQg
PSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBkZWxldGVQYWdl
VVJMc0Zvckljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNv
blN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBkZWxldGVQYWdlVVJMc0Zv
ckljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYg
KCFtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvbkRhdGFT
dGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9N
IEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1f
ZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBkZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1l
bnQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiX3Mp
OworICAgICAgICBpZiAoIWRlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAg
ICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBk
ZWxldGVJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0K
ICAgICBpZiAoIW1fZGVsZXRlSWNvblN0YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25T
dGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9N
IEljb25JbmZvIFdIRVJFIEljb25JbmZvLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1f
ZGVsZXRlSWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBh
dXRvIGRlbGV0ZUljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxF
VEUgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFkZWxldGVJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlBy
ZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVs
ZXRlSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKyAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gZGVsZXRlSWNvblN0YXRlbWVudC52
YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2RlbGV0ZVBhZ2VV
UkxzRm9ySWNvblN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25JRCkgIT0gU1FMSVRFX09LCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4
IGNlNWMyOWJhYTU4MDVjYTQyZjQ4ZWYwNTBiODMyZDBjZDVjY2UxMWMuLmNhZTA4MmYxM2RjZDM2
OGM0ODE5NWJlMzExZjIwYTViNjY0NDhmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
U3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBTdG9y
YWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxF
Q1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgICAgICBhdXRvIHF1ZXJ5ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUg
TElNSVQgMSJfcyk7CiAgICAgICAgIC8vIHRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZC4K
LSAgICAgICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCisgICAgICAgIGlm
IChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTMyNiw4ICszMjYsOCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6cGVyZm9ybUltcG9ydCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRh
YmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qga2V5LCB2YWx1ZSBG
Uk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2Ui
KTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSwxMCAr
MzM1LDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KCkKIAogICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnku
c3RlcCgpOworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIHdoaWxlIChyZXN1
bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5U
ZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkpOwotICAgICAgICByZXN1bHQg
PSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0
KDApLCBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKKyAgICAgICAgcmVzdWx0ID0g
cXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7
CkBAIC00MTIsMjcgKzQxMiwyNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNs
ZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcwogCiAgICAgLy8g
SWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVm
b3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBpbi4KICAgICBpZiAoY2xlYXJJdGVtcykgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1U
YWJsZSIpOwotICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
ICAgICBhdXRvIGNsZWFyID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAoIWNsZWFyKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0
byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOworICAgICAgICBpbnQgcmVz
dWx0ID0gY2xlYXItPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRo
ZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2Rh
dGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAo
aW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGluc2VydCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywg
PykiX3MpOworICAgIGlmICghaW5zZXJ0KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdl
IGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcmVtb3ZlKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8i
KTsKLSAgICBpZiAocmVtb3ZlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJl
bW92ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gSXRlbVRhYmxl
IFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAoIXJlbW92ZSkgewogICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9j
YWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDQzLDIx
ICs0NDMsMjEgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBj
b25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9u
IHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhp
cyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVl
cnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7CisgICAgICAgIGF1dG8m
IHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAg
IHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgICAgICBxdWVyeS0+YmluZFRleHQoMSwg
aXQtPmtleSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub24tbnVs
bCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4KICAgICAg
ICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigy
LCBpdC0+dmFsdWUpOworICAgICAgICAgICAgcXVlcnktPmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7
CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3Vs
dCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBxdWVyeS5yZXNldCgpOworICAgICAgICBxdWVyeS0+cmVzZXQo
KTsKICAgICB9CiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CkBAIC00OTksMzEgKzQ5OSwz
MyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSgpCiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIp
OwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gY291bnQgPSBb
Jl0geworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAoIXF1ZXJ5KSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBp
biBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8g
cmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKLSAgICBp
bnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykg
ewotICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Yg
cm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHF1
ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CisgICAgfSgpOworICAgIGlmIChjb3VudCkKICAgICAgICAg
cmV0dXJuOwotICAgIH0KIAotICAgIGludCBjb3VudCA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsK
LSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7Ci0gICAgICAgIG1f
ZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCku
aXNBY3RpdmUoKSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVu
dGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAg
ICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlm
aWVyKGRhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+
ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICAgICAg
aWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQotICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBk
YXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9CisgICAgbV9kYXRhYmFz
ZS5jbG9zZSgpOworICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRh
YmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFj
a2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlm
aWVyKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNl
RmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNl
SWRlbnRpZmllcik7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFz
ZUZpbGVuYW1lKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRh
YmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAK
aW5kZXggMDYxMGM5NDZmMmVkZjk4NmViY2E5OGI2YTdkMjFiZjBhOTMzOTY0Ni4uYzdmMzBjMzA5
MTk0NDljZjkxZDBhNWMzMDQ3YzBlNjllMDhiZGZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBAIC0xODksOCArMTg5LDggQEAgdm9pZCBT
dG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKICAgICAgICAgaWYg
KG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKICAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Q
cm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAgICAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9y
aWdpbnMiKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpA
QCAtMTk5LDggKzE5OSw4IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5J
ZGVudGlmaWVycygpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0TXV0ZXgpOwotICAgICAgICAgICAg
ICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAg
ICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0
YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgICAgICBtX29y
aWdpblNldC5hZGQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgewpAQCAtMzE2LDE2ICszMTYsMTYgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6
c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25z
dAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lu
cyBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMn
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9IAogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsK
KyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKICAgICAKLSAgICBpZiAoc3RhdGVtZW50
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4g
JyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwog
CiAgICAgewpAQCAtNDA0LDIzICs0MDQsMjMgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0Rl
bGV0ZUFsbE9yaWdpbnMoKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpbnQg
cmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgwKSkpCisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIEZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAg
ICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKICAgICAg
ICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hE
aWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDQxLDEyICs0NDEsMTIgQEAg
dm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgICAgICBvcGVu
VHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIik7Ci0gICAgICAgIGlmIChk
ZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRl
bGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
T3JpZ2lucyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0
ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+
ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhl
Y3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7Ci0gICAgaWYgKGRl
bGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBkZWxldGVT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdp
bnMgd2hlcmUgb3JpZ2luPT8iX3MpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyci
LCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0g
ICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGRlbGV0ZVN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaWYgKCFkZWxldGVT
dGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNj
aWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjE0LDE3ICs2MTQsMTcg
QEAgU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyKQogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBh
dGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBv
cmlnaW49PyIpOwotICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICBhdXRvIHBhdGhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCFw
YXRoU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc2Vs
ZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9Ci0gICAgcGF0aFN0YXRl
bWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gcGF0
aFN0YXRlbWVudC5zdGVwKCk7CisgICAgcGF0aFN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQtPnN0ZXAoKTsKICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIHJldHVybiBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgcmV0dXJuIHBh
dGhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiB9CiAgICAgCiBsb25nIGxvbmcgU3RvcmFn
ZVRyYWNrZXI6OmRpc2tVc2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgxNTc0N2Nl
NzQ2Y2QxYTM5NTk0ODI2NGE3Nzg3YjA5YTJjOTg5NTYuLjJhNDIxOTY1MmMxNWQxNDRkZmQ3MmRk
M2IxOWZhYzNjMDc3MWNjODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0
YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNR
TGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAg
QWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW06CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjphZGRUb0RhdGFiYXNlc1RhYmxlKToKKwogMjAyMS0wNS0xMyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBGaWxlU3lzdGVtOjpo
YXJkTGlua0NvdW50KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KaW5kZXggNjY4MmJmNDU4
NjY2MTE1NTNmMTBhMTdlNzJhNzI5ZWNhYTY5NThjNC4uMmM3ZjQ0NGU4YmM4YWViOTA2YzBiYjkw
YTY5Yjk1NTNjNzE4MTMxNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KQEAgLTY2LDEy
ICs2NiwxMiBAQCBzdGF0aWMgdm9pZCBhZGRUb0RhdGFiYXNlc1RhYmxlKGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VQYXRoLCBjb25zdCBTZWN1cml0eU9yaWdpbgogICAgIFNRTGl0ZURhdGFiYXNlIGRh
dGFiYXNlOwogICAgIGRhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKTsKIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBhZGREYXRhYmFzZVN0YXRlbWVudChkYXRhYmFzZSwgIklOU0VSVCBJTlRPIERhdGFi
YXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyIpOwotICAgIGFkZERh
dGFiYXNlU3RhdGVtZW50LnByZXBhcmUoKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIGFkZERhdGFiYXNlU3Rh
dGVtZW50LmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFtZSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0
ZW1lbnQuYmluZFRleHQoMywgbmV3RGF0YWJhc2VQYXRoKTsKLSAgICBhZGREYXRhYmFzZVN0YXRl
bWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgIGlmIChhdXRvIGFkZERhdGFiYXNlU3RhdGVtZW50
ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmln
aW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Il9zKSkgeworICAgICAgICBhZGREYXRh
YmFzZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFt
ZSk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgzLCBuZXdEYXRhYmFz
ZVBhdGgpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsK
KyAgICB9CiAKICAgICBkYXRhYmFzZS5jbG9zZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428604</attachid>
            <date>2021-05-13 23:08:10 -0700</date>
            <delta_ts>2021-05-14 07:23:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210513230809.patch</filename>
            <type>text/plain</type>
            <size>269199</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAwMWMyZDQ2MjA0ZGUxYjAyZDc3MTFj
NzE4ODk4NWRjNTU1NDQ0NmIuLjViOWFiMTMyMDYyODczMGM2MTg0ZmZiNWNmYmU1ZTkzN2QzMGIy
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYlhSXSBBbGxvdyBXZWJYUiB0byBiZSB0ZXN0
ZWQgb24gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwZTM0NGVhYmNjNWZjM2UwMjA3
MmQ1NTgzNWE0YTFjNjE2NzUwYS4uM2M4Mjk1M2Q1ZGUwODczNGQ3NGFlNTY3ZTg3NmI1YWZmNWQ3
ZjA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNR
TGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0
ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb246CisgICAgICAgIC0gVGhlIFNRTGl0
ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBub3cgcHJpdmF0ZSBzbyB0aGF0IHdlIG5ldmVyIGhh
dmUgYQorICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCB0aGF0IGhhcyBub3QgYmVlbiAicHJlcGFy
ZWQiLiBPbmx5IHRoZSBTUUxpdGVEYXRhYmFzZQorICAgICAgICAgIGNhbiBub3cgY29uc3RydWN0
IFNRTGl0ZVN0YXRlbWVudCBvYmplY3RzLiBXZSBhbHJlYWR5IG5lZWRlZCB0byBwYXNzCisgICAg
ICAgICAgYSBTUUxpdGVEYXRhYmFzZSByZWZlcmVuY2Ugd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFNR
TGl0ZVN0YXRlbWVudCBhbnl3YXkuCisgICAgICAgIC0gVGhlIGNvbnN0cnVjdCBBTkQgcHJlcGFy
ZSBhIFNRTGl0ZVN0YXRlbWVudCwgd2Ugbm93IGNhbGwKKyAgICAgICAgICBTUUxpdGVEYXRhYmFz
ZTo6cHJlcGFyZVN0YXRlbWVudCgpIHRvIGdldCBhIHN0YWNrIG9iamVjdCBvcgorICAgICAgICAg
IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudCgpIHRvIGdldCBhIGhlYXAgb25l
LiBUaGVzZSBmdW5jdGlvbnMKKyAgICAgICAgICByZXR1cm4gYW4gRXhwZWN0ZWQ8PiB0eXBlIHNv
IHRoZXkgd2lsbCBlaXRoZXIgcmV0dXJuIGEgInByZXBhcmVkIgorICAgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBvciBhbiB1bmV4cGVjdGVkIFNRTGl0ZSBlcnJvciBjb2RlLgorICAgICAgICAtIFRo
ZSBwcmVwYXJlKlN0YXRlbWVudCgpIGZ1bmN0aW9ucyBub3cgYXZvaWQgU3RyaW5nIGFsbG9jYXRp
b25zIGluIG1vc3QKKyAgICAgICAgICBjYXNlcyB0aGFua3MgdG8gb3ZlcmxvYWRzIHRha2luZyBp
biB0aGUgcXVlcnkgYXMgYW4gQVNDSUlMaXRlcmFsLgorICAgICAgICAtIERyb3AgZmluYWxpemUo
KSBmdW5jdGlvbiBvbiBTUUxpdGVTdGF0ZW1lbnQgc28gU1FMaXRlU3RhdGVtZW50IG9iamVjdHMK
KyAgICAgICAgICBhcmUgYWx3YXlzIHZhbGlkLiBJdCBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBTUUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgICBtZW1iZXIgZnVuY3Rpb25zLiBUaGUg
U1FMaXRlU3RhdGVtZW50IGRlc3RydWN0b3IgImZpbmFsaXplcyIgdGhlIHN0YXRlbWVudAorICAg
ICAgICAgIHNvIHVzZXJzIGNhbiBzaW1wbHkgZGVzdHJveSB0aGUgU1FMaXRlU3RhdGVtZW50IGlm
IHRoZXkgbmVlZCB0aGUgb2JqZWN0CisgICAgICAgICAgdG8gYmUgZmluYWxpemUgYXQgYSBjZXJ0
YWluIHBvaW50IChlLmcuIGJlZm9yZSBjbG9zaW5nIGEgZGF0YWJhc2UpLgorICAgICAgICAtIERy
b3AgdGhlIHByZXBhcmUoKSAmIHByZXBhcmVBbmRTdGVwKCkgU1FMaXRlU3RhdGVtZW50IG1lbWJl
ciBmdW5jdGlvbnMgbm93CisgICAgICAgICAgdGhhdCBTUUxpdGVTdGF0ZW1lbnQgYXJlIGFsd2F5
cyBwcmVwYXJlZC4KKyAgICAgICAgLSBTdG9wIHN0b3JpbmcgdGhlIFNRTCBxdWVyeSBhcyBhIFN0
cmluZyBkYXRhIG1lbWJlciBpbiBTUUxpdGVTdGF0ZW1lbnQgY2xhc3MuCisgICAgICAgICAgVGhp
cyBpcyBubyBsb25nZXIgbmVlZGVkIG5vdyB0aGF0IHRoZXkgaXMgbm8gc2VwYXJlIHByZXBhcmUg
c3RlcCBhZnRlciB0aGUKKyAgICAgICAgICBjb25zdHJ1Y3Rpb24uIFRoaXMgbWFrZXMgdGhlIFNR
TGl0ZVN0YXRlbWVudCBhIGJpdCBzbWFsbGVyLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OmNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxp
ZEJsb2JUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNv
cmRzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRl
SW5pdGlhbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUlu
ZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
eHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpb25Gcm9tRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVn
aW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0YXRlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRB
bmRSZWJpbmRQcmVJbmRleFN0YXRlbWVudElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEZldGNoTmV4dFJlY29yZCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZl
VGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVy
Zm9ybUdldFRhYmxlTmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzRW50
cnlGb3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpo
YXNFbnRyeUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRh
YmFzZU5hbWVzTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGV0
YWlsc0Zvck5hbWVBbmRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpzZXREYXRhYmFzZURldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpxdW90YU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1
b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGVJZkVt
cHR5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUpOgorICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXApOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNr
Q2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVSZW1haW5pbmdTaXplRm9y
T3JpZ2luRXhjbHVkaW5nQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW5zdXJlT3JpZ2luUmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5l
d2VzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjps
b2FkQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJl
bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZl
c3RVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxl
dGVDYWNoZUdyb3VwUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjpzZWFyY2hDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjphbGxEb21haW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnVzZVdB
TEpvdXJuYWxNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjptYXhpbXVt
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZTo6dGFibGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6
OmNsZWFyQWxsVGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0dXJu
T25JbmNyZW1lbnRhbEF1dG9WYWN1dW0pOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QW5k
UHJlcGFyZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cHJl
cGFyZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZUhlYXBTdGF0ZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6c3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0
ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5zQXRM
ZWFzdE9uZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRC
bG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6YmluZERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZFBh
cmFtZXRlckNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6
Y29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVt
bk51bGwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbkRlY2xh
cmVkQXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1u
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9T
ZWFyY2hQb3B1cE1lbnVEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVE
Qjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVw
TWVudURCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpleGVjdXRlU2ltcGxlU3FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudCk6CisgICAgICAgICogd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorCiAyMDIx
LTA1LTEzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBSRUdSRVNTSU9OKHIyNzEyMTYpIHBvaW50ZXJldmVudHMvaW9zL3BvaW50ZXItZXZlbnRzLW5v
LW1vdXNlZG93bi13aGVuLXByZXZlbnQtZGVmYXVsdC1jYWxsZWQtb24tcG9pbnRlcmRvd24uaHRt
bCBpcyBjb25zaXN0ZW50bHkgZmFpbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlMTQ3OTkyNTQyMzRjZWVmMWZi
OGRlMzQ1YTljOWVmMDk0ZDcyYjE2Li44MWFjNzUwODE1MGQyYzllMDJiODkyN2IyNDRlNTFmZWMw
YjZhNTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FM
aXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0
aGUgU1FMaXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAg
ICAgICBBbHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9w
ZW5JVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWdu
S2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5n
Q29sdW1uc1RvVGFibGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVuYW1lQ29sdW1uSW5UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVk
Q291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZh
bGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpn
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21h
aW5zQXNQcmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Ro
cm91Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFp
bnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b25Bc0ZpcnN0UGFydHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0Nv
cnJlY3RTdWJTdGF0aXN0aWNzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRh
dGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclNlbnRB
dHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFz
ZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJh
c2U6OnBvcHVsYXRlUGFnZVVSTFRvSWNvblVSTE1hcCk6CisgICAgICAgIChXZWJLaXQ6Okljb25E
YXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjppY29uSURGb3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpzZXRJ
Y29uSURGb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjppY29uRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6YWRkSWNvbik6CisgICAgICAgIChX
ZWJLaXQ6Okljb25EYXRhYmFzZTo6dXBkYXRlSWNvblRpbWVzdGFtcCk6CisgICAgICAgIChXZWJL
aXQ6Okljb25EYXRhYmFzZTo6ZGVsZXRlSWNvbik6CisKIDIwMjEtMDUtMTMgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJYUl0gQWxsb3cgV2ViWFIgdG8gYmUg
dGVzdGVkIG9uIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBlMThjMzBm
OWU3MTEwNzVjOWUxY2VmMWY4OTQyNjkyM2FmODc4YmFmLi4zOTA2NzgxMjk5YzRmNTQ5MjIxMDQ1
ZjY3NWE4YzJmZTliZTYzNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBA
CisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
TW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0ZW1l
bnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJhbHMu
CisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFT
eW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0
T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OmRhdGFiYXNlUGF0
aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW5hbWUgRmlsZVN5c3RlbTo6ZGlyZWN0b3J5TmFtZSgpIHRvIEZpbGVT
eXN0ZW06OnBhcmVudFBhdGgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVm
LmggYi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAppbmRleCA0MTVhMjliNjYwY2ZlOWU4MzYw
MGRhNjE5YzFlYzNlNzFjMGYzNzk3Li5jNGVlM2RjMTI4NzRmMTk4ZTFiZjQ1M2YyMzdhOTljZjQ3
Njc2ZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9VbmlxdWVSZWYuaApAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9yZWYpOwogICAgIH0KIAorICAgIGV4cGxpY2l0IFVuaXF1ZVJlZihUJiBvdGhl
cikKKyAgICAgICAgOiBtX3JlZigmb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWYp
OworICAgIH0KKwogICAgIFQmIGdldCgpIHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsg
fQogICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3Jl
ZjsgfQogCkBAIC04MCwxMiArODYsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+
IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0
ZDo6dW5pcXVlX3B0cjxVPik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5kIGNsYXNzIFVu
aXF1ZVJlZjsKIAotICAgIFVuaXF1ZVJlZihUJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZigmb3Ro
ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZWYpOwotICAgIH0KLQogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUPiBtX3JlZjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggYTMxZGUxMDQzNjg5MjRlYzQ0ODU1NDhlNDA3N2M4MWRlYmQ5OWI1ZS4uY2NkNjNiM2Rm
YWI0YTNhNjllYWFmOTI4MWRlYTY0M2VlOGZmZWFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTI2MywxMyArMjYzLDEzIEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWln
cmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAg
ICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hl
bWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQg
YW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkg
ewpAQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNU
YWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNF
bXB0eSgpKTsKQEAgLTMzOCwxMyArMzM4LDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAg
IHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNv
cmQgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIs
ICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxv
YlJlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iUmVjb3JkcyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZv
ciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
KyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzU4LDcgKzM1
OCw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KQogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRTY2hl
bWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQCBib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKIAogICAgIHsK
ICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRh
YmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VM
RUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxl
cyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxl
cyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxv
YkZpbGVzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGlu
dCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzkxLDcgKzM5
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBi
bG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC00MjgsMTMgKzQyOCwxMyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgp
CiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUg
c2NoZW1hIGZvciBhbiBleGlzdGluZyBpbmRleCByZWNvcmQgdGFibGUuCi0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyIpOwotICAgICAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyJfcyk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFi
bGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBp
bnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJl
c3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIElu
ZGV4UmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAg
ICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CkBAIC00NTEsNyArNDUxLDcgQEAg
Ym9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCgh
Y3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNTAzLDEzICs1MDMsMTMgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBm
b3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIGluZGV4LgotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIg
V0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzSW5kZXgnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzSW5k
ZXggaW5kZXggYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNx
bGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRT
Y2hlbWEuaXNFbXB0eSgpKTsKQEAgLTU2MSwxMyArNTYxLDEzIEBAIGJvb2wgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKIAogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5h
bWU9J0luZGV4UmVjb3Jkc1JlY29yZEluZGV4JyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0
ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXgu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
djFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSkpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJ
bmRleCgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBj
dXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJl
bnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC02MjQsMjAgKzYyNCwyMCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAgIH0KIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMg
KCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0
YVZlcnNpb24pICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24n
LCA/KTsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
KDEsIGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkYXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJ
bmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnRGF0YWJhc2VOYW1lJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgbV9pZGVu
dGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0
YWJhc2VOYW1lJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNx
bC0+YmluZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbmFtZSBpbnRvIElEQkRhdGFi
YXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDYsMTAgKzY0NiwxMCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBv
cHVsYXRlSW5pdGlhbAogICAgIHsKICAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRl
ZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3Vw
cG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgICAgLy8gVGhl
cmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZv
IFZBTFVFUyAoJ0RhdGFiYXNlVmVyc2lvbicsID8pOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmlu
Zzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJz
aW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZFRleHQoMSwgU3RyaW5nOjpudW1iZXIoMCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUg
KCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNjc0LDE5ICs2NzQsMTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRl
ZD4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4iKTsKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9S
T1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNj
aGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAogICAgIEFTU0VSVCghY3Vy
cmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNzM5LDIyICs3MzksMjIgQEAgYm9vbCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhh
c2hNYXA8c3RkOjoKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgs
IGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVu
dCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwgb2JqZWN0U3Rv
cmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRleEluZm87Il9zKTsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3Ig
cHJlcGFyaW5nIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gSW5kZXhJbmZvIHRhYmxl
ICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAg
ICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsK
KyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7
IG9iamVjdFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVBh
dGhCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IGtleVBhdGhCdWZmZXIpOwotICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVj
dG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1l
bnQtPmdldENvbHVtbkludCg0KTsKKyAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDUpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRl
eEluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFz
cWwKQEAgLTc2OSw3ICs3NjksNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0
ZUluZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OgogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpA
QCAtODA0LDIyICs4MDQsMjIgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJ
bmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3QKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1Qg
aW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBG
Uk9NIEluZGV4UmVjb3JkczsiX3MpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2Jq
ZWN0U3RvcmVSZWNvcmRJRCBGUk9NIEluZGV4UmVjb3JkczsiX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVt
ZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVp
bnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0
KDEpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVj
dFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUJ1ZmZlcjsK
LSAgICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5QnVmZmVy
KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleUJ1
ZmZlcik7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIHZhbHVlQnVmZmVyKTsKLSAg
ICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywgdmFsdWVC
dWZmZXIpOworICAgICAgICAgICAgdWludDY0X3QgcmVjb3JkSUQgPSBzdGF0ZW1lbnQtPmdldENv
bHVtbkludDY0KDQpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChT
UUw6OlB1dFRlbXBJbmRleFJlY29yZCwgIklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBW
QUxVRVMgKD8sID8sIENBU1QoPyBBUyBURVhUKSwgQ0FTVCg/IEFTIFRFWFQpLCA/KTsiX3MpOwog
ICAgICAgICAgICAgaWYgKCFzcWwKQEAgLTgzMyw3ICs4MzMsNyBAQCBib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFz
aE1hcDxzdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkgewpAQCAtOTg5LDEwICs5ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElE
QkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRh
YmFzZUkKIAogICAgIFN0cmluZyBkYXRhYmFzZU5hbWU7CiAgICAgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJ
bmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOwotICAgICAgICBpZiAoc3FsLmlzQ29s
dW1uTnVsbCgwKSkKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFi
YXNlTmFtZSc7Il9zKTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRhdGFiYXNlTmFtZSA9IHNxbC5nZXRDb2x1
bW5UZXh0KDApOworICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMCk7
CiAgICAgICAgIGlmIChkYXRhYmFzZU5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgp
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIGluZm8gZGF0
YWJhc2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lICgnJXMnKSIsIGRh
dGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMDAsMTAgKzEw
MDAsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICB9CiAgICAgdWludDY0X3QgZGF0
YWJhc2VWZXJzaW9uOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxp
dGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0
YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAg
ICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFs
dWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9z
KTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLT5nZXRDb2x1bW5UZXh0
KDApOwogICAgICAgICBhdXRvIHBhcnNlZFZlcnNpb24gPSBwYXJzZUludGVnZXI8dWludDY0X3Q+
KHN0cmluZ1ZlcnNpb24pOwogICAgICAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBj
bGVhbmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0
cmluZ1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CkBAIC0xMDIxLDE3ICsxMDIxLDE3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFj
dEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgYm9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gKHJlc3Vs
dC52YWx1ZSgpID09IElzU2NoZW1hVXBncmFkZWQ6Olllcyk7CiAKICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgs
IGF1dG9JbmMgRlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVj
dFN0b3JlSW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5J
bnQ2NCgwKTsKLSAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBzcWwuZ2V0Q29s
dW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdl
dENvbHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IHNx
bC0+Z2V0Q29sdW1uVGV4dCgxKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhC
dWZmZXI7Ci0gICAgICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhC
dWZmZXIpOworICAgICAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0
aEJ1ZmZlcik7CiAKICAgICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3Jl
S2V5UGF0aDsKICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1
ZmZlci5zaXplKCksIG9iamVjdFN0b3JlS2V5UGF0aCkpIHsKQEAgLTEwMzksMTEgKzEwMzksMTEg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3Fs
LmdldENvbHVtbkludCgzKTsKKyAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC0+
Z2V0Q29sdW1uSW50KDMpOwogCiAgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5n
T2JqZWN0U3RvcmUoeyBvYmplY3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUob2Jq
ZWN0U3RvcmVLZXlQYXRoKSwgYXV0b0luY3JlbWVudCB9KTsKIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTA1NiwyMCAr
MTA1NiwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIEhhc2hNYXA8c3RkOjpwYWly
PHVpbnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIEhhc2hNYXA8
dWludDY0X3QsIFZlY3RvcjxJREJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBv
YmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5m
bzsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5h
bWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5k
ZXhJbmZvOyJfcyk7CisgICAgICAgIGlmICghc3FsKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIElu
ZGV4SW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQg
PSBzcWwtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLmdldENvbHVtbkludDY0KDApOwotICAg
ICAgICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAg
ICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGluZGV4SUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOworICAg
ICAgICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDIpOwog
CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNx
bC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBz
cWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKIAogICAgICAgICAg
ICAgT3B0aW9uYWw8SURCS2V5UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFk
ZXNlcmlhbGl6ZUlEQktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5
UGF0aEJ1ZmZlci5kYXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkg
ewpAQCAtMTA4MSw4ICsxMDgxLDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4g
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9v
bCB1bmlxdWUgPSBzcWwuZ2V0Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVu
dHJ5ID0gc3FsLmdldENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3Fs
LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBzcWwtPmdl
dENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IGRhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJRCk7CiAgICAgICAg
ICAgICBpZiAoIW9iamVjdFN0b3JlKSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlz
dGluZ0RhdGFiYXNlSQogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgo
aW5kZXhJbmZvKTsKICAgICAgICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJ
RCA/IGluZGV4SUQgOiBtYXhJbmRleElEOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzcWwuc3Rl
cCgpOworICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC0xMTYyLDExICsxMTYyLDE1IEBA
IE9wdGlvbmFsPElEQkRhdGFiYXNlTmFtZUFuZFZlcnNpb24+IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IG5hbWVzcWwoZGF0YWJhc2UsICJTRUxFQ1QgdmFs
dWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Iik7Ci0g
ICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0
byBuYW1lc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00g
SURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgaWYg
KCFuYW1lc3FsKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVt
ZW50IHRvIGdldCBkYXRhYmFzZSBuYW1lKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisgICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLT5nZXRDb2x1bW5UZXh0KDAp
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHZlcnNxbChkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBG
Uk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwot
ICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gdmVyc3FsLmdldENvbHVtblRleHQoMCk7CisgICAg
YXV0byB2ZXJzcWwgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJP
TSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAg
ICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbCA/IHZlcnNxbC0+Z2V0Q29sdW1uVGV4dCgw
KSA6IFN0cmluZygpOwogICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICBpZiAoIWRhdGFiYXNlVmVyc2lvbikgewogICAg
ICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9lcyBub3Qg
Y2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNpb24iLCBz
dHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTMxMCwxMCArMTMxNCwxMCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJh
bnNhY3Rpb25JbmZvJiBpbmZvKQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgbV9vcmln
aW5hbERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UgPSBtYWtlVW5pcXVlPElEQkRhdGFi
YXNlSW5mbz4oKm1fZGF0YWJhc2VJbmZvKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCptX3NxbGl0ZURCLCAiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJl
IGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVt
YmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+
cHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdo
ZXJlIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAg
ICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lv
bigpKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZh
aWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSJfcyB9OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzAxNywxMiArMzAyMSwxMiBAQCB2b2lkIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKCkKICAgICAgICAgYm9vbCBlcnJvcmVkID0gdHJ1
ZTsKIAogICAgICAgICBpZiAobV9zcWxpdGVEQikgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsiX3Mp
OwotICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICBhdXRvIHNxbCA9
IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JG
aWxlczsiX3MpOworICAgICAgICAgICAgaWYgKHNxbCkgeworICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgICAgICAgICAgYmxvYkZpbGVzLmFwcGVuZChzcWwuZ2V0
Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQoc3FsLT5nZXRDb2x1bW5UZXh0
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkK
QEAgLTMwNjEsMTQgKzMwNjUsMTMgQEAgU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQoU1FMaXRlSURCQmEKICAgICAgICAg
cmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKICAgICB9CiAKLSAgICBp
ZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0pIHsKKyAgICBp
ZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0pCiAgICAgICAg
IHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldLmdldCgpIH07Ci0gICAgfQogCiAgICAgaWYgKG1f
c3FsaXRlREIpIHsKLSAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0gPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oKm1fc3FsaXRlREIsIHN0YXRl
bWVudCk7Ci0gICAgICAgIGlmIChtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzcWwpXS0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgIG1fY2FjaGVkU3Rh
dGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gbnVsbHB0cjsKKyAgICAgICAgYXV0
byBzcWxTdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlSGVhcFN0YXRlbWVudChzdGF0ZW1l
bnQpOworICAgICAgICBpZiAoc3FsU3RhdGVtZW50KQorICAgICAgICAgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0gPSBzcWxTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwp
XS5nZXQoKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCBjMmNlZDg0MTkzMDBiNWE4YzU4
YThlODQwMjIyZjI1NTYxMjViMzVjLi5mMjg5MDhjYTUxNWU3YjliMmZmZjg0ODhjMDA2ZDJiMGU4
MWJiZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMjM1LDEyICsyMzUsMTIgQEAgYm9v
bCBTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNx
bCkKICAgICBBU1NFUlQoIW1fY3VycmVudFVwcGVyS2V5LmlzTnVsbCgpKTsKICAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKSk7CiAKLSAgICBtX3N0YXRlbWVudCA9
IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2Fj
dGlvbigpLT5kYXRhYmFzZSgpLCBzcWwpOwotCi0gICAgaWYgKG1fc3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3RyYW5zYWN0aW9uLT5z
cWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLnByZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIGN1cnNvciBzdGF0ZW1lbnQgKHByZXBhcmUvaWQpIC0gJyVzJyIsIG1fdHJhbnNhY3Rpb24t
PnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIG1fc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCk7CiAKICAgICByZXR1cm4gYmluZEFyZ3VtZW50cygpOwogfQpA
QCAtMzQxLDEyICszNDEsMTIgQEAgYm9vbCBTUUxpdGVJREJDdXJzb3I6OnJlc2V0QW5kUmViaW5k
UHJlSW5kZXhTdGF0ZW1lbnRJZk5lY2Vzc2FyeSgpCiAKICAgICBhdXRvJiBkYXRhYmFzZSA9IG1f
dHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCk7CiAgICAgaWYgKCFt
X3ByZUluZGV4U3RhdGVtZW50KSB7Ci0gICAgICAgIG1fcHJlSW5kZXhTdGF0ZW1lbnQgPSBtYWtl
VW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oZGF0YWJhc2UsIGJ1aWxkUHJlSW5kZXhTdGF0ZW1lbnQo
aXNEaXJlY3Rpb25OZXh0KCkpKTsKLQotICAgICAgICBpZiAobV9wcmVJbmRleFN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHByZUluZGV4U3RhdGVtZW50
ID0gZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoYnVpbGRQcmVJbmRleFN0YXRlbWVudChp
c0RpcmVjdGlvbk5leHQoKSkpOworICAgICAgICBpZiAoIXByZUluZGV4U3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIHByZSBzdGF0ZW1lbnQgLSAn
JXMnIiwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIG1fcHJlSW5kZXhTdGF0ZW1lbnQgPSBwcmVJbmRleFN0YXRl
bWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3ByZUlu
ZGV4U3RhdGVtZW50LT5yZXNldCgpICE9IFNRTElURV9PSykgewpAQCAtNTg4LDkgKzU4OCw4IEBA
IFNRTGl0ZUlEQkN1cnNvcjo6RmV0Y2hSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEZl
dGNoTmV4dFJlY29yZChTUUxpdGVDdXJzCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fY2Fj
aGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQgfHwgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudC0+
cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3RvcmVT
dGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhUKSBhbmQgb2JqZWN0
U3RvcmVJRCA9ID87Iik7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRPYmplY3RTdG9yZVN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChhdXRvIGNhY2hl
ZE9iamVjdFN0b3JlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlNF
TEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFuZCBv
YmplY3RTdG9yZUlEID0gPzsiX3MpKQorICAgICAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQgPSBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX2NhY2hlZE9iamVjdFN0b3Jl
U3RhdGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwCmluZGV4IGFiNDc4MjZjODNlYmI1OGI3N2I0YTYxNTI3MTM5MjEzM2NmODQwZTYuLmU3
NGUyOGY1YjllNWY3OWZjNWQ1Y2QwY2U3NjZjYTBkZGYxYmY0NzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC0xMTMsMTggKzExMywx
NSBAQCBzdGF0aWMgU3RyaW5nIGZvcm1hdEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBtZXNzYWdl
LCBpbnQgc3FsaXRlRXJyb3JDb2RlLCBjb25zdAogCiBzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJ
bkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVy
eSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVz
dWx0ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFyZVN0YXRl
bWVudChxdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcyki
LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOworICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMSwgdmFsdWUpOwogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50
IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTM0LDE3ICsxMzEsMTUgQEAgc3RhdGlj
IGJvb2wgc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0
cmluZyYgcXVlcnksIGNvbnMKIAogc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURh
dGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiBy
ZXN1bHRTdHJpbmcpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkp
OwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmlu
ZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1
bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIExPR19F
UlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQg
ZnJvbSBkYXRhYmFzZSAoJXMpIiwgc3RhdGVtZW50LmVycm9yKCksIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNzE0LDggKzcwOSw4IEBAIFZlY3RvcjxTdHJpbmc+
IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcygpCiB7CiAgICAgZGlzYWJsZUF1dGhvcml6
ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoc3FsaXRlRGF0YWJhc2UoKSwg
IlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBzcWxpdGVEYXRhYmFzZSgpLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Il9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRh
YmxlcyBmb3IgZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcigpOwogICAgICAgICByZXR1cm4gVmVjdG9yPFN0
cmluZz4oKTsKQEAgLTcyMyw4ICs3MTgsOCBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVy
Zm9ybUdldFRhYmxlTmFtZXMoKQogCiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lczsKICAg
ICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCk7CiAgICAgICAgIGlmIChuYW1lICE9IHVucXVhbGlmaWVkSW5mb1RhYmxlTmFtZSkKICAgICAg
ICAgICAgIHRhYmxlTmFtZXMuYXBwZW5kKG5hbWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCAw
YWQzYjQ4MDIzZjFmOTZlYWI5YmNmNGY3NzJkZTQ5MzMwN2ViZjg0Li5iN2UxN2E4NzRkOTcwYmU2
YmM1ZDMxOTY3NjMxYjJiZjNhM2NkNDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yMzUsMTUgKzIzNSwx
NSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW5Ob0xvY2soY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49Pzsi
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBG
Uk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewog
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1c7CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXNlKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRp
ZmllcikKQEAgLTI1NiwxNSArMjU2LDE1IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRy
eUZvckRhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zCiAgICAg
fQogCiAgICAgLy8gV2UndmUgZ290IGEgdHJhY2tlciBkYXRhYmFzZS4gU2V0IHVwIGEgcXVlcnkg
dG8gYXNrIGZvciB0aGUgZGIgb2YgaW50ZXJlc3Q6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2lu
PT8gQU5EIG5hbWU9PzsiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5E
IG5hbWU9PzsiX3MpOwogCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVzsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6bWF4aW11
bVNpemUoRGF0YWJhc2UmIGRhdGFiYXNlKQpAQCAtMzI1LDI2ICszMjUsMjYgQEAgU3RyaW5nIERh
dGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmIG9yaWcKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9yIHRoaXMgZGF0
YWJhc2UgeWV0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiKTsKIAot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLQotICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChv
cmlnaW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgaWYgKCFjcmVhdGVJ
Zk5vdEV4aXN0cykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBm
aWxlbmFtZSBmcm9tIERhdGFiYXNlIFRyYWNrZXIgZm9yIG9yaWdpbiAlcywgbmFtZSAlcyIsIG9y
aWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1l
KTsKKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJldHVybiBTUUxpdGVGaWxlU3lz
dGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5h
bWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5J
ZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGVtZW50LmZpbmFs
aXplKCk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBnZW5lcmF0ZURhdGFiYXNlRmlsZU5hbWUo
KTsKIApAQCAtMzcyLDE2ICszNzIsMTYgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gRGF0
YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICBpbnQgc3RlcFJlc3VsdDsKLSAgICB3aGls
ZSAoKHN0ZXBSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZp
ZXIoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLT5pc29sYXRlZENvcHkoKSk7CisgICAgd2hp
bGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpCisgICAg
ICAgIG9yaWdpbnMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRp
ZmllcihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpLT5pc29sYXRlZENvcHkoKSk7CiAgICAg
b3JpZ2lucy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYgKHN0ZXBSZXN1bHQgIT0gU1FMSVRFX0RP
TkUpCkBAIC0zOTcsMTYgKzM5NywxNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZVRyYWNrZXI6
OmRhdGFiYXNlTmFtZXNOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcgogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00gRGF0YWJh
c2VzIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAogICAgIFZlY3RvcjxTdHJp
bmc+IG5hbWVzOwogICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpCisgICAgICAgIG5hbWVzLmFwcGVuZChzdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpOwogICAgIG5hbWVzLnNocmlua1RvRml0KCk7CiAKICAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ET05FKSB7CkBAIC00MzksMTQgKzQzOSwxNCBAQCBEYXRhYmFzZURldGFpbHMg
RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbgogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RF
eGlzdCk7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAgIHJl
dHVybiBEYXRhYmFzZURldGFpbHMoKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplIEZST00gRGF0
YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
IEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iX3MpOworICAgICAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKIAot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBu
YW1lKTsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ET05FKQogICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygpOwogCkBAIC00
NTQsOCArNDU0LDggQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zv
ck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAgICAgICAgIExPR19F
UlJPUigiRXJyb3IgcmV0cmlldmluZyBkZXRhaWxzIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4g
JXMgZnJvbSB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVu
dGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWls
cygpOwogICAgICAgICB9Ci0gICAgICAgIGRpc3BsYXlOYW1lID0gc3RhdGVtZW50LmdldENvbHVt
blRleHQoMCk7Ci0gICAgICAgIGV4cGVjdGVkVXNhZ2UgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoMSk7CisgICAgICAgIGRpc3BsYXlOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
OworICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsK
ICAgICB9CiAKICAgICBTdHJpbmcgcGF0aCA9IGZ1bGxQYXRoRm9yRGF0YWJhc2Uob3JpZ2luLCBu
YW1lLCBmYWxzZSk7CkBAIC00NzQsMzkgKzQ3NCw0MSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
c2V0RGF0YWJhc2VEZXRhaWxzKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25z
dAogICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoQ3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdI
RVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CiAK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCi0gICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0g
ICAgc3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBpZiAoZ3VpZCA9PSAwKSB7Ci0gICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgICAgICBMT0dfRVJST1IoIkVycm9y
IHRvIGRldGVybWluZyBleGlzdGVuY2Ugb2YgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGluIHRy
YWNrZXIgZGF0YWJhc2UiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNo
b3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRl
dGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRy
YWNrZXIKLSAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxlIGlzIGFuIGV4
dGVybmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91ciBjb2RlLCBp
dCdzIHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNlCi0gICAgICAg
ICAgICAvLyBTbyB3ZSdsbCBwcmludCBhbiBlcnJvciBpbnN0ZWFkCi0gICAgICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4g
JXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0IGRhdGFi
YXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0
aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCku
ZGF0YSgpKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsK
KyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1lKTsKKworICAgICAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOworCisg
ICAgICAgIGlmICghZ3VpZCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHRvIGRldGVybWluZyBleGlzdGVu
Y2Ugb2YgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGluIHRyYWNrZXIgZGF0YWJhc2UiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIG5ldmVyIG9j
Y3VyIC0gd2Ugc2hvdWxkIG5ldmVyIGJlIHNldHRpbmcgZGF0YWJhc2UgZGV0YWlscyBmb3IgYSBk
YXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlcgorICAgICAg
ICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxlIGlzIGFuIGV4dGVybmFsIHJl
c291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91ciBjb2RlLCBpdCdzIHNvbWV3
aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNlCisgICAgICAgICAgICAgICAg
Ly8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAorICAgICAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHJldHJpZXZlIGd1aWQgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBmcm9tIHRoZSB0cmFja2VyIGRhdGFiYXNlIC0gaXQgaXMgaW52YWxpZCB0byBzZXQgZGF0YWJh
c2UgZGV0YWlscyBvbiBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRo
ZSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFtZT0/LCBlc3Rp
bWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Iik7Ci0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gdXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFtZT0/LCBl
c3RpbWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Il9zKTsKKyAgICBpZiAoIXVwZGF0ZVN0YXRlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRp
c3BsYXlOYW1lKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDIsIGVzdGltYXRlZFNp
emUpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMywgZ3VpZCk7CisgICAgdXBkYXRl
U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7CisgICAgdXBkYXRlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXN0aW1hdGVkU2l6ZSk7CisgICAgdXBkYXRlU3RhdGVtZW50LT5iaW5k
SW50NjQoMywgZ3VpZCk7CiAKLSAgICBpZiAodXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgZGV0YWlscyBmb3IgZGF0
YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjcxLDE1ICs2
NzMsMTUgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFOb0xvY2so
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4KICAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgIHJldHVybiBxdW90YTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBxdW90YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2lu
PT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBxdW90
YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAg
ICAgICAgcmV0dXJuIHF1b3RhOwogICAgIH0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9y
aWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKQotICAgICAgICBxdW90YSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcXVv
dGEgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogCiAgICAgcmV0dXJuIHF1b3RhOwog
fQpAQCAtNzA1LDI2ICs3MDcsMjYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCB1bnNpZ25lZCBsb25nIGwKIAogICAgIGJv
b2wgb3JpZ2luRW50cnlFeGlzdHMgPSBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwog
ICAgIGlmICghb3JpZ2luRW50cnlFeGlzdHMpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElO
VE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJXMgaW4g
dGhlIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoMiwgcXVvdGEpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MiwgcXVvdGEpOwogCi0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkK
ICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICVz
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGluc2VydGVkTmV3T3JpZ2lu
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJF
IG9yaWdpbj0/Iik7Ci0gICAgICAgIGJvb2wgZXJyb3IgPSBzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSzsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJFIG9yaWdpbj0/Il9zKTsK
KyAgICAgICAgYm9vbCBlcnJvciA9ICFzdGF0ZW1lbnQ7CiAgICAgICAgIGlmICghZXJyb3IpIHsK
LSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVvdGEpOwotICAgICAgICAgICAg
c3RhdGVtZW50LmJpbmRUZXh0KDIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAg
ICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBxdW90YSk7CisgICAgICAgICAgICBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgICAgICAgICAg
ZXJyb3IgPSAhc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGVycm9yKQpAQCAtNzQ4LDE2ICs3NTAsMTYgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6
OmFkZERhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zdCBTdHJp
bmcKICAgICAvLyBOZXcgZGF0YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHVudGlsIHRoZSBv
cmlnaW4gaGFzIGJlZW4gZXN0YWJsaXNoZWQKICAgICBBU1NFUlQoaGFzRW50cnlGb3JPcmlnaW5O
b0xvY2sob3JpZ2luKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/
LCA/LCA/KTsiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAo
PywgPywgPyk7Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgzLCBwYXRo
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1lKTsKKyAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDMsIHBhdGgpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkg
eworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGFkZCBkYXRhYmFzZSAlcyB0byBvcmlnaW4gJXM6ICVzXG4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgp
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTg4MSwyOCArODgzLDI4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIERlbGV0aW9uTW9kCiAgICAgICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgICAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOwogCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20g
b3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBvcmlnaW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICAgICAgaWYgKG9yaWdpblN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gb3JpZ2luU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJF
IG9yaWdpbj0/Il9zKTsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICVzIGZy
b20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG9yaWdpblN0
YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAg
ICBvcmlnaW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CiAKLSAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewor
ICAgICAgICBpZiAoIW9yaWdpblN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMg
ZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC05MTUsMTAgKzkxNywxMCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAogCiAgICAgICAgIG9w
ZW5UcmFja2VyRGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKICAgICAgICAgaWYg
KG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7Ci0gICAgICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgICAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdp
biBGUk9NIE9yaWdpbnMiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAg
ICAgICBlbHNlIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICAg
ICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKICAgICAgICAgfQogCkBAIC0xMDgxLDE3ICsxMDgzLDE3
IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyCiAKICAgICBMb2NrSG9sZGVyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gRGF0
YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgZGF0
YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgp
LCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRv
bmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgaWYgKCFzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZSAlcyBmcm9t
IG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5kYXRh
YmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZG9uZURlbGV0aW5nRGF0
YWJhc2Uob3JpZ2luLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE5NywxMyAr
MTE5OSwxMSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFi
YXNlcygpCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAqZGF0YWJhc2VO
YW1lTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5hbWUgPSBkYXRh
YmFzZXMua2V5OwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlTmFtZTsK
LSAgICAgICAgICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9Pzsi
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJf
cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFiYXNlRmlsZU5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0YWJhc2UgPSBmYWxzZTsKQEAgLTEyNTgsMTMg
KzEyNTgsMTQgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1w
dHkoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIAogICAgIC8vIFNwZWNpZnkgdGhhdCB3ZSB3YW50
IHRoZSBleGNsdXNpdmUgbG9ja2luZyBtb2RlLCBzbyBhZnRlciB0aGUgbmV4dCB3cml0ZSwKICAg
ICAvLyB3ZSdsbCBiZSBob2xkaW5nIHRoZSBsb2NrIHRvIHRoaXMgZGF0YWJhc2UgZmlsZS4KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgbG9ja1N0YXRlbWVudChkYXRhYmFzZSwgIlBSQUdNQSBsb2NraW5n
X21vZGU9RVhDTFVTSVZFOyIpOwotICAgIGlmIChsb2NrU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgcmVzdWx0ID0gbG9ja1N0
YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxvY2tTdGF0ZW1lbnQu
ZmluYWxpemUoKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja1N0YXRlbWVudCA9IGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBsb2NraW5nX21vZGU9RVhDTFVTSVZFOyJfcyk7Cisg
ICAgICAgIGlmICghbG9ja1N0YXRlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW50IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5k
KCJCRUdJTiBFWENMVVNJVkUgVFJBTlNBQ1RJT047IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcAppbmRleCA0YzI5NjE1OGFkMjlkYmNlNWYwNTA2ZGNjZTY3MTI5YTFjM2E5NWQxLi45YjE5
MGNhYTk2M2U1YTFhNzUyYWQ5ZWYyNDYwNTFjODQ2MmVhMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCkBAIC0xMTIsMjgg
KzExMiwyNiBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAKICAg
ICBTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UgPSBkYi5zcWxpdGVEYXRhYmFzZSgpOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgbV9zdGF0ZW1lbnQpOwotICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxJ
VEVfT0spIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNvcnJl
Y3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5hc2Np
aSgpLmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0lOVEVSUlVQVCkKLSAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBz
dGF0ZW1lbnQiLCByZXN1bHQsICJpbnRlcnJ1cHRlZCIpOworICAgIGF1dG8gc3RhdGVtZW50ID0g
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtX3N0YXRlbWVudCk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNvcnJlY3Ru
ZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5hc2NpaSgp
LmRhdGEoKSwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC5lcnJvcigpID09IFNRTElURV9JTlRFUlJVUFQpCisgICAgICAg
ICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAi
Y291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksICJpbnRlcnJ1
cHRlZCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNy
ZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIs
IHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgbV9lcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFy
ZSBzdGF0ZW1lbnQiLCBzdGF0ZW1lbnQuZXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IElmIHRoZSBz
dGF0ZW1lbnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0ZSwgdGhlIGJp
bmQgcGFyYW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBudW1iZXIgb2Yg
cXVlc3Rpb24gbWFya3MuCiAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBtaWdodCBi
ZSB0cnlpbmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cwotICAgIGlmIChzdGF0
ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7CisgICAg
aWYgKHN0YXRlbWVudC0+YmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgp
KSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24n
dCBtYXRjaCBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MiKTsKICAgICAgICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBz
dGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
cmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmJpbmRW
YWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LT5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRlVMTCkgewogICAgICAgICAgICAgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0OSwyMCArMTQ3LDIwIEBAIGJvb2wgU1FM
U3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlJiBkYikKICAgICBhdXRvIHJlc3VsdFNldCA9IFNR
TFJlc3VsdFNldDo6Y3JlYXRlKCk7CiAKICAgICAvLyBTdGVwIHNvIHdlIGNhbiBmZXRjaCB0aGUg
Y29sdW1uIG5hbWVzLgotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBTUUxJVEVfUk9XOiB7Ci0gICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1
bW5Db3VudCgpOworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQtPmNvbHVtbkNv
dW50KCk7CiAgICAgICAgIGF1dG8mIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKIAogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAgICByb3dz
LmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisgICAgICAgICAgICByb3dz
LmFkZENvbHVtbihzdGF0ZW1lbnQtPmdldENvbHVtbk5hbWUoaSkpOwogCiAgICAgICAgIGRvIHsK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKLSAgICAg
ICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoaSkpOwor
ICAgICAgICAgICAgICAgIHJvd3MuYWRkUmVzdWx0KHN0YXRlbWVudC0+Z2V0Q29sdW1uVmFsdWUo
aSkpOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICAg
ICAgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9
PSBTUUxJVEVfUk9XKTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcAppbmRleCAxNzRjZGQxMWRjMmU2YzA4MWY2NmY1OGMwMDExODY3ZDQ2
MDJhYmRmLi5lZjZmZGQ0ZWQ4YWJiYzRkMjkyNWQxY2M3Y2NmMjg2YWUyY2EyNGJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHAKQEAgLTk4LDEzICs5OCwxMyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBVUkwmIG1hbmlm
ZQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQs
IG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENh
Y2hlIElTIE5PVCBOVUxMIEFORCBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIEFORCBtYW5pZmVzdFVS
TD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMLnN0cmluZygpKTsKKyAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMLnN0cmluZygpKTsKICAgIAotICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ET05FKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKQEAgLTExMywxNCArMTEzLDE0IEBAIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3VwKGNvbnN0IFVSTCYg
bWFuaWZlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25l
ZCBuZXdlc3RDYWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMikpOworICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlU3RvcmFnZUlEID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAg
ICAgYXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZVN0b3JhZ2VJRCk7CiAgICAgaWYg
KCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGF1dG8mIGdy
b3VwID0gKm5ldyBBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKnRoaXMsIG1hbmlmZXN0VVJMKTsKLSAg
ICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSkpOworICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgIGdyb3VwLnNldE5ld2Vz
dENhY2hlKGNhY2hlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHJldHVybiAmZ3JvdXA7CiB9ICAg
IApAQCAtMTcxLDEyICsxNzEsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZE1hbmlmZXN0SG9zdEhhc2hlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZldGNoIHRo
ZSBob3N0IGhhc2hlcy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgbWFuaWZlc3RIb3N0SGFzaCBGUk9NIENhY2hlR3JvdXBzIik7ICAgIAotICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJP
TSBDYWNoZUdyb3VwcyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICBtX2NhY2hlSG9zdFNldC5hZGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICBtX2NhY2hlSG9zdFNldC5hZGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKIH0gICAgCiAKIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgVVJM
JiB1cmwpCkBAIC0yMTIsMTMgKzIxMiwxMyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAg
IFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRl
cjsKIAogICAgIC8vIENoZWNrIHRoZSBkYXRhYmFzZS4gTG9vayBmb3IgYWxsIGNhY2hlIGdyb3Vw
cyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiKTsKLSAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZS
T00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiX3MpOworICAgIGlm
ICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpbnQgcmVz
dWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBVUkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0g
U1FMSVRFX1JPVykgeworICAgICAgICBVUkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMSkpOwogCiAgICAgICAgIGlmIChtX2NhY2hlc0luTWVtb3J5LmNv
bnRhaW5zKG1hbmlmZXN0VVJMLnN0cmluZygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjI4LDcgKzIyOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAKICAgICAgICAgLy8gV2Ug
Zm91bmQgYSBjYWNoZSBncm91cCB0aGF0IG1hdGNoZXMuIE5vdyBjaGVjayBpZiB0aGUgbmV3ZXN0
IGNhY2hlIGhhcyBhIHJlc291cmNlIHdpdGgKICAgICAgICAgLy8gYSBtYXRjaGluZyBVUkwuCi0g
ICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJ
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsK
ICAgICAgICAgYXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKICAgICAgICAg
aWYgKCFjYWNoZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQwLDcgKzI0MCw3IEBAIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBG
b3JVUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAg
ICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgbV9jYWNoZXNJbk1lbW9yeS5zZXQoZ3JvdXAubWFuaWZlc3RVUkwoKS5zdHJpbmcoKSwgJmdy
b3VwKTsKIApAQCAtMjc5LDEzICsyNzksMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFUKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIC8vIENoZWNrIHRoZSBkYXRhYmFz
ZS4gTG9vayBmb3IgYWxsIGNhY2hlIGdyb3VwcyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFuaWZlc3RV
UkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9U
IE5VTEwiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwg
bWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2Fj
aGUgSVMgTk9UIE5VTEwiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBVUkwgbWFuaWZlc3RVUkwg
PSBVUkwoeyB9LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgd2hpbGUgKChyZXN1
bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBVUkwgbWFu
aWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpOwogCiAgICAg
ICAgIGlmIChtX2NhY2hlc0luTWVtb3J5LmNvbnRhaW5zKG1hbmlmZXN0VVJMLnN0cmluZygpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjk2LDcgKzI5Niw3IEBAIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVS
TChjb25zdCBVCiAKICAgICAgICAgLy8gV2UgZm91bmQgYSBjYWNoZSBncm91cCB0aGF0IG1hdGNo
ZXMuIE5vdyBjaGVjayBpZiB0aGUgbmV3ZXN0IGNhY2hlIGhhcyBhIHJlc291cmNlIHdpdGgKICAg
ICAgICAgLy8gYSBtYXRjaGluZyBmYWxsYmFjayBuYW1lc3BhY2UuCi0gICAgICAgIHVuc2lnbmVk
IG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsKICAgICAgICAgYXV0byBj
YWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKIAogICAgICAgICBVUkwgZmFsbGJhY2tV
Ukw7CkBAIC0zMDgsNyArMzA4LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFUKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8mIGdyb3VwID0gKm5ldyBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAoKnRoaXMsIG1hbmlmZXN0VVJMKTsKLSAgICAgICAgZ3JvdXAuc2V0U3RvcmFnZUlE
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAg
ICAgICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApKSk7CiAgICAgICAgIGdyb3VwLnNldE5ld2VzdENhY2hlKGNhY2hl
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3Vw
Lm1hbmlmZXN0VVJMKCkuc3RyaW5nKCksICZncm91cCk7CkBAIC00MTYsMTcgKzQxNiwxNyBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdpbihjb25z
dCBTZWN1cml0eU9yaWdpbiYgb3JpZwogICAgIC8vIElmIGFuIE9yaWdpbiByZWNvcmQgZG9lc24n
dCBleGlzdCwgdGhlbiB0aGUgQ09VTlQgd2lsbCBiZSAwIGFuZCBxdW90YSB3aWxsIGJlIDAuCiAg
ICAgLy8gVXNpbmcgdGhlIGNvdW50IHRvIGRldGVybWluZSBpZiBhIHJlY29yZCBleGlzdGVkIG9y
IG5vdCBpcyBhIHNhZmUgd2F5IHRvIGRldGVybWluZQogICAgIC8vIGlmIGEgcXVvdGEgb2YgMCBp
cyByZWFsLCBmcm9tIHRoZSByZWNvcmQsIG9yIGZyb20gbnVsbC4KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9N
IE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBDT1VOVChxdW90YSksIHF1b3RhIEZST00gT3JpZ2lucyBXSEVSRSBvcmln
aW49PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgIC8vIFJldHVybiB0aGUgcXVvdGEs
IG9yIGlmIGl0IHdhcyBudWxsIHRoZSBkZWZhdWx0LgogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICBib29sIHdhc05vUmVjb3JkID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDApID09IDA7Ci0gICAgICAgIHF1b3RhID0gd2FzTm9SZWNvcmQgPyBtX2RlZmF1bHRPcmln
aW5RdW90YSA6IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAgYm9vbCB3YXNO
b1JlY29yZCA9ICFzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOworICAgICAgICBxdW90YSA9
IHdhc05vUmVjb3JkID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ0MCwxOSArNDQw
LDE5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdlRm9yT3Jp
Z2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYKIAogICAgIC8vIElmIGFuIE9yaWdpbnMgcmVj
b3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIFNVTSB3aWxsIGJlIG51bGwsCiAgICAgLy8gd2hp
Y2ggd2lsbCBiZWNvbWUgMCwgYXMgZXhwZWN0ZWQsIHdoZW4gY29udmVydGluZyB0byBhIG51bWJl
ci4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgU1VN
KENhY2hlcy5zaXplKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgIEZST00gQ2FjaGVHcm91cHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmln
aW5zLm9yaWdpbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
SU5ORVIgSk9JTiBDYWNoZXMgT04gQ2FjaGVHcm91cHMuaWQgPSBDYWNoZXMuY2FjaGVHcm91cCIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgV0hFUkUgT3JpZ2lu
cy5vcmlnaW49PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBPcmlnaW5zIE9OIENhY2hlR3Jv
dXBzLm9yaWdpbiA9IE9yaWdpbnMub3JpZ2luIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBDYWNoZXMgT04gQ2FjaGVHcm91cHMu
aWQgPSBDYWNoZXMuY2FjaGVHcm91cCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3MpOworICAgIGlmICgh
c3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRl
eHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAg
ICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHVzYWdlID0gc3RhdGVtZW50
LmdldENvbHVtbkludDY0KDApOworICAgICAgICB1c2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50NjQoMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNDg3LDIzICs0ODcs
MjMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUmVtYWluaW5nU2l6
ZUZvck9yaWdpbkV4Y2x1ZGluZ0NhY2hlKGNvbnMKICAgICAgICAgICAgICAgICAiIFdIRVJFIE9y
aWdpbnMub3JpZ2luPT8iOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgcXVlcnkpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChx
dWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogICAgIGlmIChleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIgIT0gMCkKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIpOwotICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgyLCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIpOworICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQtPnN0ZXAoKTsKIAogICAgIC8vIElmIHRoZSBjb3VudCB3YXMgMCB0aGF0IHRoZW4gd2Ug
aGF2ZSB0byBxdWVyeSB0aGUgb3JpZ2luIHRhYmxlIGRpcmVjdGx5CiAgICAgLy8gZm9yIGl0cyBx
dW90YS4gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgaWYg
KHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludDY0X3QgbnVtYmVyT2ZDYWNoZXMg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGludDY0X3QgbnVtYmVyT2ZD
YWNoZXMgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogICAgICAgICBpZiAobnVtYmVy
T2ZDYWNoZXMgPT0gMCkKICAgICAgICAgICAgIGNhbGN1bGF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdp
biwgcmVtYWluaW5nU2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlbWFpbmluZ1Np
emUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgICAgICByZW1haW5pbmdT
aXplID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC01MjIsMTQgKzUyMiwxNCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogbwog
ICAgIGlmICghZW5zdXJlT3JpZ2luUmVjb3JkKG9yaWdpbikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQ
REFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHVwZGF0
ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gdXBkYXRlU3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVv
dGE9PyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVv
dGEpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4tPmRhdGEoKS5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7CisgICAgdXBkYXRlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVv
dGEpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRl
U3RhdGVtZW50KTsKKyAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudCh1cGRhdGVTdGF0ZW1lbnQu
dmFsdWUoKSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxD
b21tYW5kKGNvbnN0IFN0cmluZyYgc3FsKQpAQCAtNTU0LDcgKzU1NCw4IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewogICAgIEFTU0VSVChT
UUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIAotICAg
IGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92
ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAg
aW50IHZlcnNpb24gPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTU3MCwxMSArNTcxLDExIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGludCB1bnVzZWROdW1CeXRlcyA9IHNu
cHJpbnRmKHVzZXJWZXJzaW9uU1FMLCBzaXplb2YodXNlclZlcnNpb25TUUwpLCAiUFJBR01BIHVz
ZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24pOwogICAgIEFTU0VSVF9VTlVTRUQodW51c2Vk
TnVtQnl0ZXMsIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSkgPj0gdW51
c2VkTnVtQnl0ZXMpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCB1c2VyVmVyc2lvblNRTCk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHVz
ZXJWZXJzaW9uU1FMKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHN0YXRlbWVudC52YWx1ZSgpKTsKICAgICBzZXREYXRhYmFzZVZlcnNpb24uY29tbWl0KCk7CiB9
CiAgICAgCkBAIC02NTIsOCArNjUzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKICAgICBBU1NFUlQo
U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAg
Ym9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgTE9HX0VSUk9SKCJBcHBsaWNhdGlvbiBDYWNoZSBTdG9yYWdlOiBmYWlsZWQg
dG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVycm9yIFwiJXNcIiIsIAotICAgICAgICAgICAg
ICAgICAgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfSAgICAKQEAgLTY3MCwx
NSArNjcwLDE1IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEdyb3VwU3RvcmFnZUlECiAgICAgLy8gYSB3YXkgdG8gcmVw
YWlyIGl0LgogICAgIGRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVHcm91cHMgKG1hbmlmZXN0SG9zdEhhc2gsIG1hbmlmZXN0VVJMLCBv
cmlnaW4pIFZBTFVFUyAoPywgPywgPykiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCB1cmxI
b3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgy
LCBncm91cC0+bWFuaWZlc3RVUkwoKS5zdHJpbmcoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDMsIGdyb3VwLT5vcmlnaW4oKS5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0
YXRlbWVudC0+YmluZEludDY0KDEsIHVybEhvc3RIYXNoKGdyb3VwLT5tYW5pZmVzdFVSTCgpKSk7
CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBncm91cC0+bWFuaWZlc3RVUkwoKS5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRh
dGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1l
bnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIGdyb3VwU3RvcmFnZUlEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwpAQCAtNjk4LDE0
ICs2OTgsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRp
b25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICBBU1NFUlQoY2FjaGUtPmdy
b3VwKCktPnN0b3JhZ2VJRCgpICE9IDApOwogICAgIEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsK
ICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQg
SU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlcyAoY2FjaGVHcm91
cCwgc2l6ZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3Vw
KCktPnN0b3JhZ2VJRCgpKTsKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlLT5lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2Fj
aGUtPmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgdW5zaWduZWQgY2FjaGVTdG9y
YWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9kYXRhYmFzZS5sYXN0SW5zZXJ0Um93SUQo
KSk7CkBAIC03MjUsMjYgKzcyNSwyOCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNv
bnN0IFZlY3RvcjxVUkw+JiBvbmxpbmVBbGxvd2xpc3QgPSBjYWNoZS0+b25saW5lQWxsb3dsaXN0
KCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGFsbG93bGlzdFVSTCA6IG9ubGluZUFsbG93
bGlzdCkgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gQ2FjaGVXaGl0ZWxpc3RVUkxzICh1cmwsIGNhY2hlKSBWQUxVRVMgKD8s
ID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENh
Y2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAg
ICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAg
ICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGFsbG93bGlzdFVSTC5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CiAKLSAg
ICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBTdG9yZSBvbmxpbmUg
YWxsb3dsaXN0IHdpbGRjYXJkIGZsYWcuCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUFsbG93c0FsbE5ldHdvcmtS
ZXF1ZXN0cyAod2lsZGNhcmQsIGNhY2hlKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgICAgIHN0YXRl
bWVudC5wcmVwYXJlKCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyAo
d2lsZGNhcmQsIGNhY2hlKSBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJ
bnQ2NCgxLCBjYWNoZS0+YWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKCkpOwotICAgICAgICBzdGF0
ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgc3RhdGVtZW50LT5i
aW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKKyAgICAgICAg
c3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAgIGlmICgh
ZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKQEAgLTc1MiwxNCArNzU0LDE1IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAg
Y29uc3QgRmFsbGJhY2tVUkxWZWN0b3ImIGZhbGxiYWNrVVJMcyA9IGNhY2hlLT5mYWxsYmFja1VS
THMoKTsKICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgZmFsbGJhY2tVUkwgOiBmYWxsYmFja1VS
THMpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUp
IFZBTFVFUyAoPywgPywgPykiKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5wcmVwYXJlKCk7Cisg
ICAgICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gRmFsbGJhY2tVUkxzIChuYW1lc3BhY2UsIGZhbGxiYWNrVVJMLCBjYWNoZSkg
VkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgICAgICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBmYWxsYmFja1VSTC5maXJzdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMiwgZmFsbGJhY2tVUkwuc2Vjb25kLnN0cmluZygpKTsKLSAgICAgICAgICAgIHN0
YXRlbWVudC5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQpOworICAgICAgICAgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBmYWxsYmFja1VSTC5maXJzdC5zdHJpbmcoKSk7CisgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgzLCBjYWNoZVN0b3JhZ2VJRCk7CiAKLSAg
ICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODEsMTQgKzc4NCwxNCBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBG
aXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBW
QUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGRhdGFTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIGRhdGFTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBWQUxVRVMgKD8s
ID8pIl9zKTsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKIAogICAgIFN0cmluZyBmdWxsUGF0aDsKICAgICBpZiAoIXJlc291cmNlLT5wYXRoKCku
aXNFbXB0eSgpKQotICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIEZpbGVTeXN0ZW06
OnBhdGhHZXRGaWxlTmFtZShyZXNvdXJjZS0+cGF0aCgpKSk7CisgICAgICAgIGRhdGFTdGF0ZW1l
bnQtPmJpbmRUZXh0KDIsIEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShyZXNvdXJjZS0+cGF0
aCgpKSk7CiAgICAgZWxzZSBpZiAoc2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUocmVzb3Vy
Y2UpKSB7CiAgICAgICAgIC8vIEZpcnN0LCBjaGVjayB0byBzZWUgaWYgY3JlYXRpbmcgdGhlIGZs
YXQgZmlsZSB3b3VsZCB2aW9sYXRlIHRoZSBtYXhpbXVtIHRvdGFsIHF1b3RhLiBXZSBkb24ndCBu
ZWVkCiAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBwZXItb3JpZ2luIHF1b3RhIGhlcmUsIGFzIGl0
IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4gc3RvcmVOZXdlc3RDYWNoZSgpLgpAQCAtODEzLDEzICs4
MTYsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgCiAgICAgICAgIGZ1bGxQ
YXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0
b3J5LCBwYXRoKTsKICAgICAgICAgcmVzb3VyY2UtPnNldFBhdGgoZnVsbFBhdGgpOwotICAgICAg
ICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOworICAgICAgICBkYXRhU3RhdGVtZW50
LT5iaW5kVGV4dCgyLCBwYXRoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAocmVzb3VyY2Ut
PmRhdGEoKS5zaXplKCkpCi0gICAgICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRCbG9iKDEsIHJl
c291cmNlLT5kYXRhKCkuZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSk7CisgICAgICAg
ICAgICBkYXRhU3RhdGVtZW50LT5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwg
cmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwogICAgIH0KICAgICAKLSAgICBpZiAoIWRhdGFTdGF0
ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICghZGF0YVN0YXRlbWVudC0+ZXhlY3V0
ZUNvbW1hbmQoKSkgewogICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZmlsZSB3aGljaCB3ZSBtYXkg
aGF2ZSB3cml0dGVuIHRvOgogICAgICAgICBpZiAoIWZ1bGxQYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZnVsbFBhdGgpOwpAQCAtODQzLDM2ICs4NDYs
MzYgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBTdHJpbmcgaGVhZGVycyA9
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVz
b3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VzICh1
cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRhLCBtaW1lVHlwZSwgdGV4
dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/KSIpOwotICAgIGlmIChy
ZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gcmVzb3Vy
Y2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENh
Y2hlUmVzb3VyY2VzICh1cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRh
LCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/
KSJfcyk7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIC8vIFRoZSBzYW1lIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBhcmUgdXNl
ZCBpbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKQogICAgIC8vIHRvIGNhbGN1bGF0
ZSB0aGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBhbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ugb2Jq
ZWN0LiBJZgogICAgIC8vIHlvdSBjaGFuZ2UgdGhlIGNvZGUgYmVsb3csIHBsZWFzZSBhbHNvIGNo
YW5nZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKS4KLSAgICByZXNvdXJjZVN0YXRl
bWVudC5iaW5kVGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNl
U3RhdGVtZW50LmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29k
ZSgpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVudC5iaW5kVGV4dCgzLCByZXNvdXJjZS0+cmVzcG9u
c2UoKS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNCwg
aGVhZGVycyk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZEludDY0KDUsIGRhdGFJZCk7Ci0g
ICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkubWlt
ZVR5cGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNywgcmVzb3VyY2UtPnJl
c3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKLQotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChyZXNvdXJjZVN0YXRlbWVudCkpCisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IHJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgyLCByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKTsKKyAgICByZXNv
dXJjZVN0YXRlbWVudC0+YmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJsKCkuc3Ry
aW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg0LCBoZWFkZXJzKTsKKyAg
ICByZXNvdXJjZVN0YXRlbWVudC0+YmluZEludDY0KDUsIGRhdGFJZCk7CisgICAgcmVzb3VyY2VT
dGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwor
ICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg3LCByZXNvdXJjZS0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCkpOworCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHJlc291cmNl
U3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25l
ZCByZXNvdXJjZUlkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwogICAgIAogICAgIC8vIEZpbmFsbHksIGluc2VydCB0aGUgY2FjaGUgZW50cnkK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgZW50cnlTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMgKD8sID8sID8p
Iik7Ci0gICAgaWYgKGVudHJ5U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBlbnRyeVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IElOVE8gQ2FjaGVFbnRyaWVzIChjYWNoZSwgdHlwZSwgcmVzb3VyY2UpIFZBTFVFUyAoPywgPywg
PykiX3MpOworICAgIGlmICghZW50cnlTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOwot
ICAgIGVudHJ5U3RhdGVtZW50LmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+dHlwZSgpKTsKLSAgICBl
bnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMywgcmVzb3VyY2VJZCk7CisgICAgZW50cnlTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJp
bmRJbnQ2NCgyLCByZXNvdXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZElu
dDY0KDMsIHJlc291cmNlSWQpOwogICAgIAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRy
eVN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50LnZh
bHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gRGlkIHdlIHN1Y2Nl
c3NmdWxseSB3cml0ZSB0aGUgcmVzb3VyY2UgZGF0YSB0byBhIGZpbGU/IElmIHNvLApAQCAtODkz
LDE0ICs4OTYsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVk
VHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmMKICAgICBBU1NFUlQocmVzb3Vy
Y2UtPnN0b3JhZ2VJRCgpKTsKIAogICAgIC8vIEZpcnN0LCBpbnNlcnQgdGhlIGRhdGEKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgZW50cnlTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZUVu
dHJpZXMgU0VUIHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Iik7Ci0gICAgaWYgKGVudHJ5U3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBlbnRyeVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENhY2hlRW50cmllcyBTRVQgdHlwZT0/
IFdIRVJFIHJlc291cmNlPT8iX3MpOworICAgIGlmICghZW50cnlTdGF0ZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVudHJ5U3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+dHlwZSgpKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnN0
b3JhZ2VJRCgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDEsIHJlc291cmNlLT50
eXBlKCkpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnN0b3Jh
Z2VJRCgpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50KTsK
KyAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudC52YWx1ZSgpKTsKIH0K
IAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJl
c291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCkBAIC05MjYsMTQgKzky
OSwxNCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdAogICAgIH0KIAogICAgIC8vIEEgcmVzb3Vy
Y2Ugd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgZm9y
IHRoZSBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyIpOwotICAg
IGlmIChzaXplVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzaXplVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERB
VEUgQ2FjaGVzIFNFVCBzaXplPXNpemUrPyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXNpemVV
cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNpemVVcGRhdGVT
dGF0ZW1lbnQuYmluZEludDY0KDEsIHJlc291cmNlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkp
OwotICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlLT5zdG9yYWdlSUQo
KSk7CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDEsIHJlc291cmNlLT5lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOwogCi0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHNp
emVVcGRhdGVTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRl
U3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc3Rv
cmVSZXNvdXJjZVRyYW5zYWN0aW9uLmNvbW1pdCgpOwpAQCAtOTQzLDEzICs5NDYsMTMgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiByZXNvdXJjZSwgQXBwbGljYXQKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3Vy
ZU9yaWdpblJlY29yZChjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIEFTU0VS
VChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYg
KGluc2VydE9yaWdpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8g
aW5zZXJ0T3JpZ2luU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICBp
ZiAoIWluc2VydE9yaWdpblN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YSgpLmRhdGFiYXNl
SWRlbnRpZmllcigpKTsKLSAgICBpbnNlcnRPcmlnaW5TdGF0ZW1lbnQuYmluZEludDY0KDIsIG1f
ZGVmYXVsdE9yaWdpblF1b3RhKTsKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50KSkKKyAgICBpbnNlcnRPcmlnaW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9y
aWdpbi0+ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBpbnNlcnRPcmlnaW5TdGF0
ZW1lbnQtPmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7CisgICAgaWYgKCFleGVj
dXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDI2LDE2ICsxMDI5LDE2IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25D
YWNoZUdyb3VwJiBncm91cCwgQXBwCiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBuZXdlc3QgY2Fj
aGUgaW4gdGhlIGdyb3VwLgogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlVQREFURSBDYWNoZUdyb3VwcyBTRVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/
Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUdy
b3VwcyBTRVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCkgewogICAgICAgICBmYWlsdXJlUmVhc29uID0gRGlza09yT3BlcmF0aW9uRmFpbHVyZTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0
KDEsIGdyb3VwLm5ld2VzdENhY2hlKCktPnN0b3JhZ2VJRCgpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMiwgZ3JvdXAuc3RvcmFnZUlEKCkpOwogICAgIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzdGF0ZW1lbnQpKSB7CisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKSkgewogICAgICAgICBmYWlsdXJlUmVhc29uID0gRGlza09yT3BlcmF0aW9uRmFpbHVy
ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEwOTMsMzQgKzEwOTYsMzQgQEAg
c3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25zdCBTdHJpbmcmIGhlYWRlcnMsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCBzdGF0dXNDb2RlLCB0eXBl
LCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEu
ZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lO
IENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5p
ZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTk5FUiBKT0lOIENhY2hl
UmVzb3VyY2VEYXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEg
V0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hlPT8iKTsKLSAgICBpZiAoY2FjaGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gY2FjaGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgdXJsLCBzdGF0dXNDb2RlLCB0
eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURh
dGEuZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBK
T0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNl
cy5pZCAiCisgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9OIENhY2hlUmVz
b3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hl
PT8iX3MpOworICAgIGlmICghY2FjaGVTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgcHJlcGFyZSBjYWNoZSBzdGF0ZW1lbnQsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
Ci0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgY2FjaGVT
dGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogCiAgICAgYXV0byBjYWNoZSA9IEFw
cGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpOwogCiAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5
ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3Rvcnks
IG1fZmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKTsKIAogICAgIGludCByZXN1bHQ7Ci0gICAgd2hp
bGUgKChyZXN1bHQgPSBjYWNoZVN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAg
IHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICBVUkwgdXJsKHsgfSwgY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkp
OwogICAgICAgICAKLSAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDEpOworICAgICAgICBpbnQgaHR0cFN0YXR1c0NvZGUgPSBjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDEpOwogCi0gICAgICAgIHVuc2lnbmVkIHR5cGUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMikpOworICAgICAg
ICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IGJsb2I7Ci0gICAgICAg
IGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3Rvcig2LCBibG9iKTsKKyAgICAgICAg
Y2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcig2LCBibG9iKTsKICAgICAgICAg
CiAgICAgICAgIGF1dG8gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYmxvYikp
OwogICAgICAgICAKLSAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDcpOworICAgICAgICBTdHJpbmcgcGF0aCA9IGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDcpOwogICAgICAgICBsb25nIGxvbmcgc2l6ZSA9IDA7CiAgICAgICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHNpemUgPSBkYXRhLT5zaXplKCk7CkBAIC0xMTI5LDEz
ICsxMTMyLDEzIEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICAgICAgICAgIEZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKHBhdGgsIHNpemUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDMpOwotICAg
ICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRl
eHQoNCk7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDMpOworICAgICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDQpOwogICAgICAgICAKICAgICAgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBzaXplLCB0ZXh0RW5jb2RpbmdOYW1lKTsKICAgICAg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cFN0YXR1c0NvZGUpOwogCi0gICAgICAg
IFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg1KTsKKyAgICAg
ICAgU3RyaW5nIGhlYWRlcnMgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg1KTsKICAg
ICAgICAgcGFyc2VIZWFkZXJzKGhlYWRlcnMsIHJlc3BvbnNlKTsKICAgICAgICAgCiAgICAgICAg
IGF1dG8gcmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJl
c3BvbnNlLCB0eXBlLCBXVEZNb3ZlKGRhdGEpLCBwYXRoKTsKQEAgLTExNTUsMTQgKzExNTgsMTQg
QEAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2Fk
Q2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogICAgIH0KIAogICAgIC8vIExvYWQgdGhlIG9ubGlu
ZSBhbGxvd2xpc3QKLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0U3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
KTsKLSAgICBpZiAoYWxsb3dsaXN0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisg
ICAgYXV0byBhbGxvd2xpc3RTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCB1cmwgRlJPTSBDYWNoZVdoaXRlbGlzdFVSTHMgV0hFUkUgY2FjaGU9PyJfcyk7Cisg
ICAgaWYgKCFhbGxvd2xpc3RTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGFsbG93bGlzdFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBhbGxvd2xp
c3RTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogICAgIAogICAgIFZlY3RvcjxV
Ukw+IGFsbG93bGlzdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IGFsbG93bGlzdFN0YXRlbWVudC5z
dGVwKCkpID09IFNRTElURV9ST1cpCi0gICAgICAgIGFsbG93bGlzdC5hcHBlbmQoVVJMKHsgfSwg
YWxsb3dsaXN0U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoKHJlc3Vs
dCA9IGFsbG93bGlzdFN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBh
bGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCgwKSkpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgbG9hZCBjYWNoZSBvbmxpbmUgYWxsb3dsaXN0LCBlcnJvciBcIiVzXCIi
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTExNzAsMjkgKzExNzMsMjkgQEAgUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUo
dW5zaWduZWQgc3RvcmFnZUlEKQogICAgIGNhY2hlLT5zZXRPbmxpbmVBbGxvd2xpc3QoYWxsb3ds
aXN0KTsKIAogICAgIC8vIExvYWQgb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgotICAg
IFNRTGl0ZVN0YXRlbWVudCBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIHdpbGRjYXJkIEZST00gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgV0hFUkUg
Y2FjaGU9PyIpOwotICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgIGF1dG8gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dz
QWxsTmV0d29ya1JlcXVlc3RzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghYWxsb3dsaXN0
V2lsZGNhcmRTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGFsbG93bGlz
dFdpbGRjYXJkU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGFsbG93bGlz
dFdpbGRjYXJkU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKLSAgICBy
ZXN1bHQgPSBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5zdGVwKCk7CisgICAgcmVzdWx0ID0g
YWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5l
IGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKIAotICAgIGNhY2hlLT5zZXRBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoYWxs
b3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpOworICAgIGNhY2hlLT5z
ZXRBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApKTsKIAotICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgaWYgKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiVG9vIG1hbnkgcm93
cyBmb3Igb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnIik7CiAKICAgICAvLyBMb2FkIGZh
bGxiYWNrIFVSTHMuCi0gICAgU1FMaXRlU3RhdGVtZW50IGZhbGxiYWNrU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgbmFtZXNwYWNlLCBmYWxsYmFja1VSTCBGUk9NIEZhbGxiYWNrVVJMcyBX
SEVSRSBjYWNoZT0/Iik7Ci0gICAgaWYgKGZhbGxiYWNrU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBmYWxsYmFja1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFja1VS
THMgV0hFUkUgY2FjaGU9PyJfcyk7CisgICAgaWYgKCFmYWxsYmFja1N0YXRlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZmFsbGJhY2tTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0
b3JhZ2VJRCk7CisgICAgZmFsbGJhY2tTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQp
OwogICAgIAogICAgIEZhbGxiYWNrVVJMVmVjdG9yIGZhbGxiYWNrVVJMczsKLSAgICB3aGlsZSAo
KHJlc3VsdCA9IGZhbGxiYWNrU3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgCi0gICAg
ICAgIGZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoVVJMKHsgfSwgZmFsbGJhY2tT
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMSkpKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KSwgVVJMKHsgfSwgZmFsbGJhY2tTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpKSk7CiAKICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBsb2FkIGZhbGxiYWNrIFVSTHMsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwpAQCAtMTIxOSwyMyArMTIyMiwyMyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiAgICAgQVNTRVJUKGNhY2hlLT5n
cm91cCgpLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBBbGwgYXNzb2NpYXRlZCBkYXRhIHdpbGwg
YmUgZGVsZXRlZCBieSBkYXRhYmFzZSB0cmlnZ2Vycy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgaWQ9PyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJF
IGlkPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+c3RvcmFnZUlEKCkpOwotICAgIGV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNo
ZS0+c3RvcmFnZUlEKCkpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
OwogCiAgICAgY2FjaGUtPmNsZWFyU3RvcmFnZUlEKCk7CiAKICAgICBpZiAoY2FjaGUtPmdyb3Vw
KCktPm5ld2VzdENhY2hlKCkgPT0gY2FjaGUpIHsKICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGVy
ZSBhcmUgbm8gdHJpZ2dlcnMgb24gdGhlIGNhY2hlIGdyb3VwLCB3aGljaCBpcyB3aHkgdGhlIGNh
Y2hlIGhhZCB0byBiZSByZW1vdmVkIHNlcGFyYXRlbHkgYWJvdmUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBncm91cFN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyIpOwotICAgICAgICBpZiAoZ3JvdXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICAgICAgYXV0byBncm91cFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgaWQ9PyJfcyk7Cisg
ICAgICAgIGlmICghZ3JvdXBTdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgICAgICBncm91cFN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3VwKCktPnN0
b3JhZ2VJRCgpKTsKLSAgICAgICAgZXhlY3V0ZVN0YXRlbWVudChncm91cFN0YXRlbWVudCk7Cisg
ICAgICAgIGdyb3VwU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3VwKCktPnN0b3Jh
Z2VJRCgpKTsKKyAgICAgICAgZXhlY3V0ZVN0YXRlbWVudChncm91cFN0YXRlbWVudC52YWx1ZSgp
KTsKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICB9CkBA
IC0xMzE2LDE0ICsxMzE5LDEzIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2Vs
ZWN0VVJMcyhtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMi
KTsKLQotICAgIGlmIChzZWxlY3RVUkxzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzZWxlY3RVUkxzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbWFuaWZl
c3RVUkwgRlJPTSBDYWNoZUdyb3VwcyJfcyk7CisgICAgaWYgKCFzZWxlY3RVUkxzKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9yPFVSTD4gdXJsczsKLSAgICB3aGls
ZSAoc2VsZWN0VVJMcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHNlbGVj
dFVSTHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICB1cmxzLmFwcGVuZChVUkwoeyB9
LCBzZWxlY3RVUkxzLT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gdXJsczsKIH0K
QEAgLTEzMzEsMzAgKzEzMzMsMzAgQEAgT3B0aW9uYWw8VmVjdG9yPFVSTD4+IEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMoKQogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZGVsZXRlQ2FjaGVHcm91cFJlY29yZChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogewog
ICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVz
cygpKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaWRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBpZCBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG1hbmlmZXN0VVJMPT8iKTsKLSAgICBpZiAoaWRT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGlkU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBX
SEVSRSBtYW5pZmVzdFVSTD0/Il9zKTsKKyAgICBpZiAoIWlkU3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZFN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7
CisgICAgaWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMKTsKIAotICAgIGludCBy
ZXN1bHQgPSBpZFN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IGlkU3RhdGVtZW50
LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpbnQ2NF90IGdyb3VwSWQgPSBpZFN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2
NCgwKTsKKyAgICBpbnQ2NF90IGdyb3VwSWQgPSBpZFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQo
MCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRF
TEVURSBGUk9NIENhY2hlcyBXSEVSRSBjYWNoZUdyb3VwPT8iKTsKLSAgICBpZiAoY2FjaGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2Fj
aGVHcm91cD0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoZ3JvdXBTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGdyb3VwU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVS
RSBpZD0/Il9zKTsKKyAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBjYWNoZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgZ3JvdXBJZCk7Ci0gICAgZXhl
Y3V0ZVN0YXRlbWVudChjYWNoZVN0YXRlbWVudCk7Ci0gICAgZ3JvdXBTdGF0ZW1lbnQuYmluZElu
dDY0KDEsIGdyb3VwSWQpOwotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOwor
ICAgIGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3JvdXBJZCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChjYWNoZVN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICBncm91cFN0YXRlbWVudC0+Ymlu
ZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0MDksMjAgKzE0MTEsMjAgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2VsZWN0IG9ubHkgdGhlIHBhdGhzIGluIERlbGV0
ZWRDYWNoZVJlc291cmNlcyB0aGF0IGRvIG5vdCBhbHNvIGFwcGVhciBpbiBDYWNoZVJlc291cmNl
RGF0YToKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVD
VCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCAiCisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERlbGV0ZWRDYWNoZVJlc291cmNlcy5w
YXRoICIKICAgICAgICAgIkZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzICIKICAgICAgICAgIkxF
RlQgSk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCiAgICAgICAgICJPTiBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBhdGggIgotICAgICAgICAiV0hFUkUgKFNF
TEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRo
KSBJUyBOVUxMIik7CisgICAgICAgICJXSEVSRSAoU0VMRUNUIERlbGV0ZWRDYWNoZVJlc291cmNl
cy5wYXRoID09IENhY2hlUmVzb3VyY2VEYXRhLnBhdGgpIElTIE5VTEwiX3MpOwogICAgIAotICAg
IGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGlmICghc2VsZWN0
UGF0aHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoc2VsZWN0UGF0aHMuc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgaWYgKHNlbGVjdFBhdGhzLT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGRvIHsKLSAgICAgICAgU3RyaW5nIHBhdGgg
PSBzZWxlY3RQYXRocy5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgcGF0aCA9IHNl
bGVjdFBhdGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xNDM1LDcgKzE0MzcsNyBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKGZ1bGxQYXRoKTsKLSAgICB9IHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CisgICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KTsKICAgICAKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiREVMRVRFIEZST00gRGVsZXRlZENhY2hl
UmVzb3VyY2VzIik7CiB9CkBAIC0xNDQ2LDE3ICsxNDQ4LDE2IEBAIGxvbmcgbG9uZyBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSgpCiAgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gQ2FjaGVSZXNvdXJjZURh
dGEgV0hFUkUgcGF0aCBOT1QgTlVMTCIpOwotCi0gICAgaWYgKHNlbGVjdFBhdGhzLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHNlbGVjdFBhdGhzID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIHBh
dGggTk9UIE5VTEwiX3MpOworICAgIGlmICghc2VsZWN0UGF0aHMpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgbG9hZCBmbGF0IGZpbGUgY2FjaGUgcmVzb3VyY2UgZGF0YSwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAogICAgIGxvbmcgbG9uZyB0b3RhbFNpemUgPSAwOwogICAgIFN0cmluZyBmbGF0Rmls
ZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hl
RGlyZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7Ci0gICAgd2hpbGUgKHNlbGVj
dFBhdGhzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0gc2Vs
ZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMtPmdl
dENvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAg
IGxvbmcgbG9uZyBwYXRoU2l6ZSA9IDA7CiAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0Rmls
ZVNpemUoZnVsbFBhdGgsIHBhdGhTaXplKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IGY4ZWM5Y2Y0N2Q0YzFmYjAz
OGZmNTc3NjNjMTJhZGJiODc5NTIwZDMuLjJiZjM5MTJiZDRiNzE3MjIzYjQwY2M0OWMxNjZjMWM5
OTA1NTI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTgxLDggKzE4MSw2IEBAIGJvb2wgQ29va2llSmFyREI6
Om9wZW5EYXRhYmFzZSgpCiB2b2lkIENvb2tpZUphckRCOjpjbG9zZURhdGFiYXNlKCkKIHsKICAg
ICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
YXRlbWVudCA6IG1fc3RhdGVtZW50cykKLSAgICAgICAgICAgIHN0YXRlbWVudC52YWx1ZS5nZXQo
KS0+ZmluYWxpemUoKTsKICAgICAgICAgbV9zdGF0ZW1lbnRzLmNsZWFyKCk7CiAgICAgICAgIG1f
ZGF0YWJhc2UuY2xvc2UoKTsKICAgICB9CkBAIC0xOTMsNyArMTkxLDggQEAgdm9pZCBDb29raWVK
YXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYgKGlzT25NZW1vcnkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24i
X3MpOworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjczLDI1ICsyNzIsMjUgQEAgYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRh
YmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW50ZWdyaXR5
KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAgaWYgKGludGVncml0eS5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3JpdHkgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3MpOworICAgIGlmICghaW50
ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgZGF0YWJhc2Ug
aW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBp
bnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50IHJlc3VsdENvZGUgPSBp
bnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxJVEVfUk9XKSB7CiAg
ICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0ZXAgcmV0dXJuZWQgJWQi
LCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCBj
b2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbHVtbnMgPSBpbnRl
Z3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0gMSkgewogICAgICAgICBM
T0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBpbnRlZ3JpdHkgY2hlY2ss
IHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5UZXh0KDApOworICAg
IFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5UZXh0KDApOwogCiAgICAg
aWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJST1IoIkNvb2tpZSBkYXRh
YmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1bHRUZXh0LmFzY2lpKCkuZGF0
YSgpKTsKQEAgLTM4NiwyMCArMzg1LDE2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29r
aWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAKICAg
ICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RVcmwgfTsKIAot
ICAgIGNvbnN0IFN0cmluZyBzcWwgPQotICAgICAgICAiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21h
aW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUg
V0hFUkUgIlwKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3Vy
ZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSBXSEVSRSAiXAogICAgICAgICAiKE5PVCAoKHNlc3Npb24g
PSAwKSBBTkQgKGV4cGlyZXMgPCA/KSkpIgogICAgICAgICAiQU5EIChodHRwb25seSA9IENPQUxF
U0NFKE5VTExJRig/LCAtMSksIGh0dHBvbmx5KSkgIlwKICAgICAgICAgIkFORCAoc2VjdXJlID0g
Q09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2VjdXJlKSkgIlwKICAgICAgICAgIkFORCAoc2Vzc2lv
biA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlc3Npb24pKSAiXAogICAgICAgICAiQU5EICgo
ZG9tYWluID0gPykgT1IgKGRvbWFpbiBHTE9CID8pKSAiXAotICAgICAgICAiT1JERVIgQlkgbGVu
Z3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIjsKLQotICAgIGF1dG8gcHN0bXQgPSBtYWtlVW5p
cXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKyAgICAgICAgIk9SREVSIEJZ
IGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCJfcyk7CiAgICAgaWYgKCFwc3RtdCkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBzdG10LT5wcmVwYXJlKCk7CiAgICAg
cHN0bXQtPmJpbmRJbnQ2NCgxLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5t
aWxsaXNlY29uZHMoKSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMiwgaHR0cE9ubHkgPyAqaHR0cE9u
bHkgOiAtMSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMywgc2VjdXJlID8gKnNlY3VyZSA6IC0xKTsK
QEAgLTQxMSw5ICs0MDYsNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2llPj4gQ29va2llSmFyREI6
OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdAogICAgIGVsc2UKICAg
ICAgICAgcHN0bXQtPmJpbmRUZXh0KDYsIFN0cmluZygiKi4iKSArIHJlZ2lzdHJhYmxlRG9tYWlu
LnN0cmluZygpKTsKIAotICAgIGlmICghcHN0bXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KICAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwogCiAgICAgd2hpbGUgKHBzdG10LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewpAQCAtNDUzLDcgKzQ0NSw2IEBAIE9wdGlvbmFsPFZlY3Rv
cjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0CiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gY29va2llU2Vzc2lvbjsKICAgICAg
ICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsKICAgICB9Ci0gICAgcHN0bXQtPmZp
bmFsaXplKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTQ2MywxMSArNDU0LDExIEBA
IFZlY3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxDb29raWVzKCkKICAgICBWZWN0b3I8
Q29va2llPiByZXN1bHQ7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAhbV9kYXRhYmFzZS5pc09w
ZW4oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmcgc3FsID0gIlNF
TEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJl
LCBzZXNzaW9uIEZST00gQ29va2llIl9zOwotICAgIGF1dG8gcHN0bXQgPSBtYWtlVW5pcXVlPFNR
TGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKworICAgIGF1dG8gcHN0bXQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRo
LCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIl9zKTsKICAg
ICBpZiAoIXBzdG10KQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHBzdG10LT5wcmVwYXJl
KCk7CisKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAgICAgICAg
IENvb2tpZSBjb29raWU7CiAgICAgICAgIGNvb2tpZS5uYW1lID0gcHN0bXQtPmdldENvbHVtblRl
eHQoMCk7CkBAIC00ODIsNyArNDczLDYgQEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6Omdl
dEFsbENvb2tpZXMoKQogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IChwc3RtdC0+Z2V0Q29sdW1u
SW50KDcpID09IDEpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CiAg
ICAgfQotICAgIHBzdG10LT5maW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTU3MSwxNiArNTYxLDE1IEBAIGJvb2wgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKIEhhc2hTZXQ8U3Ry
aW5nPiBDb29raWVKYXJEQjo6YWxsRG9tYWlucygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCBTRUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsKLSAgICBzdGF0ZW1l
bnQucHJlcGFyZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOworICAgIGlmICghc3RhdGVtZW50KQorICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IGRvbWFpbnM7Ci0gICAgd2hp
bGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIGRvbWFp
biA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZG9tYWluID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBkb21haW5zLmFkZChkb21haW4pOwogICAgIH0KLQot
ICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgIHJldHVybiBkb21haW5zOwogfQogCkBAIC02
MzcsMTAgKzYyNiw5IEBAIGJvb2wgQ29va2llSmFyREI6OmRlbGV0ZUFsbENvb2tpZXMoKQogCiB2
b2lkIENvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3Fs
KQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1f
ZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJlcGFyZSgpOwotICAg
IEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICBtX3N0YXRlbWVudHMu
YWRkKHNxbCwgV1RGTW92ZShzdGF0ZW1lbnQpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsK
KyAgICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgc3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVl
UHRyKCkpOwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQxLDEzIEBAIFNRTGl0ZVN0YXRl
bWVudCYgQ29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQog
CiBib29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0
ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsK
KyAgICBpZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5l
cnJvcigpKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9y
OiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5z
dGVwKCk7CiAgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KSkgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRh
dGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCmluZGV4
IGMyMzliNDQyMGIzMjViMDA2NGM0ZjZhYjY5YjFiODFiN2EwYWQ3YmYuLjA1Y2Y1MjUxZWMwZTg3
NjhmZDczZDljMGJmMGZhMjUwOWU1NWNmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4
LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFNRTGl0ZURh
dGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2RlIG9wZW5Nb2RlKQog
CiAgICAgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGlmICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCAi
UFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7Il9zKS5leGVjdXRlQ29tbWFuZCgpKQorICAgICAg
ICBpZiAoIWV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgdGVtcF9zdG9yZSA9IE1FTU9SWTsiX3MpKQog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291bGQgbm90IHNldCB0ZW1w
X3N0b3JlIHRvIG1lbW9yeSIpOwogICAgIH0KIApAQCAtMTk3LDEwICsxOTcsMTAgQEAgdm9pZCBT
UUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogewogICAgIG1fdXNlV0FMID0gdHJ1
ZTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCB3YWxTdGF0ZW1lbnQoKnRoaXMsICJQ
UkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3MpOwotICAgICAgICBpZiAod2FsU3RhdGVtZW50LnBy
ZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIHdhbFN0YXRlbWVu
dCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBqb3VybmFsX21vZGU9V0FMOyJfcyk7CisgICAg
ICAgIGlmICh3YWxTdGF0ZW1lbnQgJiYgd2FsU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgICAgICBTdHJpbmcgbW9kZSA9IHdhbFN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobW9kZSwgIndhbCIpKQogICAgICAgICAgICAgICAgIExPR19FUlJPUigi
am91cm5hbF9tb2RlIG9mIGRhdGFiYXNlIHNob3VsZCBiZSAnV0FMJywgYnV0IGlzICclcyciLCBt
b2RlLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCkBAIC0yMTAsOSArMjEwLDkgQEAgdm9pZCBTUUxp
dGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogCiAgICAgewogICAgICAgICBTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBjaGVja3BvaW50U3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHdh
bF9jaGVja3BvaW50KFRSVU5DQVRFKSJfcyk7Ci0gICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVt
ZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgaWYgKGNo
ZWNrcG9pbnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQorICAgICAgICBhdXRvIGNoZWNrcG9p
bnRTdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgd2FsX2NoZWNrcG9pbnQoVFJV
TkNBVEUpIl9zKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQgJiYgY2hlY2twb2lu
dFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGlmIChjaGVj
a3BvaW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCiAgICAgICAgICAgICAgICAgTE9HKFNR
TERhdGFiYXNlLCAiU1FMaXRlIGRhdGFiYXNlIGNoZWNrcG9pbnQgaXMgYmxvY2tlZCIpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGZhaWxl
ZCB0byBjaGVja3BvaW50OiAlcyIsIGxhc3RFcnJvck1zZygpKTsKQEAgLTI3Miw4ICsyNzIsOCBA
QCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjptYXhpbXVtU2l6ZSgpCiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9y
aXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQ
UkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOwotICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0
YXRlbWVudCgiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKKyAgICAgICAgbWF4UGFnZUNvdW50
ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAgICAg
IGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0yOTMsOSArMjkzLDggQEAgdm9p
ZCBTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUoaW50NjRfdCBzaXplKQogICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFs
c2UpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgbWFrZVN0cmluZygi
UFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50KSk7Ci0gICAgc3RhdGVt
ZW50LnByZXBhcmUoKTsKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQor
ICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJQUkFHTUEg
bWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBzZXQgbWF4aW11bSBzaXplIG9mIGRhdGFiYXNlIHRvICVsbGkgYnl0ZXMiLCBz
dGF0aWNfY2FzdDxsb25nIGxvbmc+KHNpemUpKTsKIAogICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1
ZSk7CkBAIC0zMTAsOCArMzA5LDggQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFi
bGVBdXRob3JpemVyKGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgcGFnZV9zaXplIl9zKTsKLSAgICAgICAgbV9wYWdlU2l6
ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
cHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7CisgICAgICAgIG1fcGFnZVNp
emUgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgICAg
IAogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KQEAgLTMyNyw4ICszMjYs
OCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKCkKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6
ZXIoZmFsc2UpOwogICAgICAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3YXMgYWRkZWQgaW4g
U1FMaXRlIDMuNC4xLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAi
UFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKLSAgICAgICAgZnJlZWxpc3RDb3VudCA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgZnJlZWxpc3RfY291bnQiX3MpOworICAgICAgICBmcmVlbGlzdENv
dW50ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAg
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0zNDIsOCArMzQxLDggQEAg
aW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6dG90YWxTaXplKCkKICAgICB7CiAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVy
KGZhbHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdN
QSBwYWdlX2NvdW50Il9zKTsKLSAgICAgICAgcGFnZUNvdW50ID0gc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBS
QUdNQSBwYWdlX2NvdW50Il9zKTsKKyAgICAgICAgcGFnZUNvdW50ID0gc3RhdGVtZW50ID8gc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIo
dHJ1ZSk7CiAgICAgfQogCkBAIC0zNzEsMTQgKzM3MCwyMiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNl
OjpzZXRCdXN5SGFuZGxlcihpbnQoKmhhbmRsZXIpKHZvaWQqLCBpbnQpKQogICAgICAgICBMT0co
U1FMRGF0YWJhc2UsICJCdXN5IGhhbmRsZXIgc2V0IG9uIG5vbi1vcGVuIGRhdGFiYXNlIik7CiB9
CiAKLWJvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYgc3Fs
KQorYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBxdWVy
eSkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWwpLmV4ZWN1dGVDb21t
YW5kKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAg
ICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKK30KKwor
Ym9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQor
eworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgcmV0
dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7CiB9CiAKIGJvb2wg
U1FMaXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0IFN0cmluZyYgc3Fs
KQogewotICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCkucmV0dXJuc0F0TGVh
c3RPbmVSZXN1bHQoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoc3Fs
KTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+cmV0dXJuc0F0TGVhc3RPbmVS
ZXN1bHQoKTsKIH0KIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dGFibGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiB0YWJsZW5hbWUpCkBAIC0zODYsMTggKzM5MywxNSBAQCBib29sIFNRTGl0ZURhdGFiYXNl
Ojp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRhYmxlbmFtZSkKICAgICBpZiAoIWlzT3Blbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgc3RhdGVtZW50ID0gIlNFTEVD
VCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9
ICciICsgdGFibGVuYW1lICsgIic7IjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKnRoaXMs
IHN0YXRlbWVudCk7Ci0gICAgc3FsLnByZXBhcmUoKTsKLSAgICByZXR1cm4gc3FsLnN0ZXAoKSA9
PSBTUUxJVEVfUk9XOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1l
ID0gJyIgKyB0YWJsZW5hbWUgKyAiJzsiKTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OmNs
ZWFyQWxsVGFibGVzKCkKIHsKLSAgICBTdHJpbmcgcXVlcnkgPSAiU0VMRUNUIG5hbWUgRlJPTSBz
cWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiX3M7CiAgICAgVmVjdG9yPFN0cmluZz4g
dGFibGVzOwotICAgIGlmICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBxdWVyeSkucmV0dXJuVGV4
dFJlc3VsdHMoMCwgdGFibGVzKSkgeworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsi
X3MpOworICAgIGlmICghc3RhdGVtZW50IHx8ICFzdGF0ZW1lbnQtPnJldHVyblRleHRSZXN1bHRz
KDAsIHRhYmxlcykpIHsKICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiVW5hYmxlIHRvIHJldHJp
ZXZlIGxpc3Qgb2YgdGFibGVzIGZyb20gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTU4MywxMCArNTg3LDEwIEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OmlzQXV0b0NvbW1p
dE9uKCkgY29uc3QKIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dHVybk9uSW5jcmVtZW50YWxBdXRv
VmFjdXVtKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01B
IGF1dG9fdmFjdXVtIl9zKTsKLSAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApOworICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IDA7CisgICAgaWYgKGF1dG8g
c3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGF1dG9fdmFjdXVtIl9zKSkKKyAg
ICAgICAgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKICAgICBp
bnQgZXJyb3IgPSBsYXN0RXJyb3IoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKIAogICAg
IC8vIENoZWNrIGlmIHdlIGdvdCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IHRoZSB2YWx1
ZSBvZiB0aGUgYXV0b192YWN1dW0gZmxhZy4KICAgICAvLyBJZiB3ZSBnb3QgYSBTUUxJVEVfQlVT
WSBlcnJvciwgdGhlbiB0aGVyZSdzIHByb2JhYmx5IGFub3RoZXIgdHJhbnNhY3Rpb24gaW4KQEAg
LTY0Myw0ICs2NDcsNjggQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6cmVsZWFzZU1lbW9yeSgpCiAg
ICAgc3FsaXRlM19kYl9yZWxlYXNlX21lbW9yeShtX2RiKTsKIH0KIAorc3RhdGljIEV4cGVjdGVk
PHNxbGl0ZTNfc3RtdCosIGludD4gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudChTUUxpdGVE
YXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHF1ZXJ5LCBzaXplX3QgcXVlcnlMZW5ndGgp
Cit7CisgICAgTG9ja0hvbGRlciBkYXRhYmFzZUxvY2soZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgp
KTsKKyAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeSk7CisK
KyAgICAvLyBQYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpbmNsdWRpbmcgdGhlIG51bGwg
Y2hhcmFjdGVyIHRvIHNxbGl0ZTNfcHJlcGFyZV92MjsKKyAgICAvLyB0aGlzIGxldHMgU1FMaXRl
IGF2b2lkIGFuIGV4dHJhIHN0cmluZyBjb3B5LgorICAgIHNpemVfdCBsZW5ndGhJbmNsdWRpbmdO
dWxsQ2hhcmFjdGVyID0gcXVlcnlMZW5ndGggKyAxOworCisgICAgc3FsaXRlM19zdG10KiBzdGF0
ZW1lbnQgeyBudWxscHRyIH07CisgICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7CisgICAg
aW50IGVycm9yID0gc3FsaXRlM19wcmVwYXJlX3YyKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwg
cXVlcnksIGxlbmd0aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIsICZzdGF0ZW1lbnQsICZ0YWlsKTsK
KyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwg
InNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnksIHNx
bGl0ZTNfZXJybXNnKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOworICAgICAgICBpZiAodGFp
bCAmJiAqdGFpbCkKKyAgICAgICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1l
bnQ7Cit9CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6
cHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJp
bmcgcXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0
byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVy
eS5kYXRhKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVw
YXJlU3RhdGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1
ZXJ5LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQu
ZXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3Fs
U3RhdGVtZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+
IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sK
KyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRo
aXMsIHF1ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3Rh
dGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRl
RGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAl
e3B1YmxpY31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0
YXRlbWVudCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxV
bmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1
ZXJ5ID0gcXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3Fs
U3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0
YSgpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVl
cnkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5l
cnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpu
ZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitF
eHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6
cHJlcGFyZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3Fs
U3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hh
cmFjdGVycygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJl
cGFyZUhlYXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31z
IiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNx
bFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVT
dGF0ZW1lbnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUo
KSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIw
ZmE2M2E5OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGlu
IEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgs
OCArMjgsMTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5o
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlTGFzdENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRl
Q29tbWFuZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVD
b21tYW5kKEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0
KGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlz
dHMoY29uc3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVt
ZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1l
bnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlx
dWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBT
dHJpbmcmIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FM
aXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVl
cnkpOworCiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhp
cyBpcyB0aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmlu
ZGV4IGRlYThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLjQ4ZjlhZWUyZDcx
ZDkxZmI0NTcwMjIyZDRlNWIwNzg4YTBiZTE1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVt
ZW50KFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1l
bnQ6OlNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3Rh
dGVtZW50KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwg
bV9zdGF0ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NF
UlQoc3RhdGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkK
K1NRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVy
KQorICAgIDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQo
c3RkOjpleGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxp
emUoKTsKIH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1l
bnQ6On5TUUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQot
ICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsK
LQotICAgIENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsK
LSAgICAKLSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5k
YXRhKCkpOwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5n
IHRoZSBudWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBs
ZXRzIFNRTGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3Ro
SW5jbHVkaW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0
IGNoYXIqIHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92
MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRp
bmdOdWxsQ2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAh
PSBTUUxJVEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2
IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1z
ZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwp
Ci0gICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBtX2lzUHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4g
ZXJyb3I7CisgICAgc3FsaXRlM19maW5hbGl6ZShtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OnN0ZXAoKQogewogICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0
YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAg
IHJldHVybiBTUUxJVEVfT0s7Ci0KICAgICAvLyBUaGUgZGF0YWJhc2UgbmVlZHMgdG8gdXBkYXRl
IGl0cyBsYXN0IGNoYW5nZXMgY291bnQgYmVmb3JlIGVhY2ggc3RhdGVtZW50CiAgICAgLy8gaW4g
b3JkZXIgdG8gY29tcHV0ZSBwcm9wZXJseSB0aGUgbGFzdENoYW5nZXMoKSByZXR1cm4gdmFsdWUu
CiAgICAgbV9kYXRhYmFzZS51cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKLSAgICBMT0coU1FM
RGF0YWJhc2UsICJTUUwgLSBzdGVwIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAg
ICBpbnQgZXJyb3IgPSBzcWxpdGUzX3N0ZXAobV9zdGF0ZW1lbnQpOwotICAgIGlmIChlcnJvciAh
PSBTUUxJVEVfRE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExPRyhTUUxE
YXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxuUXVlcnkgLSAlc1xuRXJyb3IgLSAl
cyIsIAotICAgICAgICAgICAgZXJyb3IsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCksIHNxbGl0ZTNf
ZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0gICAgfQorICAgIGlmIChlcnJv
ciAhPSBTUUxJVEVfRE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKQorICAgICAgICBMT0coU1FM
RGF0YWJhc2UsICJzcWxpdGUzX3N0ZXAgZmFpbGVkICglaSlcbkVycm9yIC0gJXMiLCBlcnJvciwg
c3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKIAogICAgIHJldHVy
biBlcnJvcjsKIH0KLSAgICAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6OmZpbmFsaXplKCkKLXsKLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLSAgICBMT0coU1FM
RGF0YWJhc2UsICJTUUwgLSBmaW5hbGl6ZSAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgaW50IHJlc3VsdCA9IHNxbGl0ZTNfZmluYWxpemUobV9zdGF0ZW1lbnQpOwotICAgIG1f
c3RhdGVtZW50ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBpbnQgU1FMaXRlU3RhdGVt
ZW50OjpyZXNldCgpIAogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9z
dGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9HKFNRTERhdGFiYXNl
LCAiU1FMIC0gcmVzZXQgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBz
dGF0dXMgPSBzcWxpdGUzX3Jlc2V0KG1fc3RhdGVtZW50KTsKICAgICBzcWxpdGUzX2NsZWFyX2Jp
bmRpbmdzKG1fc3RhdGVtZW50KTsKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTI5LDQyICs4Mywy
MSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpyZXNldCgpCiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50
OjpleGVjdXRlQ29tbWFuZCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1faXNQcmVw
YXJlZCk7Ci0gICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBmaW5hbGl6
ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0KIAogYm9v
bCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KCkKIHsKLSAgICBpZiAo
IW1fc3RhdGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBmaW5hbGl6ZSgpOwotICAgIHJldHVybiB0cnVlOwotCisgICAgcmV0dXJuIHN0ZXAo
KSA9PSBTUUxJVEVfUk9XOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQg
aW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKQogewotICAgIEFTU0VSVChtX2lzUHJl
cGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKICAgICBBU1NFUlQoYmxv
YiB8fCAhc2l6ZSk7CiAgICAgQVNTRVJUKHNpemUgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVt
ZW50KQotICAgICAgICByZXR1cm4gU1FMSVRFX0VSUk9SOwotCiAgICAgcmV0dXJuIHNxbGl0ZTNf
YmluZF9ibG9iKG1fc3RhdGVtZW50LCBpbmRleCwgYmxvYiwgc2l6ZSwgU1FMSVRFX1RSQU5TSUVO
VCk7CiB9CiAKQEAgLTE4NSw3ICsxMTgsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6
YmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQVNTRVJUKG1f
aXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yMDQs
NyArMTM2LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4LCBjb25z
dCBTdHJpbmcmIHRleHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4
LCBpbnQgaW50ZWdlcikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQo
aW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBi
aW5kUGFyYW1ldGVyQ291bnQoKSk7CiAKQEAgLTIxMyw3ICsxNDQsNiBAQCBpbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kSW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiAKIGludCBTUUxpdGVTdGF0
ZW1lbnQ6OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIHsKLSAgICBBU1NF
UlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAKQEAg
LTIyMiw3ICsxNTIsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQoaW50IGluZGV4
LCBpbnQ2NF90IGludGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUoaW50
IGluZGV4LCBkb3VibGUgbnVtYmVyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAg
IEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjMxLDcgKzE2MCw2IEBAIGludCBT
UUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3VibGUgbnVtYmVyKQogCiBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kTnVsbChpbnQgaW5kZXgpCiB7Ci0gICAgQVNTRVJUKG1f
aXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yNDks
MjYgKzE3NywxOSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVmFsdWUoaW50IGluZGV4LCBj
b25zdCBTUUxWYWx1ZSYgdmFsdWUpCiAKIHVuc2lnbmVkIFNRTGl0ZVN0YXRlbWVudDo6YmluZFBh
cmFtZXRlckNvdW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBp
ZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19i
aW5kX3BhcmFtZXRlcl9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmNvbHVtbkNvdW50KCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAo
IW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19kYXRh
X2NvdW50KG1fc3RhdGVtZW50KTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1u
TnVsbChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRl
bWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNvbHVt
bkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3OCwxOSArMTk5
LDE0IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKIGJvb2wg
U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbkRlY2xhcmVkQXNCbG9iKGludCBjb2wpCiB7CiAgICAg
QVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KSB7Ci0gICAgICAgIGlmIChw
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
ICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyhzcWxp
dGUzX2NvbHVtbl9kZWNsdHlwZShtX3N0YXRlbWVudCwgY29sKSksICJibG9iIik7CiB9CiAKIFN0
cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIHsKICAgICBBU1NF
UlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJl
QW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNfY29sdW1uX25hbWUxNihtX3N0YXRlbWVudCwgY29sKSkp
OwpAQCAtMjk5LDkgKzIxNSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5h
bWUoaW50IGNvbCkKIFNRTFZhbHVlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50
IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0g
ICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoY29sdW1uQ291
bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMzAsOSArMjQ1LDgg
QEAgU1FMVmFsdWUgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29sKQogU3Ry
aW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogewogICAgIEFTU0VS
VChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVB
bmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fdGV4dDE2KG1fc3RhdGVtZW50LCBjb2wpKSwg
c3FsaXRlM19jb2x1bW5fYnl0ZXMxNihtX3N0YXRlbWVudCwgY29sKSAvIHNpemVvZihVQ2hhcikp
OwpAQCAtMzQxLDkgKzI1NSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblRl
eHQoaW50IGNvbCkKIGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQg
Y29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAg
ICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJl
dHVybiAwLjA7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FM
SVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBj
b2wpCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2RvdWJs
ZShtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM1Miw5ICsyNjUsOCBAQCBkb3VibGUgU1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVTdGF0ZW1lbnQ6Omdl
dENvbHVtbkludChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFt
X3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYg
c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChjb2x1bW5D
b3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29s
dW1uX2ludChtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM2Myw5ICsyNzUsOCBAQCBpbnQgU1FMaXRl
U3RhdGVtZW50OjpnZXRDb2x1bW5JbnQoaW50IGNvbCkKIGludDY0X3QgU1FMaXRlU3RhdGVtZW50
OjpnZXRDb2x1bW5JbnQ2NChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRF
X1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5n
KCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChj
b2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0
ZTNfY29sdW1uX2ludDY0KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzc1LDcgKzI4Niw3IEBAIFN0
cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKQogewog
ICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVB
bmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYm
IHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBp
ZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA4LDcgQEAgdm9pZCBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJl
c3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAm
JiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRT
dGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDIzLDcgKzMzNCw3IEBAIHZvaWQgU1FM
aXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNvbCwgVmVjdG9yPHVpbnQ4
X3Q+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9zdGF0
ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFoYXNT
dGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICByZXN1
bHQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ1MSwxOSArMzYyLDE2IEBA
IGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8
U3RyaW5nPiYgdikKIAogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAg
ICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAg
cmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5h
cHBlbmQoZ2V0Q29sdW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAg
aWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVz
dWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3Vs
dHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc5LDE2IEBAIGJvb2wgU1FMaXRlU3Rh
dGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+JiB2KQogewogICAg
IHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsK
LSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdo
aWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uSW50
KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAg
ICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2Ug
cXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJl
c3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC00OTEsMTkgKzM5NiwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRS
ZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ2NF90PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAK
LSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzU3Rh
cnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAoc3RlcCgpID09
IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludDY0KGNvbCkpOwogICAg
IGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERh
dGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBt
X3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwog
ICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxMSwy
NSArNDEzLDIyIEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKGlu
dCBjb2wsIFZlY3Rvcjxkb3VibGU+JiB2KQogewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmICht
X3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNR
TElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBp
bmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JP
VykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uRG91YmxlKGNvbCkpOwogICAgIGJvb2wgcmVz
dWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAi
RXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50
OjpyZXR1cm5Eb3VibGVSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0g
ICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFNRTGl0ZVN0YXRl
bWVudDo6aXNFeHBpcmVkKCkKK2Jvb2wgU1FMaXRlU3RhdGVtZW50OjpoYXNTdGFydGVkU3RlcHBp
bmcoKQogewotICAgIHJldHVybiAhbV9zdGF0ZW1lbnQ7CisgICAgcmV0dXJuIHNxbGl0ZTNfc3Rt
dF9idXN5KG1fc3RhdGVtZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGE3YWNkZTVj
ZmM1YjJkMzU2MmIxZmI1MWZkNmE3MWJkOTVjY2U0MDguLjYzNTEyYmI2ZWI0OWE2ZWUxOWU3MWYx
YzY3YjFmZThmMjlmNjVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgU1FMaXRlU3RhdGVtZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
UUxpdGVTdGF0ZW1lbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBjb25zdCBTdHJp
bmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAgICAKLSAgICBX
RUJDT1JFX0VYUE9SVCBpbnQgcHJlcGFyZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5k
QmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBpbnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKQEAgLTUw
LDIzICs0OSwxOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgYmluZFBh
cmFtZXRlckNvdW50KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgc3RlcCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBmaW5hbGl6ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCByZXNldCgpOwogICAgIAotICAgIGludCBwcmVwYXJlQW5kU3RlcCgpIHsgaWYgKGludCBlcnJv
ciA9IHByZXBhcmUoKSkgcmV0dXJuIGVycm9yOyByZXR1cm4gc3RlcCgpOyB9Ci0gICAgCi0gICAg
Ly8gcHJlcGFyZXMsIHN0ZXBzLCBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KKyAgICAvLyBzdGVw
cyBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIDMg
c3RlcHMgc3VjY2VlZCB3aXRoIHN0ZXAoKSByZXR1cm5pbmcgU1FMSVRFX0RPTkUKICAgICAvLyBy
ZXR1cm5zIGZhbHNlIG90aGVyd2lzZSAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRl
Q29tbWFuZCgpOwogICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVwcywgYW5kIGZpbmFsaXplcy4g
IAorICAgIC8vIHN0ZXBzLCBhbmQgZmluYWxpemVzLgogICAgIC8vIHJldHVybnMgdHJ1ZSBpcyBz
dGVwKCkgcmV0dXJucyBTUUxJVEVfUk9XCiAgICAgLy8gcmV0dXJucyBmYWxzZSBvdGhlcndpc2UK
ICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KCk7CiAKLSAgICBib29sIGlzRXhwaXJl
ZCgpOwotCiAgICAgLy8gUmV0dXJucyAtMSBvbiBsYXN0LXN0ZXAgZmFpbGluZy4gIE90aGVyd2lz
ZSwgcmV0dXJucyBudW1iZXIgb2Ygcm93cwogICAgIC8vIHJldHVybmVkIGluIHRoZSBsYXN0IHN0
ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwpAQCAtOTAsMTUgKzg0LDE1IEBAIHB1YmxpYzoK
IAogICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0K
ICAgICAKLSAgICBjb25zdCBTdHJpbmcmIHF1ZXJ5KCkgY29uc3QgeyByZXR1cm4gbV9xdWVyeTsg
fQotICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU1FMaXRlRGF0YWJhc2U7CisgICAg
U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiwgc3FsaXRlM19zdG10Kik7CisKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHByZXBhcmVkIHN0YXRlbWVudCBoYXMgYmVlbiBzdGVwcGVk
IGF0IGxlYXN0IG9uY2UgdXNpbmcgc3RlcCgpIGJ1dCBoYXMgbmVpdGhlciBydW4gdG8gY29tcGxl
dGlvbiAocmV0dXJuZWQgU1FMSVRFX0RPTkUgZnJvbSBzdGVwKCkpIG5vciBiZWVuIHJlc2V0KCku
CisgICAgYm9vbCBoYXNTdGFydGVkU3RlcHBpbmcoKTsKKwogICAgIFNRTGl0ZURhdGFiYXNlJiBt
X2RhdGFiYXNlOwotICAgIFN0cmluZyBtX3F1ZXJ5OwogICAgIHNxbGl0ZTNfc3RtdCogbV9zdGF0
ZW1lbnQ7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNQcmVwYXJlZCB7IGZhbHNl
IH07Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCmluZGV4IGY5YzI0Yjhl
ZDU3MTgyZWE1Nzg4N2EwMDMwN2VkOGRiOGEzZDBmZmQuLjFhOGE2OTFlNDkwYzliMDIzYThlZGVj
MDQ5MWY4ZTllODZmM2UwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1NlYXJjaFBvcHVwTWVudURCLmNwcApAQCAtMTMwLDI1ICsxMzAsMjUgQEAgYm9vbCBTZWFyY2hQ
b3B1cE1lbnVEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2Uu
dGFibGVFeGlzdHMoIlNlYXJjaCIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgaW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7
Ci0gICAgaWYgKGludGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBp
bnRlZ3JpdHkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVj
azsiX3MpOworICAgIGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGV4ZWN1dGUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7Cisg
ICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29k
ZSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2No
ZWNrIHN0ZXAgcmV0dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7Cisg
ICAgaW50IGNvbHVtbnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVt
bnMgIT0gMSkgewogICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9y
bWluZyBpbnRlZ3JpdHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5n
ZXRDb2x1bW5UZXh0KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRD
b2x1bW5UZXh0KDApOwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBM
T0dfRVJST1IoIlNlYXJjaCBhdXRvc2F2ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVk
IC0gJXMiLCByZXN1bHRUZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTIyNCwxNyArMjI0LDE5IEBA
IGJvb2wgU2VhcmNoUG9wdXBNZW51REI6Om9wZW5EYXRhYmFzZSgpCiAKIHZvaWQgU2VhcmNoUG9w
dXBNZW51REI6OmNsb3NlRGF0YWJhc2UoKQogewotICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KSB7Ci0gICAgICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUo
KTsKLSAgICAgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAg
ICAgICBtX3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAg
ICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgIH0KKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50ID0gbnVs
bHB0cjsKKyAgICBtX3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudCA9IG51bGxwdHI7
CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwogfQogCiB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjp2
ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVz
ZXJfdmVyc2lvbiJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzEsMjMgKzI3MywyNSBAQCB2b2lkIFNlYXJjaFBvcHVw
TWVudURCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKIAogaW50IFNlYXJjaFBv
cHVwTWVudURCOjpleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29sIGlnbm9y
ZUVycm9yKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3Fs
KTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVt
ZW50LmZpbmFsaXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBjaGVja1NRTGl0
ZVJldHVybkNvZGUoc3RhdGVtZW50LmVycm9yKCkpOworICAgICAgICByZXR1cm4gc3RhdGVtZW50
LmVycm9yKCk7CisgICAgfQogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7CisgICAg
aW50IHJldCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYm
IHJldCAhPSBTUUxJVEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3Ip
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3Fs
LmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLQogICAgIHJldHVy
biByZXQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVw
TWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKIHsKLSAg
ICBhdXRvIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNl
LCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnByZXBhcmUoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHJldCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAgcmV0dXJuIHN0YXRlbWVudDsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsK
KyAgICBBU1NFUlQoc3RhdGVtZW50KTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0
cigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
c2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCmluZGV4IDg5MmMzZjQ5ZTkw
MTRhMzVmZTkyOTg0ZWY5YTI5MDRhN2JkZWQ1NjAuLmIwYzcxNjFhODA2YTg2OGVjNGZmNDQ3NjUz
YmI4NTNmYzA5Njg0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC0yODUsMTEg
KzI4NSwxMSBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jk
c1RhYmxlKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZl
dGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0dXJuICJV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3Jk
cyB0YWJsZS4iOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9u
YW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0
aGUgUmVjb3JkcyB0YWJsZS4iX3M7CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxJVEVfUk9XKQogICAgICAgICAgICAgcmV0dXJuICJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIjsKIAotICAgICAgICBjdXJy
ZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRT
Y2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJU
KCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC00MjcsMTggKzQyNywxOCBAQCBib29sIFJl
Z2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGE+JgogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX2Rh
dGFiYXNlKTsKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHNxbCgqbV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7Ci0gICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0U3RhdGVtZW50KSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBhdXRvJiBzY3Jp
cHRTdG9yYWdlID0gdGhpcy0+c2NyaXB0U3RvcmFnZSgpOwogICAgIGZvciAoYXV0byYgcmVnaXN0
cmF0aW9uIDogcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHNxbCgqbV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gPyIpOwot
ICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5iaW5kVGV4dCgxLCByZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0
byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUg
RlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRl
bWVudAorICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCByZWdpc3Ry
YXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRlbGV0
ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHJlbW92ZSByZWdpc3RyYXRpb24g
ZGF0YSBmcm9tIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpAQCAtNDU3LDE5ICs0NTcsMTkgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRh
YmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRh
PiYKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBjZXJ0aWZpY2F0ZUluZm9FbmNv
ZGVyOwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyIDw8IGRhdGEuY2VydGlmaWNhdGVJ
bmZvOwogCi0gICAgICAgIGlmIChzcWwuYmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRpb24ua2V5
LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRl
eHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9ydCgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgzLCBkYXRhLnJlZ2lzdHJh
dGlvbi5zY29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzcWwuYmluZFRleHQoNCwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvcE9yaWdpbigpLmRh
dGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5k
RG91YmxlKDUsIGRhdGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQo
NiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNo
ZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDcsIGRhdGEuc2Ny
aXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4
dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSwgY3NwRW5j
b2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRU
ZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHNxbC5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpLCBzY3Jp
cHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwg
Y2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAoaW5zZXJ0
U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtl
eSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9ydCgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoMywg
ZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucGF0aCgpLnRvU3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg0LCBkYXRhLnJlZ2lz
dHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kRG91YmxlKDUsIGRhdGEucmVn
aXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVw
ZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywg
ZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJU
eXBlKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRC
bG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoMTAsIGRh
dGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpLCBz
Y3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIGNlcnRpZmljYXRlSW5mb0Vu
Y29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAi
RmFpbGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkp
IC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MDIsMjYgKzUw
MiwyNiBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtl
ciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiIpOwotICAgIFNRTGl0ZVN0
YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsKLSAg
ICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzcWwgPSBtX2RhdGFi
YXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsKKyAgICBp
ZiAoIXNxbCkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZyb20gcmVjb3JkcyB0YWJsZSAoIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOwogCi0gICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHNx
bC0+c3RlcCgpOwogCi0gICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1bHQgPSBz
cWwuc3RlcCgpKSB7CisgICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1bHQgPSBz
cWwtPnN0ZXAoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEltcG9ydGluZyBhIHJlZ2lzdHJhdGlvbiBm
cm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBhdXRvIGtleSA9IFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtleShzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAg
ICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0KDEpIH07
Ci0gICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLmdldENvbHVtblRleHQoMik7CisgICAgICAg
IGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFiYXNlS2V5
KHNxbC0+Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsg
VVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCgxKSB9OworICAgICAgICBhdXRvIHNjb3BlUGF0aCA9
IHNxbC0+Z2V0Q29sdW1uVGV4dCgyKTsKICAgICAgICAgYXV0byBzY29wZVVSTCA9IFVSTCB7IG9y
aWdpblVSTCwgc2NvcGVQYXRoIH07Ci0gICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC5nZXRDb2x1bW5UZXh0KDMpKTsK
LSAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNv
bmRzKHNxbC5nZXRDb2x1bW5Eb3VibGUoNCkpOwotICAgICAgICBhdXRvIHVwZGF0ZVZpYUNhY2hl
ID0gc3RyaW5nVG9VcGRhdGVWaWFDYWNoZShzcWwuZ2V0Q29sdW1uVGV4dCg1KSk7Ci0gICAgICAg
IGF1dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0KDYpIH07Ci0g
ICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmluZ1RvV29ya2VyVHlwZShzcWwuZ2V0Q29sdW1u
VGV4dCg3KSk7CisgICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC0+Z2V0Q29sdW1uVGV4dCgzKSk7CisgICAgICAgIGF1
dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzcWwtPmdl
dENvbHVtbkRvdWJsZSg0KSk7CisgICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBzdHJpbmdU
b1VwZGF0ZVZpYUNhY2hlKHNxbC0+Z2V0Q29sdW1uVGV4dCg1KSk7CisgICAgICAgIGF1dG8gc2Ny
aXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCg2KSB9OworICAgICAgICBh
dXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLT5nZXRDb2x1bW5UZXh0KDcp
KTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YTsK
LSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJpdHlQb2xp
Y3lEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOCwgY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YSk7CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3Nw
RGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLmRhdGEoKSwgY29udGVudFNlY3VyaXR5
UG9saWN5RGF0YS5zaXplKCkpOwogICAgICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAgaWYgKGNv
bnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKSB7CkBAIC01MzIsMTAgKzUzMiwxMCBAQCBT
dHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC5nZXRDb2x1
bW5UZXh0KDkpOworICAgICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDkpOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzY3JpcHRSZXNvdXJjZU1hcERhdGE7
Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291cmNlTWFw
RGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDEwLCBzY3JpcHRSZXNv
dXJjZU1hcERhdGEpOwogICAgICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHRE
YXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAKICAgICAgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0UmVzb3Vy
Y2VNYXBEYXRhLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhLnNpemUoKSk7CkBAIC01NTAs
NyArNTUwLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkK
ICAgICAgICAgfQogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0aWZpY2F0ZUluZm9EYXRh
OwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0ZUluZm9E
YXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRpZmljYXRl
SW5mb0RhdGEpOwogICAgICAgICBPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRl
SW5mbzsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRlSW5m
b0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0YS5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGEu
c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuY3BwCmluZGV4IGUyYzc3MTVhMzE1NmEwZmY2OTYyYWRlZjNkOWZmYWE2MGIxZTA3
NmIuLjc5N2JmN2MxYWFhZDEwYmVhNjgzOWZlZmQ3YzUzNWIwMTJhOTgwMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAt
MzgyLDggKzM4Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5JVFBEYXRhYmFzZSgpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
ICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2V0QnVzeVRpbWVvdXQobV9kYXRhYmFzZSwgIlBS
QUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIik7Ci0gICAgaWYgKHNldEJ1c3lUaW1lb3V0LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sgfHwgc2V0QnVzeVRpbWVvdXQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICBhdXRvIHNldEJ1c3lUaW1lb3V0ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAwMCJfcyk7CisgICAgaWYgKCFzZXRCdXN5VGltZW91
dCB8fCBzZXRCdXN5VGltZW91dC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQwMSwyMiArNDAxLDIy
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRh
YmFzZSgpCiBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKIHsKICAgICBWZWN0
b3I8U3RyaW5nPiBtaXNzaW5nVGFibGVzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJs
ZScgYW5kIHRibF9uYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgdGJs
X25hbWU9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgZm9yIChh
dXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC5iaW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVfT0spIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBm
YWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEgc2No
ZW1hIGlzIG1pc3NpbmcgdGFibGU6ICVzIiwgdGhpcywgdGFibGUuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICAgICAgbWlzc2luZ1RhYmxlcy5hcHBlbmQoU3RyaW5nKHRhYmxlKSk7CiAgICAgICAg
IH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQo
KTsKICAgICB9CiAgICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwpAQCAtNDI2LDggKzQyNiw4IEBAIE9wdGlvbmFsPFZlY3RvcjxTdHJp
bmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5n
VGFiCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZv
cmVpZ25LZXlzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZW5hYmxlRm9yZWlnbktleXMobV9k
YXRhYmFzZSwgIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiIpOwotICAgIGlmIChlbmFibGVGb3Jl
aWduS2V5cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGVuYWJsZUZvcmVpZ25LZXlzLnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7CisgICAg
aWYgKCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cyBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CkBAIC00MzYsMzEgKzQzNiwzMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cygpCiAKIFRhYmxlQW5kSW5kZXhQYWly
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRl
eFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IGdldFRhYmxlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJP
TSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBl
ID0gJ3RhYmxlJyIpKTsKLSAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgIGF1dG8gZ2V0VGFibGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUnIikpOworICAg
IGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRU
YWJsZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2gg
c2NoZW1hIGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChnZXRUYWJs
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChnZXRUYWJsZVN0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJl
bnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNo
IHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgU3RyaW5nIGNyZWF0ZVRhYmxl
UXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIFN0cmluZyBj
cmVhdGVUYWJsZVF1ZXJ5ID0gZ2V0VGFibGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0SW5kZXhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRh
YmxlTmFtZSwgIicgQU5EIHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChnZXRJbmRleFN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBnZXRJbmRleFN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlw
ZSA9ICdpbmRleCciKSk7CisgICAgaWYgKCFnZXRJbmRleFN0YXRlbWVudCkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4OwotICAgIGlmIChnZXRJbmRleFN0YXRlbWVu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3RyaW5n
KGdldEluZGV4U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgIGlmIChnZXRJbmRleFN0
YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byByYXdJbmRleCA9
IFN0cmluZyhnZXRJbmRleFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgICAgIGlm
ICghcmF3SW5kZXguaXNFbXB0eSgpKQogICAgICAgICAgICAgaW5kZXggPSByYXdJbmRleDsKICAg
ICB9CkBAIC00ODAsMjAgKzQ4MCwyMCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaAogCiBib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNl
cygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3Ry
aW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5k
ZXgnIikpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09V
TlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGlj
ZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNvdW50LCBlcnJv
ciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKHN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdV
bmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggY291
bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAotICAgIGlmIChzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApIDwgZXhwZWN0ZWRJbmRleENv
dW50KQorICAgIGlmIChzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA8IGV4cGVjdGVkSW5kZXhD
b3VudCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTQs
OCArNTU0LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYgdGFibGUg
OiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAgIGF1dG8g
cXVlcnkgPSBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZSwgIiBSRU5BTUUgVE8gXyIs
IHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGFsdGVyVGFibGUobV9kYXRhYmFzZSwg
cXVlcnkpOwotICAgICAgICBpZiAoYWx0ZXJUYWJsZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8
IGFsdGVyVGFibGUuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gYWx0ZXJU
YWJsZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmICgh
YWx0ZXJUYWJsZSB8fCBhbHRlclRhYmxlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFp
bGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDE2ICs1NzAsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5
KCkKIAogICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkua2V5cygpKSB7CiAgICAgICAgIGF1dG8gcXVlcnkgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0lu
VGFibGVRdWVyeSh0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBtaWdyYXRlVGFibGVE
YXRhKG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKG1pZ3JhdGVUYWJsZURhdGEucHJl
cGFyZSgpICE9IFNRTElURV9PSyB8fCBtaWdyYXRlVGFibGVEYXRhLnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVUYWJsZURhdGEgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWln
cmF0ZVRhYmxlRGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBtaWdy
YXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBkcm9wUXVlcnkgPSBtYWtlU3RyaW5n
KCJEUk9QIFRBQkxFIF8iLCB0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBkcm9wVGFi
bGVRdWVyeShtX2RhdGFiYXNlLCBkcm9wUXVlcnkpOwotICAgICAgICBpZiAoZHJvcFRhYmxlUXVl
cnkucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBkcm9wVGFibGVRdWVyeS5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChkcm9wUXVlcnkpOworICAgICAgICBpZiAoIWRyb3BUYWJsZVF1ZXJ5IHx8
IGRyb3BUYWJsZVF1ZXJ5LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGRy
b3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNTk3LDE3ICs1OTcsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5
KCkKIAogVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlBSQUdNQSB0YWJsZV9p
bmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwgdGFibGVO
YW1lLCAiKSIpKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRDb2x1bW5z
RnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0
Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gY29sdW1uczsKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgIHdo
aWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gbmFt
ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICAgICAgY29sdW1ucy5hcHBlbmQo
bmFtZSk7CiAgICAgfQogCkBAIC02MjIsMTggKzYyMiwxOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYg
dGFibAogICAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5zLmNvbnRhaW5zKGNvbHVtbikpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAi
IEFERCBDT0xVTU4gIiwgY29sdW1uKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgQURE
IENPTFVNTiAiLCBjb2x1bW4pKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgZXJyb3IgZXhl
Y3V0aW5nIHN0YXRlbWVudCB0byBhZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRhYmxlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIHN0
YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiB9CiAKQEAgLTY0OCwxMyArNjQ4LDEzIEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zSWZO
ZWNlc3NhcnkoKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpy
ZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhpc3RpbmdDb2x1bW5OYW1l
JiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUmJiBleHBlY3RlZENvbHVt
bk5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtl
U3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAiLCBleGlz
dGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFi
bGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4gIiwgZXhpc3RpbmdDb2x1bW5OYW1lLCAiIFRPICIsIGV4
cGVjdGVkQ29sdW1uTmFtZSkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c1RvVGFibGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byByZW5hbWUgY29sdW1uIGluIHRh
YmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzEyLDE1ICs3MTIsMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKICAgICBT
dHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEg
Zm9yIGFuIGV4aXN0aW5nIE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxp
dGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIik7Ci0gICAgICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9tYWlucyciX3MpOworICAg
ICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JzZXJ2ZWREb21haW5z
IHRhYmxlLiIpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBPYnNlcnZl
ZERvbWFpbnMgdGFibGUgYXQgYWxsLCBvciB0aGVyZSBpcyBhbiBlcnJvciBleGVjdXRpbmcgdGhl
IGZldGNoLCBkZWxldGUgdGhlIGZpbGUuCi0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9
IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwogICAgICAg
ICAgICAgY2xvc2UoKTsKICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9y
YWdlRGlyZWN0b3J5UGF0aCk7CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRT
Y2hlbWEuaXNFbXB0eSgpKTsKQEAgLTc1MSwxMiArNzUxLDE0IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgp
CiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IFN0cmlu
ZyYgbG9nU3RyaW5nKSBjb25zdAogewogICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgIHN0
YXRlbWVudCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNl
LCBxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICAgICAg
aWYgKHN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0
YXRlbWVudE9yRXJyb3IgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHF1ZXJ5KTsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnRPckVycm9yKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJM
SUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5nLmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKICAgICAg
ICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRv
VW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKICAgICB9
CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50Lmdl
dCgpIH07CiB9CkBAIC0xMDA0LDkgKzEwMDYsOCBAQCBPcHRpb25hbDx1bnNpZ25lZD4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYgog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byBzY29wZWRTdGF0ZW1l
bnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQs
IGRvbWFpbklERnJvbVN0cmluZ1F1ZXJ5LCAiZG9tYWluSUQiX3MpOwotICAgIGlmICghc2NvcGVk
U3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQuIFN0YXRlbWVudDogJXMuIEVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgc2NvcGVkU3RhdGVtZW50LT5xdWVy
eSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgIGlmICgh
c2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQuIEVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
QEAgLTEwMzksMjMgKzEwNDAsMjMgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2UKIAogdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQogewotICAgIFNRTGl0ZVN0
YXRlbWVudCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmlu
ZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7Iikp
OworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoc3RhdGVtZW50LCBlbnN1cmVBbmRNYWtlRG9tYWluTGlz
dChkb21haW5MaXN0KSwgIiApOyIpKTsKICAgICAKLSAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlw
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0UmVsYXRp
b25zaGlwU3RhdGVtZW50LmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAg
IGlmICghaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50CisgICAgICAgIHx8IGluc2VydFJlbGF0
aW9uc2hpcFN0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHN0YXRlbWVudC5jb250YWlucygiUkVQ
TEFDRSIpKSB7Ci0gICAgICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmluZERv
dWJsZSgyLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+Ymlu
ZERvdWJsZSgyLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTIyOSwx
NyArMTIzMCwxNyBAQCBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdAogCiAgICAgVmVjdG9yPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IHRoaXJkUGFydHlEYXRh
TGlzdDsKICAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVyID0gdGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01v
ZGU6OkFsbCA/ICIlIiA6ICIxIjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc29ydGVkU3RhdGlzdGlj
cyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JT
b3J0aW5nKCkpKTsKLSAgICBpZiAoc29ydGVkU3RhdGlzdGljcy5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MuYmluZFRleHQoMSwgcHJldmFsZW50RG9t
YWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MuYmluZFRleHQo
MiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHNvcnRlZFN0YXRpc3RpY3MgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUICIsIGpvaW5TdWJTdGF0
aXN0aWNzRm9yU29ydGluZygpKSk7CisgICAgaWYgKCFzb3J0ZWRTdGF0aXN0aWNzCisgICAgICAg
IHx8IHNvcnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDEsIHByZXZhbGVudERvbWFpbnNCaW5kUGFy
YW1ldGVyKQorICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLT5iaW5kVGV4dCgyLCAiJSIpICE9
IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSwg
ZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRo
aXJkUGFydHlEYXRhTGlzdDsKICAgICB9Ci0gICAgd2hpbGUgKHNvcnRlZFN0YXRpc3RpY3Muc3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRl
ZFN0YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDEpKSkgewotICAgICAgICAgICAgYXV0byB0aGlyZFBh
cnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0aXN0aWNzLmdldENvbHVtbkludCgwKTsKKyAgICB3aGls
ZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYg
KGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmdldENvbHVtbkludCgxKSkpIHsK
KyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGljcy0+
Z2V0Q29sdW1uSW50KDApOwogICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7CiAgICAg
ICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5
RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGly
ZFBhcnR5RG9tYWluKSB9KTsKICAgICAgICAgfQpAQCAtMTI2NSw5ICsxMjY2LDggQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0
ZWRDb3VudEZvckRvbWFpbnMKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVk
ID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwg
ZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBkYXRl
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRhdGFSZWNv
cmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0
cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQg
fHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JE
b21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQpAQCAtMTI4NSwzMSArMTI4NSwzMCBAQCB1bnNpZ25lZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWlu
cwogICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKIAogICAgIFN0ZFNldDx1bnNpZ25lZD4g
bmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFN1YnJlc291
cmNlcyhtX2RhdGFiYXNlLCAiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9J
TiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURvbWFp
bklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7Ci0gICAgaWYg
KGZpbmRTdWJyZXNvdXJjZXMucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBmaW5k
U3VicmVzb3VyY2VzLmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsK
KyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5z
IE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFN1YnJlc291cmNl
cyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FM
SVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVs
eUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRTdWJyZXNv
dXJjZXMuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVz
b3VyY2VzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9u
UHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgICAg
IGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9t
YWlucy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBm
aW5kVG9wRnJhbWVzKG1fZGF0YWJhc2UsICJTRUxFQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBK
T0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRhcmdldERvbWFpbklEID0g
PyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7Ci0gICAgaWYgKGZpbmRU
b3BGcmFtZXMucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBmaW5kVG9wRnJhbWVz
LmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGZp
bmRUb3BGcmFtZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5k
b21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUg
dGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9z
KTsKKyAgICBpZiAoIWZpbmRUb3BGcmFtZXMKKyAgICAgICAgfHwgZmluZFRvcEZyYW1lcy0+Ymlu
ZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1Ro
YXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAg
ICB3aGlsZSAoZmluZFRvcEZyYW1lcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBp
bnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLmdldENvbHVtbkludCgwKTsKKyAgICB3aGls
ZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaW50IG5l
d0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Z2V0Q29sdW1uSW50KDApOwogICAgICAgICBhdXRv
IGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3
RG9tYWluSUQpOwogICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKICAgICAgICAgICAg
IG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKQEAgLTEzNDEsMjEg
KzEzNDAsMjAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFy
a0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWwKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIFN0ZFNldDx1bnNpZ25lZD4gcHJldmFsZW50RHVlVG9SZWRpcmVj
dDsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3Vi
cmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJl
KCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50RHVlVG9S
ZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMu
aXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVu
dCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2Vy
dChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgIH0K
IAotICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21h
aW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMg
T04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50
b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKLSAgICBp
ZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0g
ICAgICAgIHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQotICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVS
ZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gdG9wRnJhbWVSZWRp
cmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJ
TkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlu
cy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2Jz
ZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVj
dC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAg
ICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgbWFya1ByZXZhbGVudFN0YXRlbWVudChtX2RhdGFi
YXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9
IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3Rk
U2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHByZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVnaW4oKSwg
cHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQoKSkpLCAiKSIpKTsKLSAgICBpZiAobWFya1ByZXZh
bGVudFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1hcmtQcmV2
YWxlbnRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBtYXJrUHJl
dmFsZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5J
RCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+Ojpp
dGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0LmVuZCgpKSksICIpIikpOworICAgIGlmICghbWFya1ByZXZhbGVudFN0YXRlbWVudCB8
fCBtYXJrUHJldmFsZW50U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMzY2LDEyICsxMzY0LDEyIEBAIEhh
c2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiByZXN1bHRz
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZh
bGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsK
LSAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0g
U1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrZXkg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDEpKQotICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDog
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93CisgICAgYXV0byBub3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9t
YWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVu
dFJlc291cmNlc1N0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJl
c291cmNlc1N0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgTm90VmVyeVByZXZh
bGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgxKSkKKyAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKICAgICAgICAgICAgICAg
ICAsIDAsIDAsIDAsIDAgfSk7CiAgICAgICAgICAgICByZXN1bHRzLmFkZChrZXksIHZhbHVlKTsK
ICAgICAgICAgfQpAQCAtMTM4Niw0MyArMTM4NCw0MyBAQCBIYXNoTWFwPHVuc2lnbmVkLCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVByZXZhbGVudFJlc291cmNl
cwogCiAgICAgYXV0byBkb21haW5JRHNPZkludGVyZXN0ID0gYnVpbGRlci50b1N0cmluZygpOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQs
IENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0
LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwotICAgIGlmIChzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsK
LSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQu
c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmlu
ZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZS
T00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFp
bklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURv
bWFpbklEIikpOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVt
ZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3Rh
dGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9t
YWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVz
dWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
c1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5U
KHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJy
ZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBz
dWJyZXNvdXJjZURvbWFpbklEIikpOwotICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGls
ZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxF
Q1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAg
aWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAg
ICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRz
LmZpbmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgp
KQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgIHJl
c3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiU0VMRUNUIHN1YmZyYW1lRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWlu
SUQpIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJmcmFtZURvbWFp
bklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJmcmFtZURvbWFp
bklEIikpOwotICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1l
bnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsK
KyAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3ViZnJhbWVEb21h
aW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zIFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3Qs
ICIpIEdST1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAoc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwog
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAg
IHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNv
dXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIp
IEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOwotICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3
aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc291
cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikg
R1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTU0
OSwxMCArMTU0NywxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNl
LCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklEID0gPyIpOwotICAgIGlmIChpbmNyZW1lbnRT
dG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5jcmVtZW50
U3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAg
aWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VB
Y2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nl
c3MgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTY0Niw5ICsxNjQ0LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBI
YXNoU2UKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhl
ckRhdGFGb3JEb21haW5zIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0
dGVtcHQiLCB0aGlzKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBk
b21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAgIGlmIChkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAg
aWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNzc2LDEwICsxNzczLDEw
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlKG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyIpOwotICAgIGlmIChyZW1v
dmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUuYmluZEludCgxLCAqdGFyZ2V0UmVz
dWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2lu
Y2VTYW1lU2l0ZS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHJlbW92ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRF
IEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudCBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghcmVtb3ZlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlCisgICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1l
U2l0ZS0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KQEAgLTE4MzIsMTAgKzE4MjksMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKICAgICB9
CiAgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgZmFsc2UsIHsgfSk7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgcmVtb3ZlU3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLCAiREVMRVRFIEZST00g
U3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyIpOwot
ICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25k
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHJlbW92ZVN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
RG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICghcmVtb3ZlU3RvcmFnZUFj
Y2VzcworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5iaW5kSW50KDEsICp0YXJnZXRS
ZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vz
cy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTkxOCw5ICsxOTE1
LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9tYWlu
c0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4KIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2
YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJh
bmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2luKCksIGRvbWFpbnMu
ZW5kKCkpKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlz
dChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbnMu
YmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9tYWluc0Fz
UHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzMDEsMTYgKzIyOTcsMTUgQEAgQ29va2llQWNj
ZXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MoY29u
c3QgU3ViUmVzb3VyY2UKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpc1ByZXZhbGVu
dCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21haW4uc3Ry
aW5nKCkpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFjdGlvbiBG
Uk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpOworICAg
IGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21h
aW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9J
Rl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y29va2llQWNjZXNzIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBib29sIGhhc05vRW50cnkg
PSBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9vbCBpc1ByZXZhbGVudCA9
ICFoYXNOb0VudHJ5ICYmICEhc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKLSAgICBib29sIGhh
ZFVzZXJJbnRlcmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSkgPyB0cnVlIDogZmFsc2U7CisgICAgYm9vbCBoYXNOb0VudHJ5ID0gc3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVzsKKyAgICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYg
ISFzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlv
biA9ICFoYXNOb0VudHJ5ICYmIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpID8gdHJ1ZSA6IGZh
bHNlOwogCiAgICAgaWYgKCFhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcih0b3BG
cmFtZURvbWFpbikgJiYgIWlzUHJldmFsZW50KQogICAgICAgICByZXR1cm4gQ29va2llQWNjZXNz
OjpCYXNlZE9uQ29va2llUG9saWN5OwpAQCAtMjMzMywxNCArMjMyOCwxNCBAQCBTdG9yYWdlQWNj
ZXNzUHJvbXB0V2FzU2hvd24gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhh
c1VzZXJHcmFudGVkUwogCiAgICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gKnJl
c3VsdC5zZWNvbmQ7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgZG9tYWluSUQgPSA/IEFORCB0b3BMZXZlbERvbWFpbklEID0gPyIpOwotICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0
ZW1lbnQuYmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJP
TSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/IEFO
RCB0b3BMZXZlbERvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFyeURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X1JPVykKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CiAK
LSAgICByZXR1cm4gISFzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOworICAg
IHJldHVybiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApID8gU3RvcmFnZUFjY2Vzc1Byb21w
dFdhc1Nob3duOjpZZXMgOiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOwogfQogCiBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoKSBjb25zdApAQCAtMjM0OCwx
MiArMjM0MywxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZAogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0
czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVn
aXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAx
IEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDAiX3MpOwor
ICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3
aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFw
cGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lz
dHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmco
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdHM7
CiB9CkBAIC0yMzYzLDEyICsyMzU4LDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJl
dmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNl
cnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAg
ICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
cmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdo
aWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFw
cGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHJl
c3VsdHM7CiB9CkBAIC0yMzc4LDEyICsyMzczLDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNXaXRoVXNlcklu
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAg
ICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0
KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzOTMsMTMgKzIzODgsMTIgQEAg
SGFzaE1hcDxUb3BGcmFtZURvbWFpbiwgU3ViUmVzb3VyY2VEb21haW4+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjoKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
IAogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAo
U0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxE
b21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5O
RVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRv
bWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBk
b21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsiX3MpOwotCi0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWlu
IEZST00gKFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRv
cExldmVsRG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBh
cyBvIElOTkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hF
UkUgby5kb21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFp
bnMgT04gZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFkZChSZWdpc3RyYWJsZURvbWFp
bjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21S
ZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAg
IHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRz
LmFkZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSksIFJlZ2lzdHJhYmxlRG9tYWlu
Ojp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTI0NDUsMTkg
KzI0MzksMTggQEAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpE
b21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGEKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBWZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQsIHJl
Z2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlcklu
dGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFpbnMgTEVG
VCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZUb3BGcmFt
ZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5zb3VyY2VE
b21haW5JRCA9IGRvbWFpbklEIl9zKTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hl
ZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3Rz
IEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9JTiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBD
T1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURv
bWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWluSUQgPSBkb21haW5JRCJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChz
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQo
eyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludCgwKSkKLSAgICAg
ICAgICAgICwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJs
ZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSkKLSAgICAgICAgICAgICwg
V2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMikpCi0g
ICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMykgPyB0cnVlIDogZmFsc2UKLSAg
ICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCg0KSA/IHRydWUgOiBmYWxzZQotICAg
ICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCi0gICAg
ICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDYp
KQorICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3Jl
YXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgx
KSkKKyAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVudC0+Z2V0
Q29sdW1uRG91YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgz
KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg0
KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1
KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoNikpCiAgICAgICAgIH0pOwogICAgIH0KICAgICAKQEAgLTI0
NzMsMTEgKzI0NjYsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYKIAogICAgIGF1dG8gbGlz
dFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46
Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJlZ2luKCksIGRvbWFpbklEc1RvQ2xlYXIuZW5k
KCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5k
ZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIikiKSk7Ci0g
ICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykKKyAgICBhdXRvIGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3Jh
bmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsK
KyAgICBpZiAoIWNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhckdyYW5kZmF0aGVyaW5nIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0yNjE3LDIzICsyNjEwLDIxIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lm
TmVlZGVkKCkKICAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNvdW50IC0gcGFyYW1ldGVy
cygpLnBydW5lRW50cmllc0Rvd25UbzsKICAgICBBU1NFUlQoY291bnRMZWZ0VG9QcnVuZSk7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUobV9kYXRhYmFzZSwgIlNFTEVDVCBk
b21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50ZXJhY3Rpb24s
IGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Iik7Ci0gICAgaWYgKHJlY29yZHNUb1BydW5l
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVjb3Jkc1RvUHJ1bmUuYmluZElu
dCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJlY29yZHNU
b1BydW5lID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWluSUQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBpc1ByZXZhbGVu
dCwgbGFzdFNlZW4gTElNSVQgPyJfcyk7CisgICAgaWYgKCFyZWNvcmRzVG9QcnVuZSB8fCByZWNv
cmRzVG9QcnVuZS0+YmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJVEVfT0spIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IGVudHJpZXNUb1BydW5lOwotICAgIHdo
aWxlIChyZWNvcmRzVG9QcnVuZS5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgZW50cmll
c1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLmdldENvbHVtbkludCgwKSk7CisgICAgd2hp
bGUgKHJlY29yZHNUb1BydW5lLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZW50cmll
c1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLT5nZXRDb2x1bW5JbnQoMCkpOwogCiAgICAg
YXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVu
c2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJlZ2luKCksIGVudHJpZXNUb1BydW5l
LmVuZCgpKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcHJ1bmVDb21tYW5kKG1fZGF0YWJhc2Us
IG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJ
TiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOwotICAgIGlmIChwcnVuZUNvbW1hbmQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBwcnVuZUNvbW1hbmQuc3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgYXV0byBwcnVuZUNvbW1hbmQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQobWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklE
IElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7CisgICAgaWYgKCFwcnVuZUNvbW1hbmQgfHwgcHJ1
bmVDb21tYW5kLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTI3MTcsMzUgKzI3MDgsMzMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0IFJlZ2lzdHIKIAogYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0Nv
dW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJh
bWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJGcmFt
ZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291
bnQobV9kYXRhYmFzZSwgY291bnRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVRdWVyeSk7Ci0gICAg
U1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8obV9kYXRhYmFzZSwg
Y291bnRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOworICAgIGF1dG8gc3ViRnJh
bWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvUXVlcnkpOwogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3Vu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFzdWJG
cmFtZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQg
fHwgIXN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIHByZXBh
cmUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJh
bWVDb3VudC5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQuYmluZEludCgy
LCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9tYWluSUQoc3Vi
ZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52
YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUby5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5iaW5kSW50KDIs
IGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKKyAgICBp
ZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJh
bWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJGcmFtZVVuZGVy
VG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50
LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMiwg
ZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZy
YW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFs
dWUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQuc3RlcCgpICE9
IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuc3Rl
cCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
by5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8fCBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQuZ2V0Q29s
dW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuZ2V0Q29sdW1u
SW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5nZXRDb2x1bW5JbnQo
MCkgPT0gMSk7CisgICAgcmV0dXJuIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+Z2V0Q29s
dW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmdldENvbHVt
bkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmdldENvbHVtbklu
dCgwKSA9PSAxKTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kQm9vbGVhbihTdHJpbmdCdWlsZGVy
JiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBib29sIGZsYWcpCkBAIC0yODEyLDI3ICsy
ODAxLDI2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFwcGVu
ZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYKICAgICBpZiAocXVlcnkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGEobV9kYXRh
YmFzZSwgcXVlcnkpOworICAgIGF1dG8gZGF0YSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChxdWVyeSk7CiAgICAgCi0gICAgaWYgKGRhdGEucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBkYXRhLmJpbmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hl
Y2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAg
IGlmICghZGF0YSB8fCBkYXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWlu
Ojp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3Rp
Y0xpc3QuIFN0YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBpZiAoZGF0YS5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoZGF0YS0+
c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAgICAiKTsKICAgICBidWlsZGVyLmFwcGVuZCh0YWJsZU5hbWUpOwog
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOlxuIik7CiAgICAgCi0gICAgYXV0byByZXN1bHQg
PSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRDb2x1bW5JbnQoMCkpOworICAg
IGF1dG8gcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmdldENvbHVt
bkludCgwKSk7CiAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAgICAgCi0g
ICAgd2hpbGUgKGRhdGEuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0ID0g
Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB3
aGlsZSAoZGF0YS0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0ID0gZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAg
IGFwcGVuZE5leHRFbnRyeShidWlsZGVyLCByZXN1bHQpOwogICAgIH0KIH0KQEAgLTI5NDYsMjgg
KzI5MzQsMjYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKIAogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkK
IHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBt
b250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUICog
RlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRo
RGF5IERFU0MgTElNSVQgMSBPRkZTRVQgPzsiX3MpOworICAgIGF1dG8gY291bnRPcGVyYXRpbmdE
YXRlc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5U
KCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsKKyAgICBhdXRvIGdldE1vc3RSZWNlbnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
KiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9u
dGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7CisgICAgYXV0byBnZXRPcGVyYXRpbmdEYXRlV2luZG93
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIE9w
ZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkgREVT
QyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CiAKLSAgICBpZiAoY291bnRPcGVyYXRpbmdEYXRlc1N0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNvdW50T3BlcmF0aW5n
RGF0ZXNTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWNvdW50T3Bl
cmF0aW5nRGF0ZXNTdGF0ZW1lbnQgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVt
ZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fb3BlcmF0aW5nRGF0ZXNT
aXplID0gY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAg
bV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQoMCk7CiAKLSAgICBpZiAoZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBnZXRNb3N0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICghZ2V0TW9z
dFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0Rmlyc3RP
cGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBt
X21vc3RSZWNlbnRPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRNb3N0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAgICBtX21vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlID0gT3BlcmF0aW5nRGF0ZShnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDIpKTsKIAotICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIWdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9w
ZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZh
aWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGggZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0yOTc2
LDI2ICsyOTYyLDI2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpCiAgICAgaWYgKG1fb3BlcmF0aW5nRGF0
ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQogICAgICAgICBtX3Nob3J0
V2luZG93T3BlcmF0aW5nRGF0ZSA9IFdURjo6bnVsbG9wdDsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZEludCgxLCBvcGVyYXRpbmdE
YXRlc1dpbmRvd1Nob3J0IC0gMSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAg
IGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGlu
Z0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQ
YXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIFRoZSBlcnJvciBjb3VsZCBiZSBp
biB0aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRl
ID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVt
bkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSks
IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAgICAg
ICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGlu
Z0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogICAgIH0KIAogICAgIGlmIChtX29wZXJhdGluZ0Rh
dGVzU2l6ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKQogICAgICAgICBtX2xvbmdX
aW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2UgewotICAgICAgICBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnJlc2V0KCk7Ci0gICAgICAgIGlmIChnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5k
b3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgICAgIGlmIChnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93TG9u
ZyAtIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0byBi
aW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUo
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCksIGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgICAgIG1fbG9uZ1dpbmRvd09w
ZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1l
bnQtPmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0
Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMikpOwogICAgIH0KIH0KIApAQCAtMzAxMSwyMSArMjk5NywyMSBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJ
Zk5lY2Vzc2FyeQogCiAgICAgaW50IHJvd3NUb1BydW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUg
LSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAxOwogICAgIGlmIChyb3dzVG9QcnVuZSA+IDAp
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKLSAgICAgICAgaWYgKGRlbGV0
ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQu
YmluZEludCgxLCByb3dzVG9QcnVuZSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBkZWxl
dGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIGF1dG8gZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcGVyYXRpbmdEYXRl
cyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3MpOworICAgICAgICBp
ZiAoIWRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAgICAgICAg
fHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIHJv
d3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZh
aWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBPUiBJR05PUkUgSU5U
TyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsi
X3MpOwotICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50
KDEsIHRvZGF5LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQuYmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDMsIHRvZGF5Lm1v
bnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/
LCA/LCA/OyJfcyk7CisgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAg
ICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgdG9kYXkueWVh
cigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5z
ZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0b2RheS5tb250aERheSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zMDY5LDE2ICszMDU1LDE2IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNG
b3JUZXN0aW5nKGNvbnN0CiAgICAgICAgIGRheXNBZ29JblNlY29uZHMgPSBXYWxsVGltZTo6bm93
KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIC0gZGF5c1RvU3VidHJhY3Q7CiAgICAgICAg
IGF1dG8gZGF0ZVRvSW5zZXJ0ID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1l
Ojpmcm9tUmF3U2Vjb25kcyhkYXlzQWdvSW5TZWNvbmRzKSk7CiAKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBP
UiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxF
Q1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMiwg
ZGF0ZVRvSW5zZXJ0Lm1vbnRoKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/
LCA/LCA/OyJfcyk7CisgICAgICAgIGlmICghaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAor
ICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCBk
YXRlVG9JbnNlcnQueWVhcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZGF0ZVRvSW5zZXJ0Lm1vbnRoKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
YmluZEludCgzLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBp
cmVkU3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxl
ZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5yZXNl
dCgpOworICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5yZXNldCgpOwogICAg
IH0KIAogICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOwpAQCAtMzIwMSwzNiAr
MzE4NywzNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNl
cnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChQcml2YXRlQwogICAgICAgICAvLyBXZSBzaG91bGQg
bmV2ZXIgYmUgaW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgcHJpdmF0ZSBjbGljayBtZWFzdXJlbWVu
dCB2YWx1ZSBpbnRvIHRoZSBkYXRhYmFzZSB3aXRob3V0IHZhbGlkIHJlcG9ydCB0aW1lcy4KICAg
ICAgICAgQVNTRVJUKHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCAhPSAtMSAmJiBkZXN0aW5hdGlv
bkVhcmxpZXN0VGltZVRvU2VuZCAhPSAtMSk7CiAKLSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBT
UUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNl
Y29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgyLCAq
YXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoNCwgYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQu
YmluZERvdWJsZSg2LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBv
Y2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5k
RG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDksIHNvdXJjZVVubGlu
a2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZFRleHQoMTAsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+
a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2Vu
ZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgx
LCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9u
LnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg2LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENs
aWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg3LCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg4LCBzb3Vy
Y2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJM
IDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDksIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tl
bi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBzb3VyY2VVbmxpbmthYmxlVG9rZW4g
PyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoMTEsIGRl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0
QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBzdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHN0YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNv
bmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgzLCBhdHRyaWJ1
dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJp
bmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg1
LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFz
ZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVu
dC5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9r
ZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNywgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1l
bnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmlidXRp
b25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRD
bGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IHN0YXRlbWVudC0+YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVU
b2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlT
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywg
c291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2
NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9B
TExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0VW5hdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzQzNSwxNCArMzQyMSwxNCBAQCBTdHJpbmcgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0aW9uVG9TdHJpbmcoV2Vi
Q29yZTo6U1FMaXRlUwogCiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcoKQogewotICAgIFNRTGl0ZVN0YXRl
bWVudCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMobV9kYXRhYmFzZSwgIlNFTEVD
VCAoU0VMRUNUIENPVU5UKCopIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQpIGFzIGNudDEsIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQpIGFzIGNudDIiX3MpOwotICAgIGlmIChwcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dERhdGFFeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudERhdGFFeGlzdHMuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBhdXRvIHByaXZhdGVD
bGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7CisgICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFz
dXJlbWVudERhdGFFeGlzdHMgfHwgcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3Jr
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRUb1N0cmluZyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmICgh
cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLmdldENvbHVtbkludCgwKSAmJiAhcHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLmdldENvbHVtbkludCgxKSkKKyAgICBpZiAo
IXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0Q29sdW1uSW50KDApICYmICFw
cml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmdldENvbHVtbkludCgxKSkKICAgICAg
ICAgcmV0dXJuICJcbk5vIHN0b3JlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50IGRhdGEuXG4i
X3M7CiAKICAgICBhdXRvIHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmli
dXRpb25zU3RhdGVtZW50LCBhbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0
dHJpYnV0aW9uc1F1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyJfcyk7CkBA
IC0zNTczLDExICszNTU5LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVDCiAgICAgaWYgKGRl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIHx8IHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyQXR0cmlidXRlZFN0
YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5i
aW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBj
bGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuYmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0
aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50CisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgxLCAq
c291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1
dGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclNl
bnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzU4NywxOCArMzU3MywxNyBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50cwogewogICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBXYWxsVGlt
ZTo6bm93KCkgLSAxX2g7CiAKLSAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3Rh
dGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9ID8i
KTsKLSAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBT
UUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIik7
CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Il9zKTsKKyAgICBhdXRvIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VU
IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIl9zKTsKIAotICAgIGlmIChl
YXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LmJpbmRJbnQo
MSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJj
ZVN0YXRlbWVudAorICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVu
dC0+YmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhw
aXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KIAotICAgIGlmIChlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9T
ZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBp
ZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwgZWFybGllc3RU
aW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2UuY3BwCmluZGV4IDUyMzIzM2QxOGIwNDAwM2VmMzBkMzM2MzJjZmU2MmYwMmYyN2EzNDgu
LjNhNjVmY2NlZjE4OWYwN2M4OTE2NWE5YzYyMjdhNWNhZDE0MDcwMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IGNoYXIgZ2V0SXRlbXNR
dWVyeVN0cmluZ1tdID0gIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIjsKK3N0YXRp
YyBjb25zdCBBU0NJSUxpdGVyYWwgZ2V0SXRlbXNRdWVyeVN0cmluZyB7ICJTRUxFQ1Qga2V5LCB2
YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyB9OwogCiBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUoU3RyaW5nJiYgZGF0YWJhc2VQYXRoLCB1bnNpZ25l
ZCBxdW90YUluQnl0ZXMpCiB7CkBAIC05OSwxMCArOTksMTAgQEAgYm9vbCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCkKICAgICBpZiAoIW1fZGF0YWJhc2Uu
dGFibGVFeGlzdHMoIkl0ZW1UYWJsZSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRh
YmxlIExJTUlUIDEiKTsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAKICAgICAvLyBU
aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQsIGl0J3MganVzdCB1c2VkIHRvIGNoZWNrIHRo
ZSBjb2x1bW4gdHlwZS4KLSAgICBpZiAocXVlcnkuaXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkK
KyAgICBpZiAocXVlcnkgJiYgcXVlcnktPmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJp
Z2h0IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0
aGUgbmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJsZS4KQEAgLTMwMiwxOSArMzAyLDE4IEBAIGJv
b2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0CiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1U
YWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0
byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCopIEZS
T00gSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHJlc3VsdCA9
IHF1ZXJ5LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAo
cXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiTm8gcmVz
dWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwg
c3RvcmFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuICFx
dWVyeS5nZXRDb2x1bW5JbnQoMCk7CisgICAgcmV0dXJuICFxdWVyeS0+Z2V0Q29sdW1uSW50KDAp
OwogfQogCiB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZygpCkBAIC0z
MzAsMTQgKzMyOSwxNSBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGlu
ZygpCiAgICAgICAgIHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1zU3RhdGVtZW50LCBnZXRJdGVt
c1F1ZXJ5U3RyaW5nKTsKIH0KIAotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgTG9jYWxT
dG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3Rh
dGVtZW50PiYgc3RhdGVtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAorU1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVu
dChzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVy
YWwgcXVlcnkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgICAgICBhdXRvIHN0YXRlbWVudE9yRXJyb3IgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFw
U3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnRPckVycm9yKQogICAgICAg
ICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICAgICAg
c3RhdGVtZW50ID0gc3RhdGVtZW50T3JFcnJvci52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgfQogICAgIHJldHVybiBT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQoKSB9OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3Rv
cmFnZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaAppbmRleCBiN2VmMDM0ZDJhODZjMjRiZDA0ZGY3OTQzMTdj
YWJhZmMwM2U3NDZjLi4zOThkYTdkY2ZiMjhkZDMwZDJlNjBhNTE0ZGRlOWIxOWQ1NTM2MjI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7CiAgICAgYm9vbCBkYXRhYmFzZUlz
RW1wdHkoKSBjb25zdDsKIAotICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PiYsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3Q7CiAKICAg
ICBTdHJpbmcgbV9kYXRhYmFzZVBhdGg7CiAgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVEYXRh
YmFzZSBtX2RhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L0ljb25EYXRhYmFzZS5jcHAKaW5kZXggMzM5NjAyYTQ5ZjExNDNkOWZmZTQ2MzA1YWIxYWQ5OWE2
ODc0Y2I2My4uNjUwODg2ZWU1NjYxNjIwYjg4MzBhNjM1MDZiOTdmMzQ0MGQ3Zjc4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCkBA
IC02Niw3ICs2Niw4IEBAIEljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYg
cGF0aCwgQWxsb3dEYXRhYmFzZVdyaXRlIGFsbG93RGF0YWJhc2VXCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbk51bWJlciA9IFNR
TGl0ZVN0YXRlbWVudChtX2RiLCAiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBX
SEVSRSBrZXkgPSAnVmVyc2lvbic7IikuZ2V0Q29sdW1uSW50KDApOworICAgICAgICBhdXRvIHZl
cnNpb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9N
IEljb25EYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ1ZlcnNpb24nOyJfcyk7CisgICAgICAgIGF1
dG8gZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0
ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgICAgIGlmIChkYXRhYmFzZVZlcnNpb25O
dW1iZXIgPiBjdXJyZW50RGF0YWJhc2VWZXJzaW9uKSB7CiAgICAgICAgICAgICBMT0coSWNvbkRh
dGFiYXNlLCAiRGF0YWJhc2UgdmVyc2lvbiBudW1iZXIgJWQgaXMgZ3JlYXRlciB0aGFuIG91ciBj
dXJyZW50IHZlcnNpb24gbnVtYmVyICVkIC0gY2xvc2luZyB0aGUgZGF0YWJhc2UgdG8gcHJldmVu
dCBvdmVyd3JpdGluZyBuZXdlciB2ZXJzaW9ucyIsCiAgICAgICAgICAgICAgICAgZGF0YWJhc2VW
ZXJzaW9uTnVtYmVyLCBjdXJyZW50RGF0YWJhc2VWZXJzaW9uKTsKQEAgLTg0LDcgKzg1LDcgQEAg
SWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFi
YXNlV3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlZHVjZSBz
cWxpdGUgUkFNIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IDIwMDAgcGFnZXMgKH4xLjVrQiBwZXIg
cGFnZSkuIDNNQiBvZiBjYWNoZSBmb3IgaWNvbiBkYXRhYmFzZSBpcyBvdmVya2lsbC4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50KG1fZGIsICJQUkFHTUEgY2FjaGVfc2l6ZSA9IDIwMDsiKS5leGVj
dXRlQ29tbWFuZCgpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgY2FjaGVf
c2l6ZSA9IDIwMDsiX3MpOwogCiAgICAgICAgIGlmIChhbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxs
b3dEYXRhYmFzZVdyaXRlOjpZZXMpIHsKICAgICAgICAgICAgIG1fcHJ1bmVUaW1lciA9IG1ha2VV
bmlxdWU8UnVuTG9vcDo6VGltZXI8SWNvbkRhdGFiYXNlPj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0
aGlzLCAmSWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOwpAQCAtMTc1LDE3ICsxNzYsMTcg
QEAgdm9pZCBJY29uRGF0YWJhc2U6OnBvcHVsYXRlUGFnZVVSTFRvSWNvblVSTE1hcCgpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbXBvcnRRdWVyeSA9IG1ha2VTdHJpbmcoIlNFTEVD
VCBQYWdlVVJMLnVybCwgSWNvbkluZm8udXJsLCBJY29uSW5mby5zdGFtcCBGUk9NIFBhZ2VVUkwg
SU5ORVIgSk9JTiBJY29uSW5mbyBPTiBQYWdlVVJMLmljb25JRD1JY29uSW5mby5pY29uSUQgV0hF
UkUgSWNvbkluZm8uc3RhbXAgPiAiLCBmbG9vcigoV2FsbFRpbWU6Om5vdygpIC0gbm90VXNlZElj
b25FeHBpcmF0aW9uVGltZSkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpLCAnOycpOwot
ICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBpbXBvcnRRdWVyeSk7Ci0gICAgaWYgKHF1
ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYi5wcmVw
YXJlU3RhdGVtZW50KGltcG9ydFF1ZXJ5KTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgaWNvbiB1cmwgaW1wb3J0IHF1ZXJ5Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVy
KG1fcGFnZVVSTFRvSWNvblVSTE1hcExvY2spOwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICBtX3BhZ2VVUkxUb0ljb25VUkxNYXAuc2V0KHF1ZXJ5LmdldENvbHVt
blRleHQoMCksIHF1ZXJ5LmdldENvbHVtblRleHQoMSkpOwotICAgICAgICByZXN1bHQgPSBxdWVy
eS5zdGVwKCk7CisgICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnktPmdldENv
bHVtblRleHQoMCksIHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgcmVzdWx0ID0g
cXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBzdGFydFBydW5lVGltZXIoKTsKQEAgLTIxNCwx
MiArMjE1LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQoKQogICAgIEFT
U0VSVChtX2RiLmlzT3BlbigpKTsKIAogICAgIGlmICghbV9wcnVuZUljb25zU3RhdGVtZW50KSB7
Ci0gICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8pOyIpOwot
ICAgICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gcHJ1bmVJY29uc1N0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBT
dGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIHN0YW1wIDw9ICg/KTsiX3MpOwor
ICAgICAgICBpZiAoIXBydW5lSWNvbnNTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiUHJlcGFyaW5nIHN0YXRlbWVudCBwcnVuZUljb25zIGZhaWxlZCIpOwotICAgICAgICAgICAg
bV9wcnVuZUljb25zU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBwcnVuZUljb25zU3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJ1bmVJ
Y29uc1N0YXRlbWVudC0+YmluZEludDY0KDEsIGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBub3RV
c2VkSWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSkpICE9
IFNRTElURV9PSykgewpAQCAtMjMwLDggKzIzMSw4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwcnVu
ZVRpbWVyRmlyZWQoKQogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGIpOwog
ICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgaWYgKG1fcHJ1bmVJY29uc1N0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRF
TEVURSBGUk9NIEljb25EYXRhIFdIRVJFIGljb25JRCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJP
TSBJY29uSW5mbyk7Iik7Ci0gICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9N
IFBhZ2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZv
KTsiKTsKKyAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEg
V0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiX3MpOwor
ICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIGlj
b25JRCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Il9zKTsKICAgICB9CiAg
ICAgbV9wcnVuZUljb25zU3RhdGVtZW50LT5yZXNldCgpOwogCkBAIC0yODUsMTIgKzI4NiwxMiBA
QCBPcHRpb25hbDxpbnQ2NF90PiBJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwoY29uc3Qg
U3RyaW5nJiBpY29uVVJMLCBib29sJiBleAogICAgIEFTU0VSVChtX2RiLmlzT3BlbigpKTsKIAog
ICAgIGlmICghbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50KSB7Ci0gICAgICAgIG1faWNvbklE
Rm9ySWNvblVSTFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAi
U0VMRUNUIEljb25JbmZvLmljb25JRCwgSWNvbkluZm8uc3RhbXAgRlJPTSBJY29uSW5mbyBXSEVS
RSBJY29uSW5mby51cmwgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2ljb25JREZvckljb25VUkxT
dGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBpY29uSURG
b3JJY29uVVJMU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIElj
b25JbmZvLmljb25JRCwgSWNvbkluZm8uc3RhbXAgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5m
by51cmwgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uSURGb3JJY29uVVJMU3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgaWNvbklERm9y
SWNvblVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVu
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CisgICAgICAgIG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9IGljb25JREZvckljb25VUkxT
dGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9p
Y29uSURGb3JJY29uVVJMU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBTUUxJVEVf
T0spIHsKQEAgLTMxNSwxMiArMzE2LDEyIEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpzZXRJY29uSURG
b3JQYWdlVVJMKGludDY0X3QgaWNvbklELCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCiAgICAgQVNT
RVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAog
ICAgIGlmICghbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fc2V0
SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50Piht
X2RiLCAiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29uSUQpIFZBTFVFUyAoKD8pLCA/KTsi
KTsKLSAgICAgICAgaWYgKG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHNldEljb25JREZvclBhZ2VVUkxTdGF0ZW1l
bnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmws
IGljb25JRCkgVkFMVUVTICgoPyksID8pOyJfcyk7CisgICAgICAgIGlmICghc2V0SWNvbklERm9y
UGFnZVVSTFN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3Rh
dGVtZW50IHNldEljb25JREZvclBhZ2VVUkwgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX3NldElj
b25JREZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9
IHNldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
ICAgICB9CiAKICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBwYWdlVVJMKSAhPSBTUUxJVEVfT0sKQEAgLTM0MiwxMiArMzQzLDEyIEBAIFZlY3Rvcjxj
aGFyPiBJY29uRGF0YWJhc2U6Omljb25EYXRhKGludDY0X3QgaWNvbklEKQogICAgIEFTU0VSVCht
X2RiLmlzT3BlbigpKTsKIAogICAgIGlmICghbV9pY29uRGF0YVN0YXRlbWVudCkgewotICAgICAg
ICBtX2ljb25EYXRhU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIs
ICJTRUxFQ1QgSWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25J
RCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBpY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJl
cGFyZUhlYXBTdGF0ZW1lbnQoIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRhdGEgV0hF
UkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghaWNvbkRhdGFTdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBpY29u
RGF0YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRy
OwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQorICAgICAgICBtX2ljb25EYXRh
U3RhdGVtZW50ID0gaWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
ICAgICB9CiAKICAgICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25J
RCkgIT0gU1FMSVRFX09LKSB7CkBAIC0zNzAsMjAgKzM3MSwyMCBAQCBPcHRpb25hbDxpbnQ2NF90
PiBJY29uRGF0YWJhc2U6OmFkZEljb24oY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBWZWN0
b3I8Y2hhcgogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNl
V3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fYWRkSWNvblN0YXRlbWVudCkgewotICAgICAgICBt
X2FkZEljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklO
U0VSVCBJTlRPIEljb25JbmZvICh1cmwsIHN0YW1wKSBWQUxVRVMgKD8sIDApOyIpOwotICAgICAg
ICBpZiAobV9hZGRJY29uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIGF1dG8gYWRkSWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIEljb25JbmZvICh1cmwsIHN0YW1wKSBWQUxVRVMgKD8sIDApOyJfcyk7CisgICAg
ICAgIGlmICghYWRkSWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVw
YXJpbmcgc3RhdGVtZW50IGFkZEljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2FkZEljb25T
dGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICAgICAgfQorICAgICAgICBtX2FkZEljb25TdGF0ZW1lbnQgPSBhZGRJY29uU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9hZGRJY29uRGF0YVN0
YXRlbWVudCkgewotICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxT
UUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBJY29uRGF0YSAoaWNvbklELCBkYXRh
KSBWQUxVRVMgKD8sID8pOyIpOwotICAgICAgICBpZiAobV9hZGRJY29uRGF0YVN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGFkZEljb25EYXRhU3RhdGVt
ZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkRhdGEgKGlj
b25JRCwgZGF0YSkgVkFMVUVTICg/LCA/KTsiX3MpOworICAgICAgICBpZiAoIWFkZEljb25EYXRh
U3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQg
YWRkSWNvbkRhdGEgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0K
KyAgICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IGFkZEljb25EYXRhU3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fYWRkSWNvblN0YXRl
bWVudC0+YmluZFRleHQoMSwgaWNvblVSTCkgIT0gU1FMSVRFX09LKSB7CkBAIC00MTMsMTIgKzQx
NCwxMiBAQCB2b2lkIEljb25EYXRhYmFzZTo6dXBkYXRlSWNvblRpbWVzdGFtcChpbnQ2NF90IGlj
b25JRCwgaW50NjRfdCB0aW1lc3RhbXApCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRl
ID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV91cGRhdGVJY29uVGlt
ZXN0YW1wU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVu
dCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiVVBEQVRFIEljb25JbmZvIFNF
VCBzdGFtcCA9ID8gV0hFUkUgaWNvbklEID0gPzsiKTsKLSAgICAgICAgaWYgKG1fdXBkYXRlSWNv
blRpbWVzdGFtcFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBh
dXRvIHVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyJfcyk7
CisgICAgICAgIGlmICghdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHVwZGF0ZUljb25UaW1lc3RhbXAgZmFp
bGVkIik7Ci0gICAgICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBudWxs
cHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fdXBkYXRlSWNv
blRpbWVzdGFtcFN0YXRlbWVudCA9IHVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQudmFsdWUo
KS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV91cGRhdGVJY29uVGltZXN0
YW1wU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgdGltZXN0YW1wKSAhPSBTUUxJVEVfT0sgfHwgbV91
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgaWNvbklEKSAhPSBTUUxJ
VEVfT0spIHsKQEAgLTQzNywyOCArNDM4LDI4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpkZWxldGVJ
Y29uKGludDY0X3QgaWNvbklEKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBB
bGxvd0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fZGVsZXRlUGFnZVVSTHNGb3JJ
Y29uU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBQYWdlVVJM
IFdIRVJFIFBhZ2VVUkwuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVQYWdl
VVJMc0Zvckljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
YXV0byBkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIFBhZ2VVUkwuaWNvbklEID0gKD8pOyJf
cyk7CisgICAgICAgIGlmICghZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50KSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlUGFnZVVSTHNGb3JJ
Y29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1l
bnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1f
ZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0gZGVsZXRlUGFnZVVSTHNGb3JJY29uU3Rh
dGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9kZWxl
dGVJY29uRGF0YVN0YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uRGF0
YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZUlj
b25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8g
ZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxF
VEUgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAg
ICAgaWYgKCFkZWxldGVJY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJQcmVwYXJpbmcgc3RhdGVtZW50IGRlbGV0ZUljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBt
X2RlbGV0ZUljb25EYXRhU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQorICAgICAgICBtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50ID0gZGVsZXRlSWNv
bkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYg
KCFtX2RlbGV0ZUljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5m
byBXSEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZUlj
b25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxl
dGVJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00g
SWNvbkluZm8gV0hFUkUgSWNvbkluZm8uaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICgh
ZGVsZXRlSWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcg
c3RhdGVtZW50IGRlbGV0ZUljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0ZUljb25T
dGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAg
ICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IGRlbGV0ZUljb25TdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9kZWxldGVQYWdlVVJMc0Zvcklj
b25TdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBpY29uSUQpICE9IFNRTElURV9PSwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCBjZTVjMjli
YWE1ODA1Y2E0MmY0OGVmMDUwYjgzMmQwY2Q1Y2NlMTFjLi5jYWUwODJmMTNkY2QzNjhjNDgxOTVi
ZTMxMWYyMGE1YjY2NDQ4ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3Jh
Z2UvU3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcApAQCAtMjc4LDkgKzI3OCw5IEBAIHZvaWQgU3RvcmFnZUFyZWFT
eW5jOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICB7
Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVl
IEZST00gSXRlbVRhYmxlIExJTUlUIDEiKTsKKyAgICAgICAgYXV0byBxdWVyeSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIExJTUlUIDEi
X3MpOwogICAgICAgICAvLyB0aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQuCi0gICAgICAg
IGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgICAgICBpZiAocXVlcnkg
JiYgcXVlcnktPmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0zMjYsOCArMzI2LDggQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZv
cm1JbXBvcnQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOwot
ICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBxdWVyeSA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVt
VGFibGUiX3MpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAg
ICAgIG1hcmtJbXBvcnRlZCgpOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsMTAgKzMzNSwxMCBA
QCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAKICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBpdGVtTWFwOwogCi0gICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsK
KyAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwg
cXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnku
c3RlcCgpOworICAgICAgICBpdGVtTWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVl
cnktPmdldENvbHVtbkJsb2JBc1N0cmluZygxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5z
dGVwKCk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDEy
LDI3ICs0MTIsMjcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1z
LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKIAogICAgIC8vIElmIHRoZSBj
bGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3
cml0ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsK
LSAgICAgICAgaWYgKGNsZWFyLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBjbGVhciA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gSXRlbVRh
YmxlIl9zKTsKKyAgICAgICAgaWYgKCFjbGVhcikgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHJlc3VsdCA9IGNsZWFyLnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IGNs
ZWFyLT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGluc2VydC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIl9zKTsK
KyAgICBpZiAoIWluc2VydCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJl
IGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFz
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlbW92
ZShtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Ci0gICAg
aWYgKHJlbW92ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byByZW1vdmUgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBr
ZXk9PyJfcyk7CisgICAgaWYgKCFyZW1vdmUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ0MywyMSArNDQzLDIx
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAg
ICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVs
bC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4g
aW5zZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQt
PnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBhdXRvJiBxdWVyeSA9
IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBxdWVyeS5i
aW5kVGV4dCgxLCBpdC0+a2V5KTsKKyAgICAgICAgcXVlcnktPmJpbmRUZXh0KDEsIGl0LT5rZXkp
OwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdlJ3Jl
IGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCiAgICAgICAgIGlmICgh
aXQtPnZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcXVlcnkuYmluZEJsb2IoMiwgaXQtPnZh
bHVlKTsKKyAgICAgICAgICAgIHF1ZXJ5LT5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCi0gICAg
ICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBxdWVy
eS0+c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFn
ZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKLSAgICAgICAgcXVlcnkucmVzZXQoKTsKKyAgICAgICAgcXVlcnktPnJlc2V0KCk7CiAgICAg
fQogICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQpAQCAtNDk5LDMxICs0OTksMzMgQEAgdm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UoKQogICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBp
ZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3Jh
Z2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIGNvdW50ID0gWyZdIHsKKyAg
ICAgICAgYXV0byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICAgICAgaWYgKCFxdWVyeSkgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRh
YmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
IH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMg
d2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3Jh
Z2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCi0gICAgaW50IHJlc3Vs
dCA9IHF1ZXJ5LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4g
SXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgIHJldHVybiBxdWVyeS0+Z2V0
Q29sdW1uSW50KDApOworICAgIH0oKTsKKyAgICBpZiAoY291bnQpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAKLSAgICBpbnQgY291bnQgPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgaWYg
KCFjb3VudCkgewotICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwotICAgICAgICBtX2RhdGFiYXNl
LmNsb3NlKCk7Ci0gICAgICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRpZmllciA9
IG1fZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgICAgICAgICAg
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihkYXRh
YmFzZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRh
YmFzZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGlmICghRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmlsZSAlc1xuIiwgZGF0YWJhc2VG
aWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfQorICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKKyAgICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7CisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRpZmllciA9IG1fZGF0YWJhc2VJZGVu
dGlmaWVyLmlzb2xhdGVkQ29weSgpXSB7CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcik7Cisg
ICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1l
ID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZp
ZXIpOworICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGF0YWJhc2VGaWxlbmFt
ZSkpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmls
ZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCmluZGV4IDgz
NjA0NzFiZTNlNDE3YWE1MDc2NWQ5YTY5Y2Q2NGExZTc2YmJiYmQuLmE5ZWFiM2M4YmU4NTczYzQ2
YmI4MmYyNzc0ZjUyNjMwZWEwNzdhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
U3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcApAQCAtMTg5LDggKzE4OSw4IEBAIHZvaWQgU3RvcmFnZVRy
YWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgIGlmIChtX2RhdGFi
YXNlLmlzT3BlbigpKSB7CiAgICAgICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7
Ci0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgICAgICBpZiAoIXN0YXRlbWVu
dCkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVt
ZW50LiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTE5OSw4
ICsxOTksOCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmll
cnMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpCi0gICAgICAgICAg
ICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKS5pc29s
YXRlZENvcHkoKSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQu
YWRkKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKQEAgLTMxNiwxNiArMzE2LDE2IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRP
cmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVT
ICg/LCA/KSIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
SU5UTyBPcmlnaW5zIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUg
dHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfSAKICAgICAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7CiAgICAgCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpCisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KQogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4g
dGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKIAogICAgIHsK
QEAgLTQwNCwyMyArNDA0LDIzIEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxP
cmlnaW5zKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
b3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaW50IHJlc3VsdDsK
LSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsK
LSAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KQorICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0
KDApKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSk7CiAKICAgICAgICAgewogICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jbGllbnRNdXRleCk7CiAgICAgICAgICAgICBp
ZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTQ0MSwxMiArNDQxLDEyIEBAIHZvaWQgU3Rv
cmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKCkKICAgICAgICAgb3BlblRyYWNrZXJE
YXRhYmFzZShmYWxzZSk7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudCht
X2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoZGVsZXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxldGVTdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdpbnMi
X3MpOworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4ZWN1dGVD
b21tYW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVs
ZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNTE5LDEzICs1MTksMTMgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdp
bihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
REVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyIpOwotICAgIGlmIChkZWxldGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudCkgewogICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2lu
SWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
ZGVsZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICgh
ZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBkZWxldGVTdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50
LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1
dGUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxNCwxNyArNjE0LDE3IEBAIFN0cmlu
ZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllcikKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3Vu
dGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8i
KTsKLSAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBwYXRoU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
cGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghcGF0aFN0YXRl
bWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVjdGlvbiBv
ZiBwYXRoIGZvciBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkp
OwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIHBhdGhTdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1l
bnQuc3RlcCgpOworICAgIHBhdGhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZp
ZXIpOworICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1
cm4gcGF0aFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHJldHVybiBwYXRoU3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDApOwogfQogICAgIAogbG9uZyBsb25nIFN0b3JhZ2VUcmFja2Vy
OjpkaXNrVXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzY2E0M2ZmNmY0NzVhZjgx
YzkwZTlmOTQ0ZTQ0YWY1MTYzM2IyMjU1Li45YmQxMDgyZGRhOTE3NzNjZTAwNzM5YTE2MmQxMjg4
NmYzOWJiOGVmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQg
Y3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRh
YmFzZSAmIFNRTGl0ZVN0YXRlbWVudCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNl
IG1vcmUgQVNDSUlMaXRlcmFscy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6YWRkVG9EYXRhYmFzZXNUYWJsZSk6CisKIDIwMjEtMDUtMTMgIEFha2FzaCBKYWluICA8YWFr
YXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIHJlcG9ydC1ub24taW5jbHVzaXZlLWxhbmd1
YWdlIHNob3VsZCBza2lwIHN5bWxpbmtzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tCmluZGV4
IDY2ODJiZjQ1ODY2NjExNTUzZjEwYTE3ZTcyYTcyOWVjYWE2OTU4YzQuLjJjN2Y0NDRlOGJjOGFl
YjkwNmMwYmI5MGE2OWI5NTUzYzcxODEzMTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1t
CkBAIC02NiwxMiArNjYsMTIgQEAgc3RhdGljIHZvaWQgYWRkVG9EYXRhYmFzZXNUYWJsZShjb25z
dCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgY29uc3QgU2VjdXJpdHlPcmlnaW4KICAgICBTUUxpdGVE
YXRhYmFzZSBkYXRhYmFzZTsKICAgICBkYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCk7CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgYWRkRGF0YWJhc2VTdGF0ZW1lbnQoZGF0YWJhc2UsICJJTlNFUlQg
SU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/KTsiKTsK
LSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0
ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBhZGRE
YXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBuZXdEYXRhYmFzZU5hbWUpOwotICAgIGFkZERh
dGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDMsIG5ld0RhdGFiYXNlUGF0aCk7Ci0gICAgYWRkRGF0
YWJhc2VTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICBpZiAoYXV0byBhZGREYXRhYmFz
ZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFi
YXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcykpIHsKKyAgICAg
ICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuZXdE
YXRhYmFzZU5hbWUpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMywg
bmV3RGF0YWJhc2VQYXRoKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmV4ZWN1dGVD
b21tYW5kKCk7CisgICAgfQogCiAgICAgZGF0YWJhc2UuY2xvc2UoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428620</attachid>
            <date>2021-05-14 07:23:18 -0700</date>
            <delta_ts>2021-05-14 09:38:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210514072317.patch</filename>
            <type>text/plain</type>
            <size>269262</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAwMWMyZDQ2MjA0ZGUxYjAyZDc3MTFj
NzE4ODk4NWRjNTU1NDQ0NmIuLjViOWFiMTMyMDYyODczMGM2MTg0ZmZiNWNmYmU1ZTkzN2QzMGIy
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xMyAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYlhSXSBBbGxvdyBXZWJYUiB0byBiZSB0ZXN0
ZWQgb24gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwZTM0NGVhYmNjNWZjM2UwMjA3
MmQ1NTgzNWE0YTFjNjE2NzUwYS4uM2M4Mjk1M2Q1ZGUwODczNGQ3NGFlNTY3ZTg3NmI1YWZmNWQ3
ZjA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNR
TGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0
ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb246CisgICAgICAgIC0gVGhlIFNRTGl0
ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBub3cgcHJpdmF0ZSBzbyB0aGF0IHdlIG5ldmVyIGhh
dmUgYQorICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCB0aGF0IGhhcyBub3QgYmVlbiAicHJlcGFy
ZWQiLiBPbmx5IHRoZSBTUUxpdGVEYXRhYmFzZQorICAgICAgICAgIGNhbiBub3cgY29uc3RydWN0
IFNRTGl0ZVN0YXRlbWVudCBvYmplY3RzLiBXZSBhbHJlYWR5IG5lZWRlZCB0byBwYXNzCisgICAg
ICAgICAgYSBTUUxpdGVEYXRhYmFzZSByZWZlcmVuY2Ugd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFNR
TGl0ZVN0YXRlbWVudCBhbnl3YXkuCisgICAgICAgIC0gVGhlIGNvbnN0cnVjdCBBTkQgcHJlcGFy
ZSBhIFNRTGl0ZVN0YXRlbWVudCwgd2Ugbm93IGNhbGwKKyAgICAgICAgICBTUUxpdGVEYXRhYmFz
ZTo6cHJlcGFyZVN0YXRlbWVudCgpIHRvIGdldCBhIHN0YWNrIG9iamVjdCBvcgorICAgICAgICAg
IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudCgpIHRvIGdldCBhIGhlYXAgb25l
LiBUaGVzZSBmdW5jdGlvbnMKKyAgICAgICAgICByZXR1cm4gYW4gRXhwZWN0ZWQ8PiB0eXBlIHNv
IHRoZXkgd2lsbCBlaXRoZXIgcmV0dXJuIGEgInByZXBhcmVkIgorICAgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBvciBhbiB1bmV4cGVjdGVkIFNRTGl0ZSBlcnJvciBjb2RlLgorICAgICAgICAtIFRo
ZSBwcmVwYXJlKlN0YXRlbWVudCgpIGZ1bmN0aW9ucyBub3cgYXZvaWQgU3RyaW5nIGFsbG9jYXRp
b25zIGluIG1vc3QKKyAgICAgICAgICBjYXNlcyB0aGFua3MgdG8gb3ZlcmxvYWRzIHRha2luZyBp
biB0aGUgcXVlcnkgYXMgYW4gQVNDSUlMaXRlcmFsLgorICAgICAgICAtIERyb3AgZmluYWxpemUo
KSBmdW5jdGlvbiBvbiBTUUxpdGVTdGF0ZW1lbnQgc28gU1FMaXRlU3RhdGVtZW50IG9iamVjdHMK
KyAgICAgICAgICBhcmUgYWx3YXlzIHZhbGlkLiBJdCBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBTUUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgICBtZW1iZXIgZnVuY3Rpb25zLiBUaGUg
U1FMaXRlU3RhdGVtZW50IGRlc3RydWN0b3IgImZpbmFsaXplcyIgdGhlIHN0YXRlbWVudAorICAg
ICAgICAgIHNvIHVzZXJzIGNhbiBzaW1wbHkgZGVzdHJveSB0aGUgU1FMaXRlU3RhdGVtZW50IGlm
IHRoZXkgbmVlZCB0aGUgb2JqZWN0CisgICAgICAgICAgdG8gYmUgZmluYWxpemUgYXQgYSBjZXJ0
YWluIHBvaW50IChlLmcuIGJlZm9yZSBjbG9zaW5nIGEgZGF0YWJhc2UpLgorICAgICAgICAtIERy
b3AgdGhlIHByZXBhcmUoKSAmIHByZXBhcmVBbmRTdGVwKCkgU1FMaXRlU3RhdGVtZW50IG1lbWJl
ciBmdW5jdGlvbnMgbm93CisgICAgICAgICAgdGhhdCBTUUxpdGVTdGF0ZW1lbnQgYXJlIGFsd2F5
cyBwcmVwYXJlZC4KKyAgICAgICAgLSBTdG9wIHN0b3JpbmcgdGhlIFNRTCBxdWVyeSBhcyBhIFN0
cmluZyBkYXRhIG1lbWJlciBpbiBTUUxpdGVTdGF0ZW1lbnQgY2xhc3MuCisgICAgICAgICAgVGhp
cyBpcyBubyBsb25nZXIgbmVlZGVkIG5vdyB0aGF0IHRoZXkgaXMgbm8gc2VwYXJlIHByZXBhcmUg
c3RlcCBhZnRlciB0aGUKKyAgICAgICAgICBjb25zdHJ1Y3Rpb24uIFRoaXMgbWFrZXMgdGhlIFNR
TGl0ZVN0YXRlbWVudCBhIGJpdCBzbWFsbGVyLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OmNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxp
ZEJsb2JUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNv
cmRzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRl
SW5pdGlhbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUlu
ZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
eHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpb25Gcm9tRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVn
aW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0YXRlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRB
bmRSZWJpbmRQcmVJbmRleFN0YXRlbWVudElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEZldGNoTmV4dFJlY29yZCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZl
VGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVy
Zm9ybUdldFRhYmxlTmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzRW50
cnlGb3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpo
YXNFbnRyeUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRh
YmFzZU5hbWVzTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGV0
YWlsc0Zvck5hbWVBbmRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpzZXREYXRhYmFzZURldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpxdW90YU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1
b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGVJZkVt
cHR5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUpOgorICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXApOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNr
Q2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVSZW1haW5pbmdTaXplRm9y
T3JpZ2luRXhjbHVkaW5nQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW5zdXJlT3JpZ2luUmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5l
d2VzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjps
b2FkQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJl
bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZl
c3RVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxl
dGVDYWNoZUdyb3VwUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjpzZWFyY2hDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjphbGxEb21haW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnVzZVdB
TEpvdXJuYWxNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjptYXhpbXVt
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZTo6dGFibGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6
OmNsZWFyQWxsVGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0dXJu
T25JbmNyZW1lbnRhbEF1dG9WYWN1dW0pOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QW5k
UHJlcGFyZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cHJl
cGFyZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZUhlYXBTdGF0ZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6c3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0
ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5zQXRM
ZWFzdE9uZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRC
bG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6YmluZERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZFBh
cmFtZXRlckNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6
Y29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVt
bk51bGwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbkRlY2xh
cmVkQXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1u
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9T
ZWFyY2hQb3B1cE1lbnVEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVE
Qjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVw
TWVudURCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpleGVjdXRlU2ltcGxlU3FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudCk6CisgICAgICAgICogd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorCiAyMDIx
LTA1LTEzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBSRUdSRVNTSU9OKHIyNzEyMTYpIHBvaW50ZXJldmVudHMvaW9zL3BvaW50ZXItZXZlbnRzLW5v
LW1vdXNlZG93bi13aGVuLXByZXZlbnQtZGVmYXVsdC1jYWxsZWQtb24tcG9pbnRlcmRvd24uaHRt
bCBpcyBjb25zaXN0ZW50bHkgZmFpbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlMTQ3OTkyNTQyMzRjZWVmMWZi
OGRlMzQ1YTljOWVmMDk0ZDcyYjE2Li44MWFjNzUwODE1MGQyYzllMDJiODkyN2IyNDRlNTFmZWMw
YjZhNTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FM
aXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0
aGUgU1FMaXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAg
ICAgICBBbHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9w
ZW5JVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWdu
S2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5n
Q29sdW1uc1RvVGFibGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVuYW1lQ29sdW1uSW5UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVk
Q291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZh
bGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpn
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21h
aW5zQXNQcmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Ro
cm91Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFp
bnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b25Bc0ZpcnN0UGFydHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0Nv
cnJlY3RTdWJTdGF0aXN0aWNzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRh
dGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclNlbnRB
dHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJl
ZEZvclRlc3RpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFz
ZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJh
c2U6OnBvcHVsYXRlUGFnZVVSTFRvSWNvblVSTE1hcCk6CisgICAgICAgIChXZWJLaXQ6Okljb25E
YXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNl
OjppY29uSURGb3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpzZXRJ
Y29uSURGb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjppY29uRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6YWRkSWNvbik6CisgICAgICAgIChX
ZWJLaXQ6Okljb25EYXRhYmFzZTo6dXBkYXRlSWNvblRpbWVzdGFtcCk6CisgICAgICAgIChXZWJL
aXQ6Okljb25EYXRhYmFzZTo6ZGVsZXRlSWNvbik6CisKIDIwMjEtMDUtMTMgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJYUl0gQWxsb3cgV2ViWFIgdG8gYmUg
dGVzdGVkIG9uIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBlMThjMzBm
OWU3MTEwNzVjOWUxY2VmMWY4OTQyNjkyM2FmODc4YmFmLi4zOTA2NzgxMjk5YzRmNTQ5MjIxMDQ1
ZjY3NWE4YzJmZTliZTYzNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBA
CisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
TW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0ZW1l
bnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJhbHMu
CisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFT
eW5jOjpkZWxldGVFbXB0eURhdGFiYXNlKToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0
T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OmRhdGFiYXNlUGF0
aEZvck9yaWdpbik6CisKIDIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW5hbWUgRmlsZVN5c3RlbTo6ZGlyZWN0b3J5TmFtZSgpIHRvIEZpbGVT
eXN0ZW06OnBhcmVudFBhdGgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVm
LmggYi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAppbmRleCA0MTVhMjliNjYwY2ZlOWU4MzYw
MGRhNjE5YzFlYzNlNzFjMGYzNzk3Li5jNGVlM2RjMTI4NzRmMTk4ZTFiZjQ1M2YyMzdhOTljZjQ3
Njc2ZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9VbmlxdWVSZWYuaApAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9yZWYpOwogICAgIH0KIAorICAgIGV4cGxpY2l0IFVuaXF1ZVJlZihUJiBvdGhl
cikKKyAgICAgICAgOiBtX3JlZigmb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWYp
OworICAgIH0KKwogICAgIFQmIGdldCgpIHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsg
fQogICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3Jl
ZjsgfQogCkBAIC04MCwxMiArODYsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+
IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0
ZDo6dW5pcXVlX3B0cjxVPik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5kIGNsYXNzIFVu
aXF1ZVJlZjsKIAotICAgIFVuaXF1ZVJlZihUJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZigmb3Ro
ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZWYpOwotICAgIH0KLQogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUPiBtX3JlZjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggYTMxZGUxMDQzNjg5MjRlYzQ0ODU1NDhlNDA3N2M4MWRlYmQ5OWI1ZS4uY2NkNjNiM2Rm
YWI0YTNhNjllYWFmOTI4MWRlYTY0M2VlOGZmZWFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTI2MywxMyArMjYzLDEzIEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWln
cmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAg
ICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hl
bWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQg
YW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkg
ewpAQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNU
YWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNF
bXB0eSgpKTsKQEAgLTMzOCwxMyArMzM4LDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAg
IHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNv
cmQgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIs
ICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxv
YlJlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iUmVjb3JkcyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZv
ciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
KyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzU4LDcgKzM1
OCw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KQogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRTY2hl
bWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQCBib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKIAogICAgIHsK
ICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRh
YmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VM
RUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxl
cyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxl
cyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxv
YkZpbGVzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGlu
dCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzkxLDcgKzM5
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBi
bG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC00MjgsMTMgKzQyOCwxMyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgp
CiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUg
c2NoZW1hIGZvciBhbiBleGlzdGluZyBpbmRleCByZWNvcmQgdGFibGUuCi0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyIpOwotICAgICAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyJfcyk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFi
bGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBp
bnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJl
c3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIElu
ZGV4UmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAg
ICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CkBAIC00NTEsNyArNDUxLDcgQEAg
Ym9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCgh
Y3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNTAzLDEzICs1MDMsMTMgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBm
b3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIGluZGV4LgotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIg
V0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzSW5kZXgnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzSW5k
ZXggaW5kZXggYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNx
bGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRT
Y2hlbWEuaXNFbXB0eSgpKTsKQEAgLTU2MSwxMyArNTYxLDEzIEBAIGJvb2wgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKIAogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5h
bWU9J0luZGV4UmVjb3Jkc1JlY29yZEluZGV4JyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0
ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXgu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
djFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSkpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJ
bmRleCgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBj
dXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJl
bnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC02MjQsMjAgKzYyNCwyMCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAgIH0KIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMg
KCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0
YVZlcnNpb24pICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24n
LCA/KTsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
KDEsIGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkYXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJ
bmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnRGF0YWJhc2VOYW1lJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgbV9pZGVu
dGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0
YWJhc2VOYW1lJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNx
bC0+YmluZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbmFtZSBpbnRvIElEQkRhdGFi
YXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDYsMTAgKzY0NiwxMCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBv
cHVsYXRlSW5pdGlhbAogICAgIHsKICAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRl
ZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3Vw
cG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgICAgLy8gVGhl
cmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZv
IFZBTFVFUyAoJ0RhdGFiYXNlVmVyc2lvbicsID8pOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmlu
Zzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJz
aW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZFRleHQoMSwgU3RyaW5nOjpudW1iZXIoMCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUg
KCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNjc0LDE5ICs2NzQsMTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRl
ZD4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4iKTsKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9S
T1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNj
aGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAogICAgIEFTU0VSVCghY3Vy
cmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNzM5LDIyICs3MzksMjIgQEAgYm9vbCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhh
c2hNYXA8c3RkOjoKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgs
IGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVu
dCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwgb2JqZWN0U3Rv
cmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRleEluZm87Il9zKTsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3Ig
cHJlcGFyaW5nIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gSW5kZXhJbmZvIHRhYmxl
ICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAg
ICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsK
KyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7
IG9iamVjdFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVBh
dGhCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IGtleVBhdGhCdWZmZXIpOwotICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVj
dG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1l
bnQtPmdldENvbHVtbkludCg0KTsKKyAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDUpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRl
eEluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFz
cWwKQEAgLTc2OSw3ICs3NjksNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0
ZUluZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OgogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpA
QCAtODA0LDIyICs4MDQsMjIgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJ
bmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3QKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1Qg
aW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBG
Uk9NIEluZGV4UmVjb3JkczsiX3MpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2Jq
ZWN0U3RvcmVSZWNvcmRJRCBGUk9NIEluZGV4UmVjb3JkczsiX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVt
ZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVp
bnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0
KDEpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVj
dFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUJ1ZmZlcjsK
LSAgICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5QnVmZmVy
KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleUJ1
ZmZlcik7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIHZhbHVlQnVmZmVyKTsKLSAg
ICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywgdmFsdWVC
dWZmZXIpOworICAgICAgICAgICAgdWludDY0X3QgcmVjb3JkSUQgPSBzdGF0ZW1lbnQtPmdldENv
bHVtbkludDY0KDQpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChT
UUw6OlB1dFRlbXBJbmRleFJlY29yZCwgIklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBW
QUxVRVMgKD8sID8sIENBU1QoPyBBUyBURVhUKSwgQ0FTVCg/IEFTIFRFWFQpLCA/KTsiX3MpOwog
ICAgICAgICAgICAgaWYgKCFzcWwKQEAgLTgzMyw3ICs4MzMsNyBAQCBib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFz
aE1hcDxzdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkgewpAQCAtOTg5LDEwICs5ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElE
QkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRh
YmFzZUkKIAogICAgIFN0cmluZyBkYXRhYmFzZU5hbWU7CiAgICAgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJ
bmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOwotICAgICAgICBpZiAoc3FsLmlzQ29s
dW1uTnVsbCgwKSkKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFi
YXNlTmFtZSc7Il9zKTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRhdGFiYXNlTmFtZSA9IHNxbC5nZXRDb2x1
bW5UZXh0KDApOworICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMCk7
CiAgICAgICAgIGlmIChkYXRhYmFzZU5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgp
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIGluZm8gZGF0
YWJhc2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lICgnJXMnKSIsIGRh
dGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMDAsMTAgKzEw
MDAsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICB9CiAgICAgdWludDY0X3QgZGF0
YWJhc2VWZXJzaW9uOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxp
dGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0
YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAg
ICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFs
dWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9z
KTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLT5nZXRDb2x1bW5UZXh0
KDApOwogICAgICAgICBhdXRvIHBhcnNlZFZlcnNpb24gPSBwYXJzZUludGVnZXI8dWludDY0X3Q+
KHN0cmluZ1ZlcnNpb24pOwogICAgICAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBj
bGVhbmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0
cmluZ1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CkBAIC0xMDIxLDE3ICsxMDIxLDE3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFj
dEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgYm9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gKHJlc3Vs
dC52YWx1ZSgpID09IElzU2NoZW1hVXBncmFkZWQ6Olllcyk7CiAKICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgs
IGF1dG9JbmMgRlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVj
dFN0b3JlSW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5J
bnQ2NCgwKTsKLSAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBzcWwuZ2V0Q29s
dW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdl
dENvbHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IHNx
bC0+Z2V0Q29sdW1uVGV4dCgxKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhC
dWZmZXI7Ci0gICAgICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhC
dWZmZXIpOworICAgICAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0
aEJ1ZmZlcik7CiAKICAgICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3Jl
S2V5UGF0aDsKICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1
ZmZlci5zaXplKCksIG9iamVjdFN0b3JlS2V5UGF0aCkpIHsKQEAgLTEwMzksMTEgKzEwMzksMTEg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3Fs
LmdldENvbHVtbkludCgzKTsKKyAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC0+
Z2V0Q29sdW1uSW50KDMpOwogCiAgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5n
T2JqZWN0U3RvcmUoeyBvYmplY3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUob2Jq
ZWN0U3RvcmVLZXlQYXRoKSwgYXV0b0luY3JlbWVudCB9KTsKIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTA1NiwyMCAr
MTA1NiwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIEhhc2hNYXA8c3RkOjpwYWly
PHVpbnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIEhhc2hNYXA8
dWludDY0X3QsIFZlY3RvcjxJREJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBv
YmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5m
bzsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5h
bWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5k
ZXhJbmZvOyJfcyk7CisgICAgICAgIGlmICghc3FsKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIElu
ZGV4SW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQg
PSBzcWwtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLmdldENvbHVtbkludDY0KDApOwotICAg
ICAgICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAg
ICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGluZGV4SUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOworICAg
ICAgICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDIpOwog
CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNx
bC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBz
cWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKIAogICAgICAgICAg
ICAgT3B0aW9uYWw8SURCS2V5UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFk
ZXNlcmlhbGl6ZUlEQktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5
UGF0aEJ1ZmZlci5kYXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkg
ewpAQCAtMTA4MSw4ICsxMDgxLDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4g
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9v
bCB1bmlxdWUgPSBzcWwuZ2V0Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVu
dHJ5ID0gc3FsLmdldENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3Fs
LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBzcWwtPmdl
dENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IGRhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJRCk7CiAgICAgICAg
ICAgICBpZiAoIW9iamVjdFN0b3JlKSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlz
dGluZ0RhdGFiYXNlSQogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgo
aW5kZXhJbmZvKTsKICAgICAgICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJ
RCA/IGluZGV4SUQgOiBtYXhJbmRleElEOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzcWwuc3Rl
cCgpOworICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC0xMTYyLDExICsxMTYyLDE1IEBA
IE9wdGlvbmFsPElEQkRhdGFiYXNlTmFtZUFuZFZlcnNpb24+IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IG5hbWVzcWwoZGF0YWJhc2UsICJTRUxFQ1QgdmFs
dWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Iik7Ci0g
ICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0
byBuYW1lc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00g
SURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgaWYg
KCFuYW1lc3FsKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVt
ZW50IHRvIGdldCBkYXRhYmFzZSBuYW1lKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisgICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLT5nZXRDb2x1bW5UZXh0KDAp
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHZlcnNxbChkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBG
Uk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwot
ICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gdmVyc3FsLmdldENvbHVtblRleHQoMCk7CisgICAg
YXV0byB2ZXJzcWwgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJP
TSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAg
ICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbCA/IHZlcnNxbC0+Z2V0Q29sdW1uVGV4dCgw
KSA6IFN0cmluZygpOwogICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICBpZiAoIWRhdGFiYXNlVmVyc2lvbikgewogICAg
ICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9lcyBub3Qg
Y2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNpb24iLCBz
dHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTMxMCwxMCArMTMxNCwxMCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJh
bnNhY3Rpb25JbmZvJiBpbmZvKQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgbV9vcmln
aW5hbERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UgPSBtYWtlVW5pcXVlPElEQkRhdGFi
YXNlSW5mbz4oKm1fZGF0YWJhc2VJbmZvKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCptX3NxbGl0ZURCLCAiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJl
IGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVt
YmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+
cHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdo
ZXJlIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAg
ICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lv
bigpKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZh
aWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSJfcyB9OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzAxNywxMiArMzAyMSwxMiBAQCB2b2lkIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKCkKICAgICAgICAgYm9vbCBlcnJvcmVkID0gdHJ1
ZTsKIAogICAgICAgICBpZiAobV9zcWxpdGVEQikgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsiX3Mp
OwotICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICBhdXRvIHNxbCA9
IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JG
aWxlczsiX3MpOworICAgICAgICAgICAgaWYgKHNxbCkgeworICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgICAgICAgICAgICAgYmxvYkZpbGVzLmFwcGVuZChzcWwuZ2V0
Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQoc3FsLT5nZXRDb2x1bW5UZXh0
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkK
QEAgLTMwNjEsMTQgKzMwNjUsMTMgQEAgU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQoU1FMaXRlSURCQmEKICAgICAgICAg
cmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKICAgICB9CiAKLSAgICBp
ZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0pIHsKKyAgICBp
ZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0pCiAgICAgICAg
IHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldLmdldCgpIH07Ci0gICAgfQogCiAgICAgaWYgKG1f
c3FsaXRlREIpIHsKLSAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVf
dD4oc3FsKV0gPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oKm1fc3FsaXRlREIsIHN0YXRl
bWVudCk7Ci0gICAgICAgIGlmIChtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzcWwpXS0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgIG1fY2FjaGVkU3Rh
dGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gbnVsbHB0cjsKKyAgICAgICAgYXV0
byBzcWxTdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlSGVhcFN0YXRlbWVudChzdGF0ZW1l
bnQpOworICAgICAgICBpZiAoc3FsU3RhdGVtZW50KQorICAgICAgICAgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0gPSBzcWxTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwp
XS5nZXQoKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCBjMmNlZDg0MTkzMDBiNWE4YzU4
YThlODQwMjIyZjI1NTYxMjViMzVjLi5mMjg5MDhjYTUxNWU3YjliMmZmZjg0ODhjMDA2ZDJiMGU4
MWJiZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMjM1LDEyICsyMzUsMTIgQEAgYm9v
bCBTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNx
bCkKICAgICBBU1NFUlQoIW1fY3VycmVudFVwcGVyS2V5LmlzTnVsbCgpKTsKICAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKSk7CiAKLSAgICBtX3N0YXRlbWVudCA9
IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2Fj
dGlvbigpLT5kYXRhYmFzZSgpLCBzcWwpOwotCi0gICAgaWYgKG1fc3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3RyYW5zYWN0aW9uLT5z
cWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLnByZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIGN1cnNvciBzdGF0ZW1lbnQgKHByZXBhcmUvaWQpIC0gJyVzJyIsIG1fdHJhbnNhY3Rpb24t
PnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIG1fc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCk7CiAKICAgICByZXR1cm4gYmluZEFyZ3VtZW50cygpOwogfQpA
QCAtMzQxLDEyICszNDEsMTIgQEAgYm9vbCBTUUxpdGVJREJDdXJzb3I6OnJlc2V0QW5kUmViaW5k
UHJlSW5kZXhTdGF0ZW1lbnRJZk5lY2Vzc2FyeSgpCiAKICAgICBhdXRvJiBkYXRhYmFzZSA9IG1f
dHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCk7CiAgICAgaWYgKCFt
X3ByZUluZGV4U3RhdGVtZW50KSB7Ci0gICAgICAgIG1fcHJlSW5kZXhTdGF0ZW1lbnQgPSBtYWtl
VW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oZGF0YWJhc2UsIGJ1aWxkUHJlSW5kZXhTdGF0ZW1lbnQo
aXNEaXJlY3Rpb25OZXh0KCkpKTsKLQotICAgICAgICBpZiAobV9wcmVJbmRleFN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHByZUluZGV4U3RhdGVtZW50
ID0gZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoYnVpbGRQcmVJbmRleFN0YXRlbWVudChp
c0RpcmVjdGlvbk5leHQoKSkpOworICAgICAgICBpZiAoIXByZUluZGV4U3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIHByZSBzdGF0ZW1lbnQgLSAn
JXMnIiwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIG1fcHJlSW5kZXhTdGF0ZW1lbnQgPSBwcmVJbmRleFN0YXRl
bWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3ByZUlu
ZGV4U3RhdGVtZW50LT5yZXNldCgpICE9IFNRTElURV9PSykgewpAQCAtNTg4LDkgKzU4OCw4IEBA
IFNRTGl0ZUlEQkN1cnNvcjo6RmV0Y2hSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEZl
dGNoTmV4dFJlY29yZChTUUxpdGVDdXJzCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fY2Fj
aGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQgfHwgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudC0+
cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3RvcmVT
dGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oZGF0YWJhc2UsICJTRUxFQ1Qg
dmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhUKSBhbmQgb2JqZWN0
U3RvcmVJRCA9ID87Iik7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRPYmplY3RTdG9yZVN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgICAgICBtX2NhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChhdXRvIGNhY2hl
ZE9iamVjdFN0b3JlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlNF
TEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFuZCBv
YmplY3RTdG9yZUlEID0gPzsiX3MpKQorICAgICAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQgPSBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX2NhY2hlZE9iamVjdFN0b3Jl
U3RhdGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwCmluZGV4IGFiNDc4MjZjODNlYmI1OGI3N2I0YTYxNTI3MTM5MjEzM2NmODQwZTYuLmU3
NGUyOGY1YjllNWY3OWZjNWQ1Y2QwY2U3NjZjYTBkZGYxYmY0NzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC0xMTMsMTggKzExMywx
NSBAQCBzdGF0aWMgU3RyaW5nIGZvcm1hdEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBtZXNzYWdl
LCBpbnQgc3FsaXRlRXJyb3JDb2RlLCBjb25zdAogCiBzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJ
bkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVy
eSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVz
dWx0ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFyZVN0YXRl
bWVudChxdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcyki
LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOworICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMSwgdmFsdWUpOwogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50
IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTM0LDE3ICsxMzEsMTUgQEAgc3RhdGlj
IGJvb2wgc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0
cmluZyYgcXVlcnksIGNvbnMKIAogc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURh
dGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiBy
ZXN1bHRTdHJpbmcpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkp
OwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmlu
ZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1
bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRiLnByZXBh
cmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIExPR19F
UlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQg
ZnJvbSBkYXRhYmFzZSAoJXMpIiwgc3RhdGVtZW50LmVycm9yKCksIHF1ZXJ5LmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNzE0LDggKzcwOSw4IEBAIFZlY3RvcjxTdHJpbmc+
IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcygpCiB7CiAgICAgZGlzYWJsZUF1dGhvcml6
ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoc3FsaXRlRGF0YWJhc2UoKSwg
IlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBzcWxpdGVEYXRhYmFzZSgpLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Il9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRh
YmxlcyBmb3IgZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcigpOwogICAgICAgICByZXR1cm4gVmVjdG9yPFN0
cmluZz4oKTsKQEAgLTcyMyw4ICs3MTgsOCBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVy
Zm9ybUdldFRhYmxlTmFtZXMoKQogCiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lczsKICAg
ICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCk7CiAgICAgICAgIGlmIChuYW1lICE9IHVucXVhbGlmaWVkSW5mb1RhYmxlTmFtZSkKICAgICAg
ICAgICAgIHRhYmxlTmFtZXMuYXBwZW5kKG5hbWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCAw
YWQzYjQ4MDIzZjFmOTZlYWI5YmNmNGY3NzJkZTQ5MzMwN2ViZjg0Li5iN2UxN2E4NzRkOTcwYmU2
YmM1ZDMxOTY3NjMxYjJiZjNhM2NkNDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yMzUsMTUgKzIzNSwx
NSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW5Ob0xvY2soY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49Pzsi
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBG
Uk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewog
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1c7CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXNlKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRp
ZmllcikKQEAgLTI1NiwxNSArMjU2LDE1IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRy
eUZvckRhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zCiAgICAg
fQogCiAgICAgLy8gV2UndmUgZ290IGEgdHJhY2tlciBkYXRhYmFzZS4gU2V0IHVwIGEgcXVlcnkg
dG8gYXNrIGZvciB0aGUgZGIgb2YgaW50ZXJlc3Q6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2lu
PT8gQU5EIG5hbWU9PzsiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5E
IG5hbWU9PzsiX3MpOwogCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVzsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6bWF4aW11
bVNpemUoRGF0YWJhc2UmIGRhdGFiYXNlKQpAQCAtMzI1LDI2ICszMjUsMjYgQEAgU3RyaW5nIERh
dGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmIG9yaWcKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9yIHRoaXMgZGF0
YWJhc2UgeWV0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiKTsKIAot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLQotICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChv
cmlnaW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgaWYgKCFjcmVhdGVJ
Zk5vdEV4aXN0cykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBm
aWxlbmFtZSBmcm9tIERhdGFiYXNlIFRyYWNrZXIgZm9yIG9yaWdpbiAlcywgbmFtZSAlcyIsIG9y
aWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1l
KTsKKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJldHVybiBTUUxpdGVGaWxlU3lz
dGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5h
bWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5J
ZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGVtZW50LmZpbmFs
aXplKCk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBnZW5lcmF0ZURhdGFiYXNlRmlsZU5hbWUo
KTsKIApAQCAtMzcyLDE2ICszNzIsMTYgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gRGF0
YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICBpbnQgc3RlcFJlc3VsdDsKLSAgICB3aGls
ZSAoKHN0ZXBSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZp
ZXIoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLT5pc29sYXRlZENvcHkoKSk7CisgICAgd2hp
bGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpCisgICAg
ICAgIG9yaWdpbnMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRp
ZmllcihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpLT5pc29sYXRlZENvcHkoKSk7CiAgICAg
b3JpZ2lucy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYgKHN0ZXBSZXN1bHQgIT0gU1FMSVRFX0RP
TkUpCkBAIC0zOTcsMTYgKzM5NywxNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZVRyYWNrZXI6
OmRhdGFiYXNlTmFtZXNOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcgogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00gRGF0YWJh
c2VzIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAogICAgIFZlY3RvcjxTdHJp
bmc+IG5hbWVzOwogICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCkpID09IFNRTElURV9ST1cpCisgICAgICAgIG5hbWVzLmFwcGVuZChzdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkpOwogICAgIG5hbWVzLnNocmlua1RvRml0KCk7CiAKICAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ET05FKSB7CkBAIC00MzksMTQgKzQzOSwxNCBAQCBEYXRhYmFzZURldGFpbHMg
RGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbgogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RF
eGlzdCk7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAgIHJl
dHVybiBEYXRhYmFzZURldGFpbHMoKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplIEZST00gRGF0
YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
IEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iX3MpOworICAgICAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKIAot
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBu
YW1lKTsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ET05FKQogICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygpOwogCkBAIC00
NTQsOCArNDU0LDggQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zv
ck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAgICAgICAgIExPR19F
UlJPUigiRXJyb3IgcmV0cmlldmluZyBkZXRhaWxzIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4g
JXMgZnJvbSB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVu
dGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWls
cygpOwogICAgICAgICB9Ci0gICAgICAgIGRpc3BsYXlOYW1lID0gc3RhdGVtZW50LmdldENvbHVt
blRleHQoMCk7Ci0gICAgICAgIGV4cGVjdGVkVXNhZ2UgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoMSk7CisgICAgICAgIGRpc3BsYXlOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
OworICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsK
ICAgICB9CiAKICAgICBTdHJpbmcgcGF0aCA9IGZ1bGxQYXRoRm9yRGF0YWJhc2Uob3JpZ2luLCBu
YW1lLCBmYWxzZSk7CkBAIC00NzQsMzkgKzQ3NCw0MSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
c2V0RGF0YWJhc2VEZXRhaWxzKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25z
dAogICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoQ3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdI
RVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CiAK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCi0gICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0g
ICAgc3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBpZiAoZ3VpZCA9PSAwKSB7Ci0gICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgICAgICBMT0dfRVJST1IoIkVycm9y
IHRvIGRldGVybWluZyBleGlzdGVuY2Ugb2YgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGluIHRy
YWNrZXIgZGF0YWJhc2UiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNo
b3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRl
dGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRy
YWNrZXIKLSAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxlIGlzIGFuIGV4
dGVybmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91ciBjb2RlLCBp
dCdzIHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNlCi0gICAgICAg
ICAgICAvLyBTbyB3ZSdsbCBwcmludCBhbiBlcnJvciBpbnN0ZWFkCi0gICAgICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4g
JXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0IGRhdGFi
YXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0
aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCku
ZGF0YSgpKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsK
KyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1lKTsKKworICAgICAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOworCisg
ICAgICAgIGlmICghZ3VpZCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHRvIGRldGVybWluZyBleGlzdGVu
Y2Ugb2YgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGluIHRyYWNrZXIgZGF0YWJhc2UiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIG5ldmVyIG9j
Y3VyIC0gd2Ugc2hvdWxkIG5ldmVyIGJlIHNldHRpbmcgZGF0YWJhc2UgZGV0YWlscyBmb3IgYSBk
YXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlcgorICAgICAg
ICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxlIGlzIGFuIGV4dGVybmFsIHJl
c291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91ciBjb2RlLCBpdCdzIHNvbWV3
aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNlCisgICAgICAgICAgICAgICAg
Ly8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAorICAgICAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHJldHJpZXZlIGd1aWQgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBmcm9tIHRoZSB0cmFja2VyIGRhdGFiYXNlIC0gaXQgaXMgaW52YWxpZCB0byBzZXQgZGF0YWJh
c2UgZGV0YWlscyBvbiBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRo
ZSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFtZT0/LCBlc3Rp
bWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Iik7Ci0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gdXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFtZT0/LCBl
c3RpbWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Il9zKTsKKyAgICBpZiAoIXVwZGF0ZVN0YXRlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRp
c3BsYXlOYW1lKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDIsIGVzdGltYXRlZFNp
emUpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMywgZ3VpZCk7CisgICAgdXBkYXRl
U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7CisgICAgdXBkYXRlU3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgZXN0aW1hdGVkU2l6ZSk7CisgICAgdXBkYXRlU3RhdGVtZW50LT5iaW5k
SW50NjQoMywgZ3VpZCk7CiAKLSAgICBpZiAodXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgZGV0YWlscyBmb3IgZGF0
YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjcxLDE1ICs2
NzMsMTUgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFOb0xvY2so
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4KICAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgIHJldHVybiBxdW90YTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBxdW90YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2lu
PT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBxdW90
YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAg
ICAgICAgcmV0dXJuIHF1b3RhOwogICAgIH0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9y
aWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKQotICAgICAgICBxdW90YSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcXVv
dGEgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogCiAgICAgcmV0dXJuIHF1b3RhOwog
fQpAQCAtNzA1LDI2ICs3MDcsMjYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCB1bnNpZ25lZCBsb25nIGwKIAogICAgIGJv
b2wgb3JpZ2luRW50cnlFeGlzdHMgPSBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwog
ICAgIGlmICghb3JpZ2luRW50cnlFeGlzdHMpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElO
VE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJXMgaW4g
dGhlIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoMiwgcXVvdGEpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MiwgcXVvdGEpOwogCi0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkK
ICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICVz
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGluc2VydGVkTmV3T3JpZ2lu
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJF
IG9yaWdpbj0/Iik7Ci0gICAgICAgIGJvb2wgZXJyb3IgPSBzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSzsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJFIG9yaWdpbj0/Il9zKTsK
KyAgICAgICAgYm9vbCBlcnJvciA9ICFzdGF0ZW1lbnQ7CiAgICAgICAgIGlmICghZXJyb3IpIHsK
LSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVvdGEpOwotICAgICAgICAgICAg
c3RhdGVtZW50LmJpbmRUZXh0KDIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAg
ICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBxdW90YSk7CisgICAgICAgICAgICBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICAg
ICAgICAgIGVycm9yID0gIXN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgICAgICAgICAg
ZXJyb3IgPSAhc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGVycm9yKQpAQCAtNzQ4LDE2ICs3NTAsMTYgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6
OmFkZERhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zdCBTdHJp
bmcKICAgICAvLyBOZXcgZGF0YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHVudGlsIHRoZSBv
cmlnaW4gaGFzIGJlZW4gZXN0YWJsaXNoZWQKICAgICBBU1NFUlQoaGFzRW50cnlGb3JPcmlnaW5O
b0xvY2sob3JpZ2luKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/
LCA/LCA/KTsiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAo
PywgPywgPyk7Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgzLCBwYXRo
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1lKTsKKyAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDMsIHBhdGgpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkg
eworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGFkZCBkYXRhYmFzZSAlcyB0byBvcmlnaW4gJXM6ICVzXG4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgp
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTg4MSwyOCArODgzLDI4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIERlbGV0aW9uTW9kCiAgICAgICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgICAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOwogCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGRhdGFiYXNl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20g
b3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBvcmlnaW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICAgICAgaWYgKG9yaWdpblN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gb3JpZ2luU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJF
IG9yaWdpbj0/Il9zKTsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICVzIGZy
b20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG9yaWdpblN0
YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAg
ICBvcmlnaW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CiAKLSAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewor
ICAgICAgICBpZiAoIW9yaWdpblN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMg
ZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC05MTUsMTAgKzkxNywxMCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAogCiAgICAgICAgIG9w
ZW5UcmFja2VyRGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKICAgICAgICAgaWYg
KG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7Ci0gICAgICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgICAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdp
biBGUk9NIE9yaWdpbnMiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAg
ICAgICBlbHNlIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICAg
ICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKICAgICAgICAgfQogCkBAIC0xMDgxLDE3ICsxMDgzLDE3
IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyCiAKICAgICBMb2NrSG9sZGVyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8i
KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gRGF0
YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgZGF0
YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgp
LCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGRv
bmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpKSB7CisgICAgaWYgKCFzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZSAlcyBmcm9t
IG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5kYXRh
YmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZG9uZURlbGV0aW5nRGF0
YWJhc2Uob3JpZ2luLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE5NywxMyAr
MTE5OSwxMSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFi
YXNlcygpCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAqZGF0YWJhc2VO
YW1lTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5hbWUgPSBkYXRh
YmFzZXMua2V5OwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlTmFtZTsK
LSAgICAgICAgICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9Pzsi
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJf
cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFiYXNlRmlsZU5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0YWJhc2UgPSBmYWxzZTsKQEAgLTEyNTgsMTMg
KzEyNTgsMTQgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZUlmRW1w
dHkoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIAogICAgIC8vIFNwZWNpZnkgdGhhdCB3ZSB3YW50
IHRoZSBleGNsdXNpdmUgbG9ja2luZyBtb2RlLCBzbyBhZnRlciB0aGUgbmV4dCB3cml0ZSwKICAg
ICAvLyB3ZSdsbCBiZSBob2xkaW5nIHRoZSBsb2NrIHRvIHRoaXMgZGF0YWJhc2UgZmlsZS4KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgbG9ja1N0YXRlbWVudChkYXRhYmFzZSwgIlBSQUdNQSBsb2NraW5n
X21vZGU9RVhDTFVTSVZFOyIpOwotICAgIGlmIChsb2NrU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgcmVzdWx0ID0gbG9ja1N0
YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxvY2tTdGF0ZW1lbnQu
ZmluYWxpemUoKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja1N0YXRlbWVudCA9IGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBsb2NraW5nX21vZGU9RVhDTFVTSVZFOyJfcyk7Cisg
ICAgICAgIGlmICghbG9ja1N0YXRlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW50IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5k
KCJCRUdJTiBFWENMVVNJVkUgVFJBTlNBQ1RJT047IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcAppbmRleCA0YzI5NjE1OGFkMjlkYmNlNWYwNTA2ZGNjZTY3MTI5YTFjM2E5NWQxLi45YjE5
MGNhYTk2M2U1YTFhNzUyYWQ5ZWYyNDYwNTFjODQ2MmVhMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCkBAIC0xMTIsMjgg
KzExMiwyNiBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAKICAg
ICBTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UgPSBkYi5zcWxpdGVEYXRhYmFzZSgpOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgbV9zdGF0ZW1lbnQpOwotICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxJ
VEVfT0spIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNvcnJl
Y3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5hc2Np
aSgpLmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0lOVEVSUlVQVCkKLSAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBz
dGF0ZW1lbnQiLCByZXN1bHQsICJpbnRlcnJ1cHRlZCIpOworICAgIGF1dG8gc3RhdGVtZW50ID0g
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtX3N0YXRlbWVudCk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNvcnJlY3Ru
ZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5hc2NpaSgp
LmRhdGEoKSwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC5lcnJvcigpID09IFNRTElURV9JTlRFUlJVUFQpCisgICAgICAg
ICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAi
Y291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksICJpbnRlcnJ1
cHRlZCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNy
ZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIs
IHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgbV9lcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFy
ZSBzdGF0ZW1lbnQiLCBzdGF0ZW1lbnQuZXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IElmIHRoZSBz
dGF0ZW1lbnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0ZSwgdGhlIGJp
bmQgcGFyYW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBudW1iZXIgb2Yg
cXVlc3Rpb24gbWFya3MuCiAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBtaWdodCBi
ZSB0cnlpbmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cwotICAgIGlmIChzdGF0
ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7CisgICAg
aWYgKHN0YXRlbWVudC0+YmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgp
KSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24n
dCBtYXRjaCBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MiKTsKICAgICAgICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBz
dGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
cmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmJpbmRW
YWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LT5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRlVMTCkgewogICAgICAgICAgICAgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0OSwyMCArMTQ3LDIwIEBAIGJvb2wgU1FM
U3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlJiBkYikKICAgICBhdXRvIHJlc3VsdFNldCA9IFNR
TFJlc3VsdFNldDo6Y3JlYXRlKCk7CiAKICAgICAvLyBTdGVwIHNvIHdlIGNhbiBmZXRjaCB0aGUg
Y29sdW1uIG5hbWVzLgotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBTUUxJVEVfUk9XOiB7Ci0gICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1
bW5Db3VudCgpOworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQtPmNvbHVtbkNv
dW50KCk7CiAgICAgICAgIGF1dG8mIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKIAogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAgICByb3dz
LmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisgICAgICAgICAgICByb3dz
LmFkZENvbHVtbihzdGF0ZW1lbnQtPmdldENvbHVtbk5hbWUoaSkpOwogCiAgICAgICAgIGRvIHsK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKLSAgICAg
ICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoaSkpOwor
ICAgICAgICAgICAgICAgIHJvd3MuYWRkUmVzdWx0KHN0YXRlbWVudC0+Z2V0Q29sdW1uVmFsdWUo
aSkpOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICAg
ICAgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9
PSBTUUxJVEVfUk9XKTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcAppbmRleCAxNzRjZGQxMWRjMmU2YzA4MWY2NmY1OGMwMDExODY3ZDQ2
MDJhYmRmLi5lZjZmZGQ0ZWQ4YWJiYzRkMjkyNWQxY2M3Y2NmMjg2YWUyY2EyNGJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHAKQEAgLTk4LDEzICs5OCwxMyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBVUkwmIG1hbmlm
ZQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQs
IG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENh
Y2hlIElTIE5PVCBOVUxMIEFORCBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9N
IENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIEFORCBtYW5pZmVzdFVS
TD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMLnN0cmluZygpKTsKKyAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMLnN0cmluZygpKTsKICAgIAotICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ET05FKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKQEAgLTExMywxNCArMTEzLDE0IEBAIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3VwKGNvbnN0IFVSTCYg
bWFuaWZlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25l
ZCBuZXdlc3RDYWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMikpOworICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlU3RvcmFnZUlEID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAg
ICAgYXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZVN0b3JhZ2VJRCk7CiAgICAgaWYg
KCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGF1dG8mIGdy
b3VwID0gKm5ldyBBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKnRoaXMsIG1hbmlmZXN0VVJMKTsKLSAg
ICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSkpOworICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgIGdyb3VwLnNldE5ld2Vz
dENhY2hlKGNhY2hlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHJldHVybiAmZ3JvdXA7CiB9ICAg
IApAQCAtMTcxLDEyICsxNzEsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZE1hbmlmZXN0SG9zdEhhc2hlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZldGNoIHRo
ZSBob3N0IGhhc2hlcy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgbWFuaWZlc3RIb3N0SGFzaCBGUk9NIENhY2hlR3JvdXBzIik7ICAgIAotICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJP
TSBDYWNoZUdyb3VwcyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICBtX2NhY2hlSG9zdFNldC5hZGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICBtX2NhY2hlSG9zdFNldC5hZGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKIH0gICAgCiAKIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgVVJM
JiB1cmwpCkBAIC0yMTIsMTMgKzIxMiwxMyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAg
IFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRl
cjsKIAogICAgIC8vIENoZWNrIHRoZSBkYXRhYmFzZS4gTG9vayBmb3IgYWxsIGNhY2hlIGdyb3Vw
cyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVH
cm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiKTsKLSAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZS
T00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiX3MpOworICAgIGlm
ICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpbnQgcmVz
dWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBVUkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0g
U1FMSVRFX1JPVykgeworICAgICAgICBVUkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMSkpOwogCiAgICAgICAgIGlmIChtX2NhY2hlc0luTWVtb3J5LmNv
bnRhaW5zKG1hbmlmZXN0VVJMLnN0cmluZygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjI4LDcgKzIyOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAKICAgICAgICAgLy8gV2Ug
Zm91bmQgYSBjYWNoZSBncm91cCB0aGF0IG1hdGNoZXMuIE5vdyBjaGVjayBpZiB0aGUgbmV3ZXN0
IGNhY2hlIGhhcyBhIHJlc291cmNlIHdpdGgKICAgICAgICAgLy8gYSBtYXRjaGluZyBVUkwuCi0g
ICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJ
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsK
ICAgICAgICAgYXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKICAgICAgICAg
aWYgKCFjYWNoZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQwLDcgKzI0MCw3IEBAIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBG
b3JVUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAg
ICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgbV9jYWNoZXNJbk1lbW9yeS5zZXQoZ3JvdXAubWFuaWZlc3RVUkwoKS5zdHJpbmcoKSwgJmdy
b3VwKTsKIApAQCAtMjc5LDEzICsyNzksMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFUKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIC8vIENoZWNrIHRoZSBkYXRhYmFz
ZS4gTG9vayBmb3IgYWxsIGNhY2hlIGdyb3VwcyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFuaWZlc3RV
UkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9U
IE5VTEwiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwg
bWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2Fj
aGUgSVMgTk9UIE5VTEwiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBVUkwgbWFuaWZlc3RVUkwg
PSBVUkwoeyB9LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgd2hpbGUgKChyZXN1
bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBVUkwgbWFu
aWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpOwogCiAgICAg
ICAgIGlmIChtX2NhY2hlc0luTWVtb3J5LmNvbnRhaW5zKG1hbmlmZXN0VVJMLnN0cmluZygpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjk2LDcgKzI5Niw3IEBAIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVS
TChjb25zdCBVCiAKICAgICAgICAgLy8gV2UgZm91bmQgYSBjYWNoZSBncm91cCB0aGF0IG1hdGNo
ZXMuIE5vdyBjaGVjayBpZiB0aGUgbmV3ZXN0IGNhY2hlIGhhcyBhIHJlc291cmNlIHdpdGgKICAg
ICAgICAgLy8gYSBtYXRjaGluZyBmYWxsYmFjayBuYW1lc3BhY2UuCi0gICAgICAgIHVuc2lnbmVk
IG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsKICAgICAgICAgYXV0byBj
YWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKIAogICAgICAgICBVUkwgZmFsbGJhY2tV
Ukw7CkBAIC0zMDgsNyArMzA4LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFUKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8mIGdyb3VwID0gKm5ldyBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAoKnRoaXMsIG1hbmlmZXN0VVJMKTsKLSAgICAgICAgZ3JvdXAuc2V0U3RvcmFnZUlE
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAg
ICAgICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApKSk7CiAgICAgICAgIGdyb3VwLnNldE5ld2VzdENhY2hlKGNhY2hl
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3Vw
Lm1hbmlmZXN0VVJMKCkuc3RyaW5nKCksICZncm91cCk7CkBAIC00MTYsMTcgKzQxNiwxNyBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdpbihjb25z
dCBTZWN1cml0eU9yaWdpbiYgb3JpZwogICAgIC8vIElmIGFuIE9yaWdpbiByZWNvcmQgZG9lc24n
dCBleGlzdCwgdGhlbiB0aGUgQ09VTlQgd2lsbCBiZSAwIGFuZCBxdW90YSB3aWxsIGJlIDAuCiAg
ICAgLy8gVXNpbmcgdGhlIGNvdW50IHRvIGRldGVybWluZSBpZiBhIHJlY29yZCBleGlzdGVkIG9y
IG5vdCBpcyBhIHNhZmUgd2F5IHRvIGRldGVybWluZQogICAgIC8vIGlmIGEgcXVvdGEgb2YgMCBp
cyByZWFsLCBmcm9tIHRoZSByZWNvcmQsIG9yIGZyb20gbnVsbC4KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9N
IE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBDT1VOVChxdW90YSksIHF1b3RhIEZST00gT3JpZ2lucyBXSEVSRSBvcmln
aW49PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgIC8vIFJldHVybiB0aGUgcXVvdGEs
IG9yIGlmIGl0IHdhcyBudWxsIHRoZSBkZWZhdWx0LgogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICBib29sIHdhc05vUmVjb3JkID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDApID09IDA7Ci0gICAgICAgIHF1b3RhID0gd2FzTm9SZWNvcmQgPyBtX2RlZmF1bHRPcmln
aW5RdW90YSA6IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAgYm9vbCB3YXNO
b1JlY29yZCA9ICFzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOworICAgICAgICBxdW90YSA9
IHdhc05vUmVjb3JkID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ0MCwxOSArNDQw
LDE5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdlRm9yT3Jp
Z2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYKIAogICAgIC8vIElmIGFuIE9yaWdpbnMgcmVj
b3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIFNVTSB3aWxsIGJlIG51bGwsCiAgICAgLy8gd2hp
Y2ggd2lsbCBiZWNvbWUgMCwgYXMgZXhwZWN0ZWQsIHdoZW4gY29udmVydGluZyB0byBhIG51bWJl
ci4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgU1VN
KENhY2hlcy5zaXplKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgIEZST00gQ2FjaGVHcm91cHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmln
aW5zLm9yaWdpbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
SU5ORVIgSk9JTiBDYWNoZXMgT04gQ2FjaGVHcm91cHMuaWQgPSBDYWNoZXMuY2FjaGVHcm91cCIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgV0hFUkUgT3JpZ2lu
cy5vcmlnaW49PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBPcmlnaW5zIE9OIENhY2hlR3Jv
dXBzLm9yaWdpbiA9IE9yaWdpbnMub3JpZ2luIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBDYWNoZXMgT04gQ2FjaGVHcm91cHMu
aWQgPSBDYWNoZXMuY2FjaGVHcm91cCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3MpOworICAgIGlmICgh
c3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRl
eHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAg
ICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHVzYWdlID0gc3RhdGVtZW50
LmdldENvbHVtbkludDY0KDApOworICAgICAgICB1c2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50NjQoMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNDg3LDIzICs0ODcs
MjMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUmVtYWluaW5nU2l6
ZUZvck9yaWdpbkV4Y2x1ZGluZ0NhY2hlKGNvbnMKICAgICAgICAgICAgICAgICAiIFdIRVJFIE9y
aWdpbnMub3JpZ2luPT8iOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgcXVlcnkpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChx
dWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogICAgIGlmIChleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIgIT0gMCkKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIpOwotICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgyLCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIpOworICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQtPnN0ZXAoKTsKIAogICAgIC8vIElmIHRoZSBjb3VudCB3YXMgMCB0aGF0IHRoZW4gd2Ug
aGF2ZSB0byBxdWVyeSB0aGUgb3JpZ2luIHRhYmxlIGRpcmVjdGx5CiAgICAgLy8gZm9yIGl0cyBx
dW90YS4gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgaWYg
KHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludDY0X3QgbnVtYmVyT2ZDYWNoZXMg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGludDY0X3QgbnVtYmVyT2ZD
YWNoZXMgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogICAgICAgICBpZiAobnVtYmVy
T2ZDYWNoZXMgPT0gMCkKICAgICAgICAgICAgIGNhbGN1bGF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdp
biwgcmVtYWluaW5nU2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlbWFpbmluZ1Np
emUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgICAgICByZW1haW5pbmdT
aXplID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC01MjIsMTQgKzUyMiwxNCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogbwog
ICAgIGlmICghZW5zdXJlT3JpZ2luUmVjb3JkKG9yaWdpbikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQ
REFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHVwZGF0
ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gdXBkYXRlU3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVv
dGE9PyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVv
dGEpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4tPmRhdGEoKS5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7CisgICAgdXBkYXRlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVv
dGEpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRl
U3RhdGVtZW50KTsKKyAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudCh1cGRhdGVTdGF0ZW1lbnQu
dmFsdWUoKSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxD
b21tYW5kKGNvbnN0IFN0cmluZyYgc3FsKQpAQCAtNTU0LDcgKzU1NCw4IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewogICAgIEFTU0VSVChT
UUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIAotICAg
IGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92
ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAg
aW50IHZlcnNpb24gPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTU3MCwxMSArNTcxLDExIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGludCB1bnVzZWROdW1CeXRlcyA9IHNu
cHJpbnRmKHVzZXJWZXJzaW9uU1FMLCBzaXplb2YodXNlclZlcnNpb25TUUwpLCAiUFJBR01BIHVz
ZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24pOwogICAgIEFTU0VSVF9VTlVTRUQodW51c2Vk
TnVtQnl0ZXMsIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSkgPj0gdW51
c2VkTnVtQnl0ZXMpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCB1c2VyVmVyc2lvblNRTCk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHVz
ZXJWZXJzaW9uU1FMKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHN0YXRlbWVudC52YWx1ZSgpKTsKICAgICBzZXREYXRhYmFzZVZlcnNpb24uY29tbWl0KCk7CiB9
CiAgICAgCkBAIC02NTIsOCArNjUzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKICAgICBBU1NFUlQo
U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAg
Ym9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgTE9HX0VSUk9SKCJBcHBsaWNhdGlvbiBDYWNoZSBTdG9yYWdlOiBmYWlsZWQg
dG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVycm9yIFwiJXNcIiIsIAotICAgICAgICAgICAg
ICAgICAgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTog
ZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfSAgICAKQEAgLTY3MCwx
NSArNjcwLDE1IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEdyb3VwU3RvcmFnZUlECiAgICAgLy8gYSB3YXkgdG8gcmVw
YWlyIGl0LgogICAgIGRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoZ3JvdXAtPm1hbmlmZXN0VVJMKCku
c3RyaW5nKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gQ2FjaGVHcm91cHMgKG1hbmlmZXN0SG9zdEhhc2gsIG1hbmlmZXN0VVJMLCBv
cmlnaW4pIFZBTFVFUyAoPywgPywgPykiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVz
dFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8pIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCB1cmxI
b3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgy
LCBncm91cC0+bWFuaWZlc3RVUkwoKS5zdHJpbmcoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0
KDMsIGdyb3VwLT5vcmlnaW4oKS5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0
YXRlbWVudC0+YmluZEludDY0KDEsIHVybEhvc3RIYXNoKGdyb3VwLT5tYW5pZmVzdFVSTCgpKSk7
CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBncm91cC0+bWFuaWZlc3RVUkwoKS5zdHJpbmco
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRh
dGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1l
bnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIGdyb3VwU3RvcmFnZUlEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwpAQCAtNjk4LDE0
ICs2OTgsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRp
b25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICBBU1NFUlQoY2FjaGUtPmdy
b3VwKCktPnN0b3JhZ2VJRCgpICE9IDApOwogICAgIEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsK
ICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQg
SU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlcyAoY2FjaGVHcm91
cCwgc2l6ZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3Vw
KCktPnN0b3JhZ2VJRCgpKTsKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlLT5lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2Fj
aGUtPmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgdW5zaWduZWQgY2FjaGVTdG9y
YWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9kYXRhYmFzZS5sYXN0SW5zZXJ0Um93SUQo
KSk7CkBAIC03MjUsMjYgKzcyNSwyOCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNv
bnN0IFZlY3RvcjxVUkw+JiBvbmxpbmVBbGxvd2xpc3QgPSBjYWNoZS0+b25saW5lQWxsb3dsaXN0
KCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGFsbG93bGlzdFVSTCA6IG9ubGluZUFsbG93
bGlzdCkgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gQ2FjaGVXaGl0ZWxpc3RVUkxzICh1cmwsIGNhY2hlKSBWQUxVRVMgKD8s
ID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENh
Y2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAg
ICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOwot
ICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAg
ICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGFsbG93bGlzdFVSTC5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CiAKLSAg
ICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBTdG9yZSBvbmxpbmUg
YWxsb3dsaXN0IHdpbGRjYXJkIGZsYWcuCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUFsbG93c0FsbE5ldHdvcmtS
ZXF1ZXN0cyAod2lsZGNhcmQsIGNhY2hlKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgICAgIHN0YXRl
bWVudC5wcmVwYXJlKCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyAo
d2lsZGNhcmQsIGNhY2hlKSBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJ
bnQ2NCgxLCBjYWNoZS0+YWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKCkpOwotICAgICAgICBzdGF0
ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgc3RhdGVtZW50LT5i
aW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKKyAgICAgICAg
c3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAgIGlmICgh
ZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKQEAgLTc1MiwxNCArNzU0LDE1IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAg
Y29uc3QgRmFsbGJhY2tVUkxWZWN0b3ImIGZhbGxiYWNrVVJMcyA9IGNhY2hlLT5mYWxsYmFja1VS
THMoKTsKICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgZmFsbGJhY2tVUkwgOiBmYWxsYmFja1VS
THMpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUp
IFZBTFVFUyAoPywgPywgPykiKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5wcmVwYXJlKCk7Cisg
ICAgICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gRmFsbGJhY2tVUkxzIChuYW1lc3BhY2UsIGZhbGxiYWNrVVJMLCBjYWNoZSkg
VkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgICAgICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBmYWxsYmFja1VSTC5maXJzdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMiwgZmFsbGJhY2tVUkwuc2Vjb25kLnN0cmluZygpKTsKLSAgICAgICAgICAgIHN0
YXRlbWVudC5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQpOworICAgICAgICAgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBmYWxsYmFja1VSTC5maXJzdC5zdHJpbmcoKSk7CisgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgzLCBjYWNoZVN0b3JhZ2VJRCk7CiAKLSAg
ICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODEsMTQgKzc4NCwxNCBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBG
aXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBW
QUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGRhdGFTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIGRhdGFTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBWQUxVRVMgKD8s
ID8pIl9zKTsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKIAogICAgIFN0cmluZyBmdWxsUGF0aDsKICAgICBpZiAoIXJlc291cmNlLT5wYXRoKCku
aXNFbXB0eSgpKQotICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIEZpbGVTeXN0ZW06
OnBhdGhHZXRGaWxlTmFtZShyZXNvdXJjZS0+cGF0aCgpKSk7CisgICAgICAgIGRhdGFTdGF0ZW1l
bnQtPmJpbmRUZXh0KDIsIEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShyZXNvdXJjZS0+cGF0
aCgpKSk7CiAgICAgZWxzZSBpZiAoc2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUocmVzb3Vy
Y2UpKSB7CiAgICAgICAgIC8vIEZpcnN0LCBjaGVjayB0byBzZWUgaWYgY3JlYXRpbmcgdGhlIGZs
YXQgZmlsZSB3b3VsZCB2aW9sYXRlIHRoZSBtYXhpbXVtIHRvdGFsIHF1b3RhLiBXZSBkb24ndCBu
ZWVkCiAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBwZXItb3JpZ2luIHF1b3RhIGhlcmUsIGFzIGl0
IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4gc3RvcmVOZXdlc3RDYWNoZSgpLgpAQCAtODEzLDEzICs4
MTYsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgCiAgICAgICAgIGZ1bGxQ
YXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0
b3J5LCBwYXRoKTsKICAgICAgICAgcmVzb3VyY2UtPnNldFBhdGgoZnVsbFBhdGgpOwotICAgICAg
ICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOworICAgICAgICBkYXRhU3RhdGVtZW50
LT5iaW5kVGV4dCgyLCBwYXRoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAocmVzb3VyY2Ut
PmRhdGEoKS5zaXplKCkpCi0gICAgICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRCbG9iKDEsIHJl
c291cmNlLT5kYXRhKCkuZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSk7CisgICAgICAg
ICAgICBkYXRhU3RhdGVtZW50LT5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwg
cmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwogICAgIH0KICAgICAKLSAgICBpZiAoIWRhdGFTdGF0
ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICghZGF0YVN0YXRlbWVudC0+ZXhlY3V0
ZUNvbW1hbmQoKSkgewogICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZmlsZSB3aGljaCB3ZSBtYXkg
aGF2ZSB3cml0dGVuIHRvOgogICAgICAgICBpZiAoIWZ1bGxQYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZnVsbFBhdGgpOwpAQCAtODQzLDM2ICs4NDYs
MzYgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBTdHJpbmcgaGVhZGVycyA9
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVz
b3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VzICh1
cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRhLCBtaW1lVHlwZSwgdGV4
dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/KSIpOwotICAgIGlmIChy
ZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gcmVzb3Vy
Y2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENh
Y2hlUmVzb3VyY2VzICh1cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJzLCBkYXRh
LCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/
KSJfcyk7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIC8vIFRoZSBzYW1lIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBhcmUgdXNl
ZCBpbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKQogICAgIC8vIHRvIGNhbGN1bGF0
ZSB0aGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBhbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ugb2Jq
ZWN0LiBJZgogICAgIC8vIHlvdSBjaGFuZ2UgdGhlIGNvZGUgYmVsb3csIHBsZWFzZSBhbHNvIGNo
YW5nZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKS4KLSAgICByZXNvdXJjZVN0YXRl
bWVudC5iaW5kVGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNl
U3RhdGVtZW50LmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29k
ZSgpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVudC5iaW5kVGV4dCgzLCByZXNvdXJjZS0+cmVzcG9u
c2UoKS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNCwg
aGVhZGVycyk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZEludDY0KDUsIGRhdGFJZCk7Ci0g
ICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkubWlt
ZVR5cGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNywgcmVzb3VyY2UtPnJl
c3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKLQotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChyZXNvdXJjZVN0YXRlbWVudCkpCisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IHJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgyLCByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKTsKKyAgICByZXNv
dXJjZVN0YXRlbWVudC0+YmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJsKCkuc3Ry
aW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg0LCBoZWFkZXJzKTsKKyAg
ICByZXNvdXJjZVN0YXRlbWVudC0+YmluZEludDY0KDUsIGRhdGFJZCk7CisgICAgcmVzb3VyY2VT
dGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwor
ICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg3LCByZXNvdXJjZS0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCkpOworCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHJlc291cmNl
U3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25l
ZCByZXNvdXJjZUlkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2Vy
dFJvd0lEKCkpOwogICAgIAogICAgIC8vIEZpbmFsbHksIGluc2VydCB0aGUgY2FjaGUgZW50cnkK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgZW50cnlTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMgKD8sID8sID8p
Iik7Ci0gICAgaWYgKGVudHJ5U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBlbnRyeVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IElOVE8gQ2FjaGVFbnRyaWVzIChjYWNoZSwgdHlwZSwgcmVzb3VyY2UpIFZBTFVFUyAoPywgPywg
PykiX3MpOworICAgIGlmICghZW50cnlTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOwot
ICAgIGVudHJ5U3RhdGVtZW50LmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+dHlwZSgpKTsKLSAgICBl
bnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMywgcmVzb3VyY2VJZCk7CisgICAgZW50cnlTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJp
bmRJbnQ2NCgyLCByZXNvdXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZElu
dDY0KDMsIHJlc291cmNlSWQpOwogICAgIAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRy
eVN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50LnZh
bHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gRGlkIHdlIHN1Y2Nl
c3NmdWxseSB3cml0ZSB0aGUgcmVzb3VyY2UgZGF0YSB0byBhIGZpbGU/IElmIHNvLApAQCAtODkz
LDE0ICs4OTYsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVk
VHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmMKICAgICBBU1NFUlQocmVzb3Vy
Y2UtPnN0b3JhZ2VJRCgpKTsKIAogICAgIC8vIEZpcnN0LCBpbnNlcnQgdGhlIGRhdGEKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgZW50cnlTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZUVu
dHJpZXMgU0VUIHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Iik7Ci0gICAgaWYgKGVudHJ5U3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBlbnRyeVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENhY2hlRW50cmllcyBTRVQgdHlwZT0/
IFdIRVJFIHJlc291cmNlPT8iX3MpOworICAgIGlmICghZW50cnlTdGF0ZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVudHJ5U3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+dHlwZSgpKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnN0
b3JhZ2VJRCgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDEsIHJlc291cmNlLT50
eXBlKCkpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnN0b3Jh
Z2VJRCgpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50KTsK
KyAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudC52YWx1ZSgpKTsKIH0K
IAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJl
c291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCkBAIC05MjYsMTQgKzky
OSwxNCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdAogICAgIH0KIAogICAgIC8vIEEgcmVzb3Vy
Y2Ugd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgZm9y
IHRoZSBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyIpOwotICAg
IGlmIChzaXplVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzaXplVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERB
VEUgQ2FjaGVzIFNFVCBzaXplPXNpemUrPyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXNpemVV
cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNpemVVcGRhdGVT
dGF0ZW1lbnQuYmluZEludDY0KDEsIHJlc291cmNlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkp
OwotICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlLT5zdG9yYWdlSUQo
KSk7CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDEsIHJlc291cmNlLT5lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOwogCi0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHNp
emVVcGRhdGVTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRl
U3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc3Rv
cmVSZXNvdXJjZVRyYW5zYWN0aW9uLmNvbW1pdCgpOwpAQCAtOTQzLDEzICs5NDYsMTMgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiByZXNvdXJjZSwgQXBwbGljYXQKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3Vy
ZU9yaWdpblJlY29yZChjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIEFTU0VS
VChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYg
KGluc2VydE9yaWdpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8g
aW5zZXJ0T3JpZ2luU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICBp
ZiAoIWluc2VydE9yaWdpblN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YSgpLmRhdGFiYXNl
SWRlbnRpZmllcigpKTsKLSAgICBpbnNlcnRPcmlnaW5TdGF0ZW1lbnQuYmluZEludDY0KDIsIG1f
ZGVmYXVsdE9yaWdpblF1b3RhKTsKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoaW5zZXJ0T3Jp
Z2luU3RhdGVtZW50KSkKKyAgICBpbnNlcnRPcmlnaW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9y
aWdpbi0+ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBpbnNlcnRPcmlnaW5TdGF0
ZW1lbnQtPmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7CisgICAgaWYgKCFleGVj
dXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDI2LDE2ICsxMDI5LDE2IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25D
YWNoZUdyb3VwJiBncm91cCwgQXBwCiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBuZXdlc3QgY2Fj
aGUgaW4gdGhlIGdyb3VwLgogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlVQREFURSBDYWNoZUdyb3VwcyBTRVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/
Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUdy
b3VwcyBTRVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCkgewogICAgICAgICBmYWlsdXJlUmVhc29uID0gRGlza09yT3BlcmF0aW9uRmFpbHVyZTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0
KDEsIGdyb3VwLm5ld2VzdENhY2hlKCktPnN0b3JhZ2VJRCgpKTsKLSAgICBzdGF0ZW1lbnQuYmlu
ZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMiwgZ3JvdXAuc3RvcmFnZUlEKCkpOwogICAgIAotICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzdGF0ZW1lbnQpKSB7CisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52
YWx1ZSgpKSkgewogICAgICAgICBmYWlsdXJlUmVhc29uID0gRGlza09yT3BlcmF0aW9uRmFpbHVy
ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEwOTMsMzQgKzEwOTYsMzQgQEAg
c3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25zdCBTdHJpbmcmIGhlYWRlcnMsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKIHsKICAgICBB
U1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCBzdGF0dXNDb2RlLCB0eXBl
LCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEu
ZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lO
IENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5p
ZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTk5FUiBKT0lOIENhY2hl
UmVzb3VyY2VEYXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEg
V0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hlPT8iKTsKLSAgICBpZiAoY2FjaGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gY2FjaGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgdXJsLCBzdGF0dXNDb2RlLCB0
eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURh
dGEuZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBK
T0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNl
cy5pZCAiCisgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9OIENhY2hlUmVz
b3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hl
PT8iX3MpOworICAgIGlmICghY2FjaGVTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgcHJlcGFyZSBjYWNoZSBzdGF0ZW1lbnQsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
Ci0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgY2FjaGVT
dGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogCiAgICAgYXV0byBjYWNoZSA9IEFw
cGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpOwogCiAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5
ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3Rvcnks
IG1fZmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKTsKIAogICAgIGludCByZXN1bHQ7Ci0gICAgd2hp
bGUgKChyZXN1bHQgPSBjYWNoZVN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAg
IHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICBVUkwgdXJsKHsgfSwgY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkp
OwogICAgICAgICAKLSAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDEpOworICAgICAgICBpbnQgaHR0cFN0YXR1c0NvZGUgPSBjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDEpOwogCi0gICAgICAgIHVuc2lnbmVkIHR5cGUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMikpOworICAgICAg
ICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IGJsb2I7Ci0gICAgICAg
IGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3Rvcig2LCBibG9iKTsKKyAgICAgICAg
Y2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcig2LCBibG9iKTsKICAgICAgICAg
CiAgICAgICAgIGF1dG8gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYmxvYikp
OwogICAgICAgICAKLSAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDcpOworICAgICAgICBTdHJpbmcgcGF0aCA9IGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDcpOwogICAgICAgICBsb25nIGxvbmcgc2l6ZSA9IDA7CiAgICAgICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHNpemUgPSBkYXRhLT5zaXplKCk7CkBAIC0xMTI5LDEz
ICsxMTMyLDEzIEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICAgICAgICAgIEZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKHBhdGgsIHNpemUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDMpOwotICAg
ICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRl
eHQoNCk7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDMpOworICAgICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDQpOwogICAgICAgICAKICAgICAgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBzaXplLCB0ZXh0RW5jb2RpbmdOYW1lKTsKICAgICAg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cFN0YXR1c0NvZGUpOwogCi0gICAgICAg
IFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg1KTsKKyAgICAg
ICAgU3RyaW5nIGhlYWRlcnMgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg1KTsKICAg
ICAgICAgcGFyc2VIZWFkZXJzKGhlYWRlcnMsIHJlc3BvbnNlKTsKICAgICAgICAgCiAgICAgICAg
IGF1dG8gcmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJl
c3BvbnNlLCB0eXBlLCBXVEZNb3ZlKGRhdGEpLCBwYXRoKTsKQEAgLTExNTUsMTQgKzExNTgsMTQg
QEAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2Fk
Q2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogICAgIH0KIAogICAgIC8vIExvYWQgdGhlIG9ubGlu
ZSBhbGxvd2xpc3QKLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0U3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8i
KTsKLSAgICBpZiAoYWxsb3dsaXN0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisg
ICAgYXV0byBhbGxvd2xpc3RTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCB1cmwgRlJPTSBDYWNoZVdoaXRlbGlzdFVSTHMgV0hFUkUgY2FjaGU9PyJfcyk7Cisg
ICAgaWYgKCFhbGxvd2xpc3RTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGFsbG93bGlzdFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBhbGxvd2xp
c3RTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogICAgIAogICAgIFZlY3RvcjxV
Ukw+IGFsbG93bGlzdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IGFsbG93bGlzdFN0YXRlbWVudC5z
dGVwKCkpID09IFNRTElURV9ST1cpCi0gICAgICAgIGFsbG93bGlzdC5hcHBlbmQoVVJMKHsgfSwg
YWxsb3dsaXN0U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoKHJlc3Vs
dCA9IGFsbG93bGlzdFN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBh
bGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0sIGFsbG93bGlzdFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCgwKSkpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgbG9hZCBjYWNoZSBvbmxpbmUgYWxsb3dsaXN0LCBlcnJvciBcIiVzXCIi
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTExNzAsMjkgKzExNzMsMjkgQEAgUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUo
dW5zaWduZWQgc3RvcmFnZUlEKQogICAgIGNhY2hlLT5zZXRPbmxpbmVBbGxvd2xpc3QoYWxsb3ds
aXN0KTsKIAogICAgIC8vIExvYWQgb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLgotICAg
IFNRTGl0ZVN0YXRlbWVudCBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIHdpbGRjYXJkIEZST00gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgV0hFUkUg
Y2FjaGU9PyIpOwotICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgIGF1dG8gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dz
QWxsTmV0d29ya1JlcXVlc3RzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghYWxsb3dsaXN0
V2lsZGNhcmRTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGFsbG93bGlz
dFdpbGRjYXJkU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGFsbG93bGlz
dFdpbGRjYXJkU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKLSAgICBy
ZXN1bHQgPSBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5zdGVwKCk7CisgICAgcmVzdWx0ID0g
YWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5l
IGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKIAotICAgIGNhY2hlLT5zZXRBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoYWxs
b3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpOworICAgIGNhY2hlLT5z
ZXRBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDApKTsKIAotICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgaWYgKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiVG9vIG1hbnkgcm93
cyBmb3Igb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnIik7CiAKICAgICAvLyBMb2FkIGZh
bGxiYWNrIFVSTHMuCi0gICAgU1FMaXRlU3RhdGVtZW50IGZhbGxiYWNrU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgbmFtZXNwYWNlLCBmYWxsYmFja1VSTCBGUk9NIEZhbGxiYWNrVVJMcyBX
SEVSRSBjYWNoZT0/Iik7Ci0gICAgaWYgKGZhbGxiYWNrU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBmYWxsYmFja1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFja1VS
THMgV0hFUkUgY2FjaGU9PyJfcyk7CisgICAgaWYgKCFmYWxsYmFja1N0YXRlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZmFsbGJhY2tTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0
b3JhZ2VJRCk7CisgICAgZmFsbGJhY2tTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQp
OwogICAgIAogICAgIEZhbGxiYWNrVVJMVmVjdG9yIGZhbGxiYWNrVVJMczsKLSAgICB3aGlsZSAo
KHJlc3VsdCA9IGZhbGxiYWNrU3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgCi0gICAg
ICAgIGZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoVVJMKHsgfSwgZmFsbGJhY2tT
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMSkpKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KSwgVVJMKHsgfSwgZmFsbGJhY2tTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpKSk7CiAKICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBsb2FkIGZhbGxiYWNrIFVSTHMsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwpAQCAtMTIxOSwyMyArMTIyMiwyMyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiAgICAgQVNTRVJUKGNhY2hlLT5n
cm91cCgpLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBBbGwgYXNzb2NpYXRlZCBkYXRhIHdpbGwg
YmUgZGVsZXRlZCBieSBkYXRhYmFzZSB0cmlnZ2Vycy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgaWQ9PyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJF
IGlkPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+c3RvcmFnZUlEKCkpOwotICAgIGV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNo
ZS0+c3RvcmFnZUlEKCkpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkp
OwogCiAgICAgY2FjaGUtPmNsZWFyU3RvcmFnZUlEKCk7CiAKICAgICBpZiAoY2FjaGUtPmdyb3Vw
KCktPm5ld2VzdENhY2hlKCkgPT0gY2FjaGUpIHsKICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGVy
ZSBhcmUgbm8gdHJpZ2dlcnMgb24gdGhlIGNhY2hlIGdyb3VwLCB3aGljaCBpcyB3aHkgdGhlIGNh
Y2hlIGhhZCB0byBiZSByZW1vdmVkIHNlcGFyYXRlbHkgYWJvdmUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBncm91cFN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyIpOwotICAgICAgICBpZiAoZ3JvdXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICAgICAgYXV0byBncm91cFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgaWQ9PyJfcyk7Cisg
ICAgICAgIGlmICghZ3JvdXBTdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgICAgICBncm91cFN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3VwKCktPnN0
b3JhZ2VJRCgpKTsKLSAgICAgICAgZXhlY3V0ZVN0YXRlbWVudChncm91cFN0YXRlbWVudCk7Cisg
ICAgICAgIGdyb3VwU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3VwKCktPnN0b3Jh
Z2VJRCgpKTsKKyAgICAgICAgZXhlY3V0ZVN0YXRlbWVudChncm91cFN0YXRlbWVudC52YWx1ZSgp
KTsKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICB9CkBA
IC0xMzE2LDE0ICsxMzE5LDEzIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2Vs
ZWN0VVJMcyhtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMi
KTsKLQotICAgIGlmIChzZWxlY3RVUkxzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzZWxlY3RVUkxzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbWFuaWZl
c3RVUkwgRlJPTSBDYWNoZUdyb3VwcyJfcyk7CisgICAgaWYgKCFzZWxlY3RVUkxzKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9yPFVSTD4gdXJsczsKLSAgICB3aGls
ZSAoc2VsZWN0VVJMcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgdXJscy5hcHBlbmQo
VVJMKHsgfSwgc2VsZWN0VVJMcy5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHNlbGVj
dFVSTHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICB1cmxzLmFwcGVuZChVUkwoeyB9
LCBzZWxlY3RVUkxzLT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gdXJsczsKIH0K
QEAgLTEzMzEsMzAgKzEzMzMsMzAgQEAgT3B0aW9uYWw8VmVjdG9yPFVSTD4+IEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMoKQogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZGVsZXRlQ2FjaGVHcm91cFJlY29yZChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogewog
ICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVz
cygpKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaWRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBpZCBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG1hbmlmZXN0VVJMPT8iKTsKLSAgICBpZiAoaWRT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGlkU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBX
SEVSRSBtYW5pZmVzdFVSTD0/Il9zKTsKKyAgICBpZiAoIWlkU3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZFN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7
CisgICAgaWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMKTsKIAotICAgIGludCBy
ZXN1bHQgPSBpZFN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IGlkU3RhdGVtZW50
LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpbnQ2NF90IGdyb3VwSWQgPSBpZFN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2
NCgwKTsKKyAgICBpbnQ2NF90IGdyb3VwSWQgPSBpZFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQo
MCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRF
TEVURSBGUk9NIENhY2hlcyBXSEVSRSBjYWNoZUdyb3VwPT8iKTsKLSAgICBpZiAoY2FjaGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2Fj
aGVHcm91cD0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoZ3JvdXBTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGdyb3VwU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVS
RSBpZD0/Il9zKTsKKyAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBjYWNoZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgZ3JvdXBJZCk7Ci0gICAgZXhl
Y3V0ZVN0YXRlbWVudChjYWNoZVN0YXRlbWVudCk7Ci0gICAgZ3JvdXBTdGF0ZW1lbnQuYmluZElu
dDY0KDEsIGdyb3VwSWQpOwotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOwor
ICAgIGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3JvdXBJZCk7CisgICAgZXhlY3V0ZVN0
YXRlbWVudChjYWNoZVN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICBncm91cFN0YXRlbWVudC0+Ymlu
ZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQu
dmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0MDksMjAgKzE0MTEsMjAgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2VsZWN0IG9ubHkgdGhlIHBhdGhzIGluIERlbGV0
ZWRDYWNoZVJlc291cmNlcyB0aGF0IGRvIG5vdCBhbHNvIGFwcGVhciBpbiBDYWNoZVJlc291cmNl
RGF0YToKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVD
VCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCAiCisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERlbGV0ZWRDYWNoZVJlc291cmNlcy5w
YXRoICIKICAgICAgICAgIkZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzICIKICAgICAgICAgIkxF
RlQgSk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCiAgICAgICAgICJPTiBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMucGF0aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBhdGggIgotICAgICAgICAiV0hFUkUgKFNF
TEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRo
KSBJUyBOVUxMIik7CisgICAgICAgICJXSEVSRSAoU0VMRUNUIERlbGV0ZWRDYWNoZVJlc291cmNl
cy5wYXRoID09IENhY2hlUmVzb3VyY2VEYXRhLnBhdGgpIElTIE5VTEwiX3MpOwogICAgIAotICAg
IGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGlmICghc2VsZWN0
UGF0aHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoc2VsZWN0UGF0aHMuc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgaWYgKHNlbGVjdFBhdGhzLT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGRvIHsKLSAgICAgICAgU3RyaW5nIHBhdGgg
PSBzZWxlY3RQYXRocy5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgcGF0aCA9IHNl
bGVjdFBhdGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xNDM1LDcgKzE0MzcsNyBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKGZ1bGxQYXRoKTsKLSAgICB9IHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FM
SVRFX1JPVyk7CisgICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KTsKICAgICAKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiREVMRVRFIEZST00gRGVsZXRlZENhY2hl
UmVzb3VyY2VzIik7CiB9CkBAIC0xNDQ2LDE3ICsxNDQ4LDE2IEBAIGxvbmcgbG9uZyBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSgpCiAgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gQ2FjaGVSZXNvdXJjZURh
dGEgV0hFUkUgcGF0aCBOT1QgTlVMTCIpOwotCi0gICAgaWYgKHNlbGVjdFBhdGhzLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHNlbGVjdFBhdGhzID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIHBh
dGggTk9UIE5VTEwiX3MpOworICAgIGlmICghc2VsZWN0UGF0aHMpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgbG9hZCBmbGF0IGZpbGUgY2FjaGUgcmVzb3VyY2UgZGF0YSwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAogICAgIGxvbmcgbG9uZyB0b3RhbFNpemUgPSAwOwogICAgIFN0cmluZyBmbGF0Rmls
ZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hl
RGlyZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7Ci0gICAgd2hpbGUgKHNlbGVj
dFBhdGhzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0gc2Vs
ZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMtPmdl
dENvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAg
IGxvbmcgbG9uZyBwYXRoU2l6ZSA9IDA7CiAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0Rmls
ZVNpemUoZnVsbFBhdGgsIHBhdGhTaXplKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IGY4ZWM5Y2Y0N2Q0YzFmYjAz
OGZmNTc3NjNjMTJhZGJiODc5NTIwZDMuLjJiZjM5MTJiZDRiNzE3MjIzYjQwY2M0OWMxNjZjMWM5
OTA1NTI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTgxLDggKzE4MSw2IEBAIGJvb2wgQ29va2llSmFyREI6
Om9wZW5EYXRhYmFzZSgpCiB2b2lkIENvb2tpZUphckRCOjpjbG9zZURhdGFiYXNlKCkKIHsKICAg
ICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
YXRlbWVudCA6IG1fc3RhdGVtZW50cykKLSAgICAgICAgICAgIHN0YXRlbWVudC52YWx1ZS5nZXQo
KS0+ZmluYWxpemUoKTsKICAgICAgICAgbV9zdGF0ZW1lbnRzLmNsZWFyKCk7CiAgICAgICAgIG1f
ZGF0YWJhc2UuY2xvc2UoKTsKICAgICB9CkBAIC0xOTMsNyArMTkxLDggQEAgdm9pZCBDb29raWVK
YXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYgKGlzT25NZW1vcnkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24i
X3MpOworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjczLDI1ICsyNzIsMjUgQEAgYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRh
YmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW50ZWdyaXR5
KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAgaWYgKGludGVncml0eS5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3JpdHkgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3MpOworICAgIGlmICghaW50
ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgZGF0YWJhc2Ug
aW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBp
bnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50IHJlc3VsdENvZGUgPSBp
bnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxJVEVfUk9XKSB7CiAg
ICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0ZXAgcmV0dXJuZWQgJWQi
LCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCBj
b2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbHVtbnMgPSBpbnRl
Z3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0gMSkgewogICAgICAgICBM
T0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBpbnRlZ3JpdHkgY2hlY2ss
IHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5UZXh0KDApOworICAg
IFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5UZXh0KDApOwogCiAgICAg
aWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJST1IoIkNvb2tpZSBkYXRh
YmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1bHRUZXh0LmFzY2lpKCkuZGF0
YSgpKTsKQEAgLTM4NiwyMCArMzg1LDE2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29r
aWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAKICAg
ICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RVcmwgfTsKIAot
ICAgIGNvbnN0IFN0cmluZyBzcWwgPQotICAgICAgICAiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21h
aW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUg
V0hFUkUgIlwKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3Vy
ZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSBXSEVSRSAiXAogICAgICAgICAiKE5PVCAoKHNlc3Npb24g
PSAwKSBBTkQgKGV4cGlyZXMgPCA/KSkpIgogICAgICAgICAiQU5EIChodHRwb25seSA9IENPQUxF
U0NFKE5VTExJRig/LCAtMSksIGh0dHBvbmx5KSkgIlwKICAgICAgICAgIkFORCAoc2VjdXJlID0g
Q09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2VjdXJlKSkgIlwKICAgICAgICAgIkFORCAoc2Vzc2lv
biA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlc3Npb24pKSAiXAogICAgICAgICAiQU5EICgo
ZG9tYWluID0gPykgT1IgKGRvbWFpbiBHTE9CID8pKSAiXAotICAgICAgICAiT1JERVIgQlkgbGVu
Z3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIjsKLQotICAgIGF1dG8gcHN0bXQgPSBtYWtlVW5p
cXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKyAgICAgICAgIk9SREVSIEJZ
IGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCJfcyk7CiAgICAgaWYgKCFwc3RtdCkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBzdG10LT5wcmVwYXJlKCk7CiAgICAg
cHN0bXQtPmJpbmRJbnQ2NCgxLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5t
aWxsaXNlY29uZHMoKSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMiwgaHR0cE9ubHkgPyAqaHR0cE9u
bHkgOiAtMSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMywgc2VjdXJlID8gKnNlY3VyZSA6IC0xKTsK
QEAgLTQxMSw5ICs0MDYsNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2llPj4gQ29va2llSmFyREI6
OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdAogICAgIGVsc2UKICAg
ICAgICAgcHN0bXQtPmJpbmRUZXh0KDYsIFN0cmluZygiKi4iKSArIHJlZ2lzdHJhYmxlRG9tYWlu
LnN0cmluZygpKTsKIAotICAgIGlmICghcHN0bXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KICAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwogCiAgICAgd2hpbGUgKHBzdG10LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewpAQCAtNDUzLDcgKzQ0NSw2IEBAIE9wdGlvbmFsPFZlY3Rv
cjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0CiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gY29va2llU2Vzc2lvbjsKICAgICAg
ICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsKICAgICB9Ci0gICAgcHN0bXQtPmZp
bmFsaXplKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTQ2MywxMSArNDU0LDExIEBA
IFZlY3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxDb29raWVzKCkKICAgICBWZWN0b3I8
Q29va2llPiByZXN1bHQ7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAhbV9kYXRhYmFzZS5pc09w
ZW4oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmcgc3FsID0gIlNF
TEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJl
LCBzZXNzaW9uIEZST00gQ29va2llIl9zOwotICAgIGF1dG8gcHN0bXQgPSBtYWtlVW5pcXVlPFNR
TGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKworICAgIGF1dG8gcHN0bXQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRo
LCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIl9zKTsKICAg
ICBpZiAoIXBzdG10KQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHBzdG10LT5wcmVwYXJl
KCk7CisKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAgICAgICAg
IENvb2tpZSBjb29raWU7CiAgICAgICAgIGNvb2tpZS5uYW1lID0gcHN0bXQtPmdldENvbHVtblRl
eHQoMCk7CkBAIC00ODIsNyArNDczLDYgQEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6Omdl
dEFsbENvb2tpZXMoKQogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IChwc3RtdC0+Z2V0Q29sdW1u
SW50KDcpID09IDEpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CiAg
ICAgfQotICAgIHBzdG10LT5maW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTU3MSwxNiArNTYxLDE1IEBAIGJvb2wgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKIEhhc2hTZXQ8U3Ry
aW5nPiBDb29raWVKYXJEQjo6YWxsRG9tYWlucygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCBTRUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsKLSAgICBzdGF0ZW1l
bnQucHJlcGFyZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOworICAgIGlmICghc3RhdGVtZW50KQorICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IGRvbWFpbnM7Ci0gICAgd2hp
bGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIGRvbWFp
biA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZG9tYWluID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBkb21haW5zLmFkZChkb21haW4pOwogICAgIH0KLQot
ICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgIHJldHVybiBkb21haW5zOwogfQogCkBAIC02
MzcsMTAgKzYyNiw5IEBAIGJvb2wgQ29va2llSmFyREI6OmRlbGV0ZUFsbENvb2tpZXMoKQogCiB2
b2lkIENvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3Fs
KQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1f
ZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJlcGFyZSgpOwotICAg
IEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICBtX3N0YXRlbWVudHMu
YWRkKHNxbCwgV1RGTW92ZShzdGF0ZW1lbnQpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsK
KyAgICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgc3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVl
UHRyKCkpOwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQxLDEzIEBAIFNRTGl0ZVN0YXRl
bWVudCYgQ29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQog
CiBib29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0
ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsK
KyAgICBpZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5l
cnJvcigpKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9y
OiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5z
dGVwKCk7CiAgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KSkgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRh
dGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCmluZGV4
IGMyMzliNDQyMGIzMjViMDA2NGM0ZjZhYjY5YjFiODFiN2EwYWQ3YmYuLmFkMjAyY2NjYmZiNzUw
N2JjMzc4MzgyZDdjNzcyZGVlYzY4Mzg4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4
LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFNRTGl0ZURh
dGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2RlIG9wZW5Nb2RlKQog
CiAgICAgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGlmICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCAi
UFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7Il9zKS5leGVjdXRlQ29tbWFuZCgpKQorICAgICAg
ICBpZiAoIWV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgdGVtcF9zdG9yZSA9IE1FTU9SWTsiX3MpKQog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291bGQgbm90IHNldCB0ZW1w
X3N0b3JlIHRvIG1lbW9yeSIpOwogICAgIH0KIApAQCAtMTk3LDEwICsxOTcsMTAgQEAgdm9pZCBT
UUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogewogICAgIG1fdXNlV0FMID0gdHJ1
ZTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCB3YWxTdGF0ZW1lbnQoKnRoaXMsICJQ
UkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3MpOwotICAgICAgICBpZiAod2FsU3RhdGVtZW50LnBy
ZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIHdhbFN0YXRlbWVu
dCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBqb3VybmFsX21vZGU9V0FMOyJfcyk7CisgICAg
ICAgIGlmICh3YWxTdGF0ZW1lbnQgJiYgd2FsU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgICAgICBTdHJpbmcgbW9kZSA9IHdhbFN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobW9kZSwgIndhbCIpKQogICAgICAgICAgICAgICAgIExPR19FUlJPUigi
am91cm5hbF9tb2RlIG9mIGRhdGFiYXNlIHNob3VsZCBiZSAnV0FMJywgYnV0IGlzICclcyciLCBt
b2RlLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCkBAIC0yMTAsOSArMjEwLDkgQEAgdm9pZCBTUUxp
dGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogCiAgICAgewogICAgICAgICBTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBjaGVja3BvaW50U3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHdh
bF9jaGVja3BvaW50KFRSVU5DQVRFKSJfcyk7Ci0gICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVt
ZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgaWYgKGNo
ZWNrcG9pbnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQorICAgICAgICBhdXRvIGNoZWNrcG9p
bnRTdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgd2FsX2NoZWNrcG9pbnQoVFJV
TkNBVEUpIl9zKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQgJiYgY2hlY2twb2lu
dFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGlmIChjaGVj
a3BvaW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCiAgICAgICAgICAgICAgICAgTE9HKFNR
TERhdGFiYXNlLCAiU1FMaXRlIGRhdGFiYXNlIGNoZWNrcG9pbnQgaXMgYmxvY2tlZCIpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGZhaWxl
ZCB0byBjaGVja3BvaW50OiAlcyIsIGxhc3RFcnJvck1zZygpKTsKQEAgLTI3Miw4ICsyNzIsOCBA
QCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjptYXhpbXVtU2l6ZSgpCiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9y
aXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQ
UkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOwotICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0
YXRlbWVudCgiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKKyAgICAgICAgbWF4UGFnZUNvdW50
ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAgICAg
IGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0yOTMsOSArMjkzLDggQEAgdm9p
ZCBTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUoaW50NjRfdCBzaXplKQogICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFs
c2UpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgbWFrZVN0cmluZygi
UFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50KSk7Ci0gICAgc3RhdGVt
ZW50LnByZXBhcmUoKTsKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQor
ICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJQUkFHTUEg
bWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBzZXQgbWF4aW11bSBzaXplIG9mIGRhdGFiYXNlIHRvICVsbGkgYnl0ZXMiLCBz
dGF0aWNfY2FzdDxsb25nIGxvbmc+KHNpemUpKTsKIAogICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1
ZSk7CkBAIC0zMTAsOCArMzA5LDggQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFi
bGVBdXRob3JpemVyKGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgcGFnZV9zaXplIl9zKTsKLSAgICAgICAgbV9wYWdlU2l6
ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
cHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7CisgICAgICAgIG1fcGFnZVNp
emUgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgICAg
IAogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KQEAgLTMyNyw4ICszMjYs
OCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKCkKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6
ZXIoZmFsc2UpOwogICAgICAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3YXMgYWRkZWQgaW4g
U1FMaXRlIDMuNC4xLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAi
UFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKLSAgICAgICAgZnJlZWxpc3RDb3VudCA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgZnJlZWxpc3RfY291bnQiX3MpOworICAgICAgICBmcmVlbGlzdENv
dW50ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAg
ICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0zNDIsOCArMzQxLDggQEAg
aW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6dG90YWxTaXplKCkKICAgICB7CiAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVy
KGZhbHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdN
QSBwYWdlX2NvdW50Il9zKTsKLSAgICAgICAgcGFnZUNvdW50ID0gc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBS
QUdNQSBwYWdlX2NvdW50Il9zKTsKKyAgICAgICAgcGFnZUNvdW50ID0gc3RhdGVtZW50ID8gc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIo
dHJ1ZSk7CiAgICAgfQogCkBAIC0zNzEsMTQgKzM3MCwyMiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNl
OjpzZXRCdXN5SGFuZGxlcihpbnQoKmhhbmRsZXIpKHZvaWQqLCBpbnQpKQogICAgICAgICBMT0co
U1FMRGF0YWJhc2UsICJCdXN5IGhhbmRsZXIgc2V0IG9uIG5vbi1vcGVuIGRhdGFiYXNlIik7CiB9
CiAKLWJvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYgc3Fs
KQorYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBxdWVy
eSkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWwpLmV4ZWN1dGVDb21t
YW5kKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAg
ICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKK30KKwor
Ym9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQor
eworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgcmV0
dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7CiB9CiAKIGJvb2wg
U1FMaXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0IFN0cmluZyYgc3Fs
KQogewotICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCkucmV0dXJuc0F0TGVh
c3RPbmVSZXN1bHQoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoc3Fs
KTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+cmV0dXJuc0F0TGVhc3RPbmVS
ZXN1bHQoKTsKIH0KIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dGFibGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiB0YWJsZW5hbWUpCkBAIC0zODYsMTggKzM5MywxNSBAQCBib29sIFNRTGl0ZURhdGFiYXNl
Ojp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRhYmxlbmFtZSkKICAgICBpZiAoIWlzT3Blbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgc3RhdGVtZW50ID0gIlNFTEVD
VCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9
ICciICsgdGFibGVuYW1lICsgIic7IjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKnRoaXMs
IHN0YXRlbWVudCk7Ci0gICAgc3FsLnByZXBhcmUoKTsKLSAgICByZXR1cm4gc3FsLnN0ZXAoKSA9
PSBTUUxJVEVfUk9XOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1l
ID0gJyIgKyB0YWJsZW5hbWUgKyAiJzsiKTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OmNs
ZWFyQWxsVGFibGVzKCkKIHsKLSAgICBTdHJpbmcgcXVlcnkgPSAiU0VMRUNUIG5hbWUgRlJPTSBz
cWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiX3M7CiAgICAgVmVjdG9yPFN0cmluZz4g
dGFibGVzOwotICAgIGlmICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBxdWVyeSkucmV0dXJuVGV4
dFJlc3VsdHMoMCwgdGFibGVzKSkgeworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsi
X3MpOworICAgIGlmICghc3RhdGVtZW50IHx8ICFzdGF0ZW1lbnQtPnJldHVyblRleHRSZXN1bHRz
KDAsIHRhYmxlcykpIHsKICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiVW5hYmxlIHRvIHJldHJp
ZXZlIGxpc3Qgb2YgdGFibGVzIGZyb20gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTU4MywxMCArNTg3LDEwIEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OmlzQXV0b0NvbW1p
dE9uKCkgY29uc3QKIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dHVybk9uSW5jcmVtZW50YWxBdXRv
VmFjdXVtKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01B
IGF1dG9fdmFjdXVtIl9zKTsKLSAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApOworICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IDA7CisgICAgaWYgKGF1dG8g
c3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGF1dG9fdmFjdXVtIl9zKSkKKyAg
ICAgICAgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKICAgICBp
bnQgZXJyb3IgPSBsYXN0RXJyb3IoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKIAogICAg
IC8vIENoZWNrIGlmIHdlIGdvdCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IHRoZSB2YWx1
ZSBvZiB0aGUgYXV0b192YWN1dW0gZmxhZy4KICAgICAvLyBJZiB3ZSBnb3QgYSBTUUxJVEVfQlVT
WSBlcnJvciwgdGhlbiB0aGVyZSdzIHByb2JhYmx5IGFub3RoZXIgdHJhbnNhY3Rpb24gaW4KQEAg
LTY0Myw0ICs2NDcsNzIgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6cmVsZWFzZU1lbW9yeSgpCiAg
ICAgc3FsaXRlM19kYl9yZWxlYXNlX21lbW9yeShtX2RiKTsKIH0KIAorc3RhdGljIEV4cGVjdGVk
PHNxbGl0ZTNfc3RtdCosIGludD4gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudChTUUxpdGVE
YXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHF1ZXJ5LCBzaXplX3QgcXVlcnlMZW5ndGgp
Cit7CisgICAgTG9ja0hvbGRlciBkYXRhYmFzZUxvY2soZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgp
KTsKKyAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeSk7CisK
KyAgICAvLyBQYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpbmNsdWRpbmcgdGhlIG51bGwg
Y2hhcmFjdGVyIHRvIHNxbGl0ZTNfcHJlcGFyZV92MjsKKyAgICAvLyB0aGlzIGxldHMgU1FMaXRl
IGF2b2lkIGFuIGV4dHJhIHN0cmluZyBjb3B5LgorICAgIHNpemVfdCBsZW5ndGhJbmNsdWRpbmdO
dWxsQ2hhcmFjdGVyID0gcXVlcnlMZW5ndGggKyAxOworCisgICAgc3FsaXRlM19zdG10KiBzdGF0
ZW1lbnQgeyBudWxscHRyIH07CisgICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7CisgICAg
aW50IGVycm9yID0gc3FsaXRlM19wcmVwYXJlX3YyKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwg
cXVlcnksIGxlbmd0aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIsICZzdGF0ZW1lbnQsICZ0YWlsKTsK
KyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKQorICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJz
cWxpdGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5LCBzcWxp
dGUzX2Vycm1zZyhkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKKworICAgIGlmICh0YWlsICYm
ICp0YWlsKQorICAgICAgICBlcnJvciA9IFNRTElURV9FUlJPUjsKKworICAgIGlmIChlcnJvciAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgc3FsaXRlM19maW5hbGl6ZShzdGF0ZW1lbnQpOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBz
dGF0ZW1lbnQ7Cit9CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRh
YmFzZTo6cHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAg
IENTdHJpbmcgcXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7Cisg
ICAgYXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlz
LCBxdWVyeS5kYXRhKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNl
OjpwcmVwYXJlU3RhdGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9
cyIsIHF1ZXJ5LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0
ZW1lbnQuZXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhp
cywgc3FsU3RhdGVtZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50
LCBpbnQ+IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVy
eSkKK3sKKyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1l
bnQoKnRoaXMsIHF1ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICgh
c3FsU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAi
U1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRl
bWVudCAle3B1YmxpY31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNR
TGl0ZVN0YXRlbWVudCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBl
Y3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJl
cGFyZUhlYXBTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3Ry
aW5nIHF1ZXJ5ID0gcXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1
dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVl
cnkuZGF0YSgpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJl
cGFyZUhlYXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31z
IiwgcXVlcnkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRl
bWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1l
bnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOwor
fQorCitFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRh
YmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1
dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVl
cnkuY2hhcmFjdGVycygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFz
ZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1
YmxpY31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxT
UUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQu
dmFsdWUoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBi
NzA4NTIwZmE2M2E5OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNl
N2NkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjgsOCArMjgsMTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3Fs
aXRlMy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdXBkYXRlTGFzdENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBl
eGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4
ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25l
UmVzdWx0KGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFi
bGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRl
U3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVT
dGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3Rl
ZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChj
b25zdCBTdHJpbmcmIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVS
ZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVy
YWwgcXVlcnkpOworCiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlv
bi4gVGhpcyBpcyB0aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVw
dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
Y3BwCmluZGV4IGRlYThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLjQ4Zjlh
ZWUyZDcxZDkxZmI0NTcwMjIyZDRlNWIwNzg4YTBiZTE1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0
MSw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRl
U3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVT
dGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3Rt
dCogc3RhdGVtZW50KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQot
ICAgICwgbV9zdGF0ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAg
ICBBU1NFUlQoc3RhdGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVt
ZW50KCkKK1NRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYm
IG90aGVyKQorICAgIDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0
ZW1lbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAg
ZmluYWxpemUoKTsKIH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVT
dGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVk
KTsKLQotICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRl
eCgpKTsKLQotICAgIENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0
ZjgoKTsKLSAgICAKLSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBx
dWVyeS5kYXRhKCkpOwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5j
bHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8g
dGhpcyBsZXRzIFNRTGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3Qg
bGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAg
IGNvbnN0IGNoYXIqIHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJl
cGFyZV92MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJ
bmNsdWRpbmdOdWxsQ2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChl
cnJvciAhPSBTUUxJVEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJl
cGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUz
X2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYg
KnRhaWwpCi0gICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBtX2lzUHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICBy
ZXR1cm4gZXJyb3I7CisgICAgc3FsaXRlM19maW5hbGl6ZShtX3N0YXRlbWVudCk7CiB9CiAKIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OnN0ZXAoKQogewogICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2Nr
KG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0g
ICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0KICAgICAvLyBUaGUgZGF0YWJhc2UgbmVlZHMgdG8g
dXBkYXRlIGl0cyBsYXN0IGNoYW5nZXMgY291bnQgYmVmb3JlIGVhY2ggc3RhdGVtZW50CiAgICAg
Ly8gaW4gb3JkZXIgdG8gY29tcHV0ZSBwcm9wZXJseSB0aGUgbGFzdENoYW5nZXMoKSByZXR1cm4g
dmFsdWUuCiAgICAgbV9kYXRhYmFzZS51cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKLSAgICBM
T0coU1FMRGF0YWJhc2UsICJTUUwgLSBzdGVwIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgp
KTsKICAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3N0ZXAobV9zdGF0ZW1lbnQpOwotICAgIGlmIChl
cnJvciAhPSBTUUxJVEVfRE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExP
RyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxuUXVlcnkgLSAlc1xuRXJy
b3IgLSAlcyIsIAotICAgICAgICAgICAgZXJyb3IsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCksIHNx
bGl0ZTNfZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0gICAgfQorICAgIGlm
IChlcnJvciAhPSBTUUxJVEVfRE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKQorICAgICAgICBM
T0coU1FMRGF0YWJhc2UsICJzcWxpdGUzX3N0ZXAgZmFpbGVkICglaSlcbkVycm9yIC0gJXMiLCBl
cnJvciwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKIAogICAg
IHJldHVybiBlcnJvcjsKIH0KLSAgICAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6OmZpbmFsaXplKCkK
LXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLSAgICBM
T0coU1FMRGF0YWJhc2UsICJTUUwgLSBmaW5hbGl6ZSAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHNxbGl0ZTNfZmluYWxpemUobV9zdGF0ZW1lbnQpOwot
ICAgIG1fc3RhdGVtZW50ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBpbnQgU1FMaXRl
U3RhdGVtZW50OjpyZXNldCgpIAogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlm
ICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9HKFNRTERh
dGFiYXNlLCAiU1FMIC0gcmVzZXQgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAg
IGludCBzdGF0dXMgPSBzcWxpdGUzX3Jlc2V0KG1fc3RhdGVtZW50KTsKICAgICBzcWxpdGUzX2Ns
ZWFyX2JpbmRpbmdzKG1fc3RhdGVtZW50KTsKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTI5LDQy
ICs4MywyMSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpyZXNldCgpCiAKIGJvb2wgU1FMaXRlU3Rh
dGVtZW50OjpleGVjdXRlQ29tbWFuZCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1f
aXNQcmVwYXJlZCk7Ci0gICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBm
aW5hbGl6ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0K
IAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KCkKIHsKLSAg
ICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9
IFNRTElURV9ST1cpIHsKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBmaW5hbGl6ZSgpOwotICAgIHJldHVybiB0cnVlOwotCisgICAgcmV0dXJu
IHN0ZXAoKSA9PSBTUUxJVEVfUk9XOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKQogewotICAgIEFTU0VSVCht
X2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKICAgICBBU1NF
UlQoYmxvYiB8fCAhc2l6ZSk7CiAgICAgQVNTRVJUKHNpemUgPj0gMCk7CiAKLSAgICBpZiAoIW1f
c3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FMSVRFX0VSUk9SOwotCiAgICAgcmV0dXJuIHNx
bGl0ZTNfYmluZF9ibG9iKG1fc3RhdGVtZW50LCBpbmRleCwgYmxvYiwgc2l6ZSwgU1FMSVRFX1RS
QU5TSUVOVCk7CiB9CiAKQEAgLTE4NSw3ICsxMTgsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpi
aW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQVNT
RVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBA
IC0yMDQsNyArMTM2LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIHRleHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50
IGluZGV4LCBpbnQgaW50ZWdlcikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBB
U1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4
KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAKQEAgLTIxMyw3ICsxNDQsNiBAQCBpbnQgU1FM
aXRlU3RhdGVtZW50OjpiaW5kSW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiAKIGludCBTUUxp
dGVTdGF0ZW1lbnQ6OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIHsKLSAg
ICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7
CiAKQEAgLTIyMiw3ICsxNTIsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQoaW50
IGluZGV4LCBpbnQ2NF90IGludGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3Vi
bGUoaW50IGluZGV4LCBkb3VibGUgbnVtYmVyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQp
OwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjMxLDcgKzE2MCw2IEBA
IGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3VibGUgbnVtYmVy
KQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kTnVsbChpbnQgaW5kZXgpCiB7Ci0gICAgQVNT
RVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBA
IC0yNDksMjYgKzE3NywxOSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVmFsdWUoaW50IGlu
ZGV4LCBjb25zdCBTUUxWYWx1ZSYgdmFsdWUpCiAKIHVuc2lnbmVkIFNRTGl0ZVN0YXRlbWVudDo6
YmluZFBhcmFtZXRlckNvdW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsK
LSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3Fs
aXRlM19iaW5kX3BhcmFtZXRlcl9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxpdGVT
dGF0ZW1lbnQ6OmNvbHVtbkNvdW50KCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAg
ICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRl
M19kYXRhX2NvdW50KG1fc3RhdGVtZW50KTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6Omlz
Q29sdW1uTnVsbChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFt
X3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygp
ICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3OCwx
OSArMTk5LDE0IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkK
IGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbkRlY2xhcmVkQXNCbG9iKGludCBjb2wpCiB7
CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KSB7Ci0gICAgICAg
IGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmll
dyhzcWxpdGUzX2NvbHVtbl9kZWNsdHlwZShtX3N0YXRlbWVudCwgY29sKSksICJibG9iIik7CiB9
CiAKIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIHsKICAg
ICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChw
cmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNv
bCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNfY29sdW1uX25hbWUxNihtX3N0YXRlbWVudCwg
Y29sKSkpOwpAQCAtMjk5LDkgKzIxNSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENv
bHVtbk5hbWUoaW50IGNvbCkKIFNRTFZhbHVlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFs
dWUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1l
bnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoY29s
dW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMzAsOSAr
MjQ1LDggQEAgU1FMVmFsdWUgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29s
KQogU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogewogICAg
IEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHBy
ZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29s
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fdGV4dDE2KG1fc3RhdGVtZW50LCBj
b2wpKSwgc3FsaXRlM19jb2x1bW5fYnl0ZXMxNihtX3N0YXRlbWVudCwgY29sKSAvIHNpemVvZihV
Q2hhcikpOwpAQCAtMzQxLDkgKzI1NSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENv
bHVtblRleHQoaW50IGNvbCkKIGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJs
ZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVu
dCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAg
ICAgIHJldHVybiAwLjA7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkg
IT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1uQ291bnQo
KSA8PSBjb2wpCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1u
X2RvdWJsZShtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM1Miw5ICsyNjUsOCBAQCBkb3VibGUgU1FM
aXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmdldENvbHVtbkludChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRF
X1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5n
KCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChj
b2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0
ZTNfY29sdW1uX2ludChtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM2Myw5ICsyNzUsOCBAQCBpbnQg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5JbnQoaW50IGNvbCkKIGludDY0X3QgU1FMaXRlU3Rh
dGVtZW50OjpnZXRDb2x1bW5JbnQ2NChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0g
U1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0
ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAg
IGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IHNxbGl0ZTNfY29sdW1uX2ludDY0KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzc1LDcgKzI4Niw3
IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29s
KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHBy
ZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGlu
ZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
ICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA4LDcgQEAgdm9pZCBT
UUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hh
cj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRl
bWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWhhc1N0
YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIHJlc3Vs
dC5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDIzLDcgKzMzNCw3IEBAIHZv
aWQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNvbCwgVmVjdG9y
PHVpbnQ4X3Q+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICgh
bV9zdGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYg
KCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAg
ICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ1MSwxOSArMzYy
LDE2IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyhpbnQgY29sLCBW
ZWN0b3I8U3RyaW5nPiYgdikKIAogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVu
dCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAg
ICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAg
ICAgdi5hcHBlbmQoZ2V0Q29sdW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7
CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRp
bmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4
dFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc5LDE2IEBAIGJvb2wgU1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+JiB2KQog
ewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxp
emUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAog
ICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29s
dW1uSW50KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFz
ZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsK
LSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0
YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNR
TERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzOiBFcnJvciByZWFk
aW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC00OTEsMTkgKzM5NiwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJu
SW50NjRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ2NF90PiYgdikKIHsKICAgICB2LmNsZWFy
KCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYg
KHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
aGFzU3RhcnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAoc3Rl
cCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludDY0KGNvbCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3Io
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9H
KFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkg
JXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAi
U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0
cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTUxMSwyNSArNDEzLDIyIEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1
bHRzKGludCBjb2wsIFZlY3Rvcjxkb3VibGU+JiB2KQogewogICAgIHYuY2xlYXIoKTsKIAotICAg
IGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgp
ICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVk
U3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FM
SVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uRG91YmxlKGNvbCkpOwogICAgIGJv
b2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3Rh
dGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAg
ICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNFeHBpcmVkKCkKK2Jvb2wgU1FMaXRlU3RhdGVtZW50OjpoYXNTdGFydGVk
U3RlcHBpbmcoKQogewotICAgIHJldHVybiAhbV9zdGF0ZW1lbnQ7CisgICAgcmV0dXJuIHNxbGl0
ZTNfc3RtdF9idXN5KG1fc3RhdGVtZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGE3
YWNkZTVjZmM1YjJkMzU2MmIxZmI1MWZkNmE3MWJkOTVjY2U0MDguLjYzNTEyYmI2ZWI0OWE2ZWUx
OWU3MWYxYzY3YjFmZThmMjlmNjVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgU1FMaXRlU3RhdGVtZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTUUxpdGVTdGF0ZW1lbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBjb25z
dCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAgICAK
LSAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcHJlcGFyZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsK
QEAgLTUwLDIzICs0OSwxOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQg
YmluZFBhcmFtZXRlckNvdW50KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgc3Rl
cCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIGludCBmaW5hbGl6ZSgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIGludCByZXNldCgpOwogICAgIAotICAgIGludCBwcmVwYXJlQW5kU3RlcCgpIHsgaWYgKGlu
dCBlcnJvciA9IHByZXBhcmUoKSkgcmV0dXJuIGVycm9yOyByZXR1cm4gc3RlcCgpOyB9Ci0gICAg
Ci0gICAgLy8gcHJlcGFyZXMsIHN0ZXBzLCBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KKyAgICAv
LyBzdGVwcyBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KICAgICAvLyByZXR1cm5zIHRydWUgaWYg
YWxsIDMgc3RlcHMgc3VjY2VlZCB3aXRoIHN0ZXAoKSByZXR1cm5pbmcgU1FMSVRFX0RPTkUKICAg
ICAvLyByZXR1cm5zIGZhbHNlIG90aGVyd2lzZSAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBl
eGVjdXRlQ29tbWFuZCgpOwogICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVwcywgYW5kIGZpbmFs
aXplcy4gIAorICAgIC8vIHN0ZXBzLCBhbmQgZmluYWxpemVzLgogICAgIC8vIHJldHVybnMgdHJ1
ZSBpcyBzdGVwKCkgcmV0dXJucyBTUUxJVEVfUk9XCiAgICAgLy8gcmV0dXJucyBmYWxzZSBvdGhl
cndpc2UKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KCk7CiAKLSAgICBib29sIGlz
RXhwaXJlZCgpOwotCiAgICAgLy8gUmV0dXJucyAtMSBvbiBsYXN0LXN0ZXAgZmFpbGluZy4gIE90
aGVyd2lzZSwgcmV0dXJucyBudW1iZXIgb2Ygcm93cwogICAgIC8vIHJldHVybmVkIGluIHRoZSBs
YXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwpAQCAtOTAsMTUgKzg0LDE1IEBAIHB1
YmxpYzoKIAogICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJh
c2U7IH0KICAgICAKLSAgICBjb25zdCBTdHJpbmcmIHF1ZXJ5KCkgY29uc3QgeyByZXR1cm4gbV9x
dWVyeTsgfQotICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU1FMaXRlRGF0YWJhc2U7
CisgICAgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiwgc3FsaXRlM19zdG10Kik7CisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHByZXBhcmVkIHN0YXRlbWVudCBoYXMgYmVlbiBz
dGVwcGVkIGF0IGxlYXN0IG9uY2UgdXNpbmcgc3RlcCgpIGJ1dCBoYXMgbmVpdGhlciBydW4gdG8g
Y29tcGxldGlvbiAocmV0dXJuZWQgU1FMSVRFX0RPTkUgZnJvbSBzdGVwKCkpIG5vciBiZWVuIHJl
c2V0KCkuCisgICAgYm9vbCBoYXNTdGFydGVkU3RlcHBpbmcoKTsKKwogICAgIFNRTGl0ZURhdGFi
YXNlJiBtX2RhdGFiYXNlOwotICAgIFN0cmluZyBtX3F1ZXJ5OwogICAgIHNxbGl0ZTNfc3RtdCog
bV9zdGF0ZW1lbnQ7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNQcmVwYXJlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCmluZGV4IGY5
YzI0YjhlZDU3MTgyZWE1Nzg4N2EwMDMwN2VkOGRiOGEzZDBmZmQuLjFhOGE2OTFlNDkwYzliMDIz
YThlZGVjMDQ5MWY4ZTllODZmM2UwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcApAQCAtMTMwLDI1ICsxMzAsMjUgQEAgYm9vbCBT
ZWFyY2hQb3B1cE1lbnVEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIlNlYXJjaCIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgaW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hl
Y2s7Iik7Ci0gICAgaWYgKGludGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
YXV0byBpbnRlZ3JpdHkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlj
a19jaGVjazsiX3MpOworICAgIGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGV4ZWN1dGUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVw
KCk7CisgICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVz
dWx0Q29kZSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1
aWNrX2NoZWNrIHN0ZXAgcmV0dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50
KCk7CisgICAgaW50IGNvbHVtbnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYg
KGNvbHVtbnMgIT0gMSkgewogICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMg
cGVyZm9ybWluZyBpbnRlZ3JpdHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVn
cml0eS5nZXRDb2x1bW5UZXh0KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5
LT5nZXRDb2x1bW5UZXh0KDApOwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAg
ICAgICBMT0dfRVJST1IoIlNlYXJjaCBhdXRvc2F2ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sg
ZmFpbGVkIC0gJXMiLCByZXN1bHRUZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTIyNCwxNyArMjI0
LDE5IEBAIGJvb2wgU2VhcmNoUG9wdXBNZW51REI6Om9wZW5EYXRhYmFzZSgpCiAKIHZvaWQgU2Vh
cmNoUG9wdXBNZW51REI6OmNsb3NlRGF0YWJhc2UoKQogewotICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKSB7Ci0gICAgICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+Zmlu
YWxpemUoKTsKLSAgICAgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50LT5maW5hbGl6ZSgp
OwotICAgICAgICBtX3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUo
KTsKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgIH0KKyAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9y
TmFtZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50
ID0gbnVsbHB0cjsKKyAgICBtX3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwogfQogCiB2b2lkIFNlYXJjaFBvcHVwTWVu
dURCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgw
KTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJB
R01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0
ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVy
c2lvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzEsMjMgKzI3MywyNSBAQCB2b2lkIFNlYXJj
aFBvcHVwTWVudURCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKIAogaW50IFNl
YXJjaFBvcHVwTWVudURCOjpleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29s
IGlnbm9yZUVycm9yKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAg
c3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBjaGVj
a1NRTGl0ZVJldHVybkNvZGUoc3RhdGVtZW50LmVycm9yKCkpOworICAgICAgICByZXR1cm4gc3Rh
dGVtZW50LmVycm9yKCk7CisgICAgfQogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7
CisgICAgaW50IHJldCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXQgIT0gU1FMSVRF
X09LICYmIHJldCAhPSBTUUxJVEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3Jl
RXJyb3IpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVz
Iiwgc3FsLmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLQogICAg
IHJldHVybiByZXQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IFNlYXJj
aFBvcHVwTWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkK
IHsKLSAgICBhdXRvIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2Rh
dGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnByZXBhcmUoKTsKLSAgICBB
U1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAgcmV0dXJuIHN0YXRlbWVu
dDsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQo
c3FsKTsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCmluZGV4IDg5MmMz
ZjQ5ZTkwMTRhMzVmZTkyOTg0ZWY5YTI5MDRhN2JkZWQ1NjAuLmIwYzcxNjFhODA2YTg2OGVjNGZm
NDQ3NjUzYmI4NTNmYzA5Njg0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC0y
ODUsMTEgKzI4NSwxMSBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlk
UmVjb3Jkc1RhYmxlKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAg
IC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0
dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUg
UmVjb3JkcyB0YWJsZS4iOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iX3M7CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFs
bCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0g
U1FMSVRFX0RPTkUpIHsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKICAgICAgICAgaWYgKHNxbGl0ZVJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICAgICAgcmV0dXJuICJFcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIjsKIAotICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAg
QVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC00MjcsMTggKzQyNywxOCBAQCBi
b29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2
aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9u
KCptX2RhdGFiYXNlKTsKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7Ci0gICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LT5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0U3RhdGVtZW50
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBhdXRv
JiBzY3JpcHRTdG9yYWdlID0gdGhpcy0+c2NyaXB0U3RvcmFnZSgpOwogICAgIGZvciAoYXV0byYg
cmVnaXN0cmF0aW9uIDogcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0g
PyIpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IHNxbC5iaW5kVGV4dCgxLCByZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJE
RUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICBpZiAoIWRlbGV0
ZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBy
ZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGRlbGV0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHJlbW92ZSByZWdpc3Ry
YXRpb24gZGF0YSBmcm9tIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtNDU3LDE5ICs0NTcsMTkgQEAgYm9vbCBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRl
eHREYXRhPiYKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBjZXJ0aWZpY2F0ZUlu
Zm9FbmNvZGVyOwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyIDw8IGRhdGEuY2VydGlm
aWNhdGVJbmZvOwogCi0gICAgICAgIGlmIChzcWwuYmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRp
b24ua2V5LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9y
dCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgzLCBkYXRhLnJl
Z2lzdHJhdGlvbi5zY29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoNCwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvcE9yaWdp
bigpLmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5iaW5kRG91YmxlKDUsIGRhdGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmlu
ZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVW
aWFDYWNoZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDcsIGRh
dGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5i
aW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSwg
Y3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3Fs
LmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigp
LCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRh
YmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9y
dCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoMywgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucGF0aCgpLnRvU3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg0LCBkYXRh
LnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kRG91YmxlKDUsIGRh
dGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2Fj
aGUpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53
b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQo
MTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZl
cigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIGNlcnRpZmljYXRl
SW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29y
a2VyLCAiRmFpbGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MDIs
MjYgKzUwMiwyNiBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMo
KQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUkVMRUFTRV9MT0coU2Vydmlj
ZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiIpOwotICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9z
KTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzcWwgPSBt
X2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsK
KyAgICBpZiAoIXNxbCkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZyb20gcmVjb3JkcyB0YWJs
ZSAoIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogCi0gICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgaW50IHJlc3Vs
dCA9IHNxbC0+c3RlcCgpOwogCi0gICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1
bHQgPSBzcWwuc3RlcCgpKSB7CisgICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1
bHQgPSBzcWwtPnN0ZXAoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEltcG9ydGluZyBhIHJlZ2lzdHJh
dGlvbiBmcm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBhdXRvIGtleSA9IFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtleShzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7
Ci0gICAgICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0
KDEpIH07Ci0gICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLmdldENvbHVtblRleHQoMik7Cisg
ICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFi
YXNlS2V5KHNxbC0+Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGF1dG8gb3JpZ2luVVJMID0g
VVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCgxKSB9OworICAgICAgICBhdXRvIHNjb3Bl
UGF0aCA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgyKTsKICAgICAgICAgYXV0byBzY29wZVVSTCA9IFVS
TCB7IG9yaWdpblVSTCwgc2NvcGVQYXRoIH07Ci0gICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC5nZXRDb2x1bW5UZXh0
KDMpKTsKLSAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1lID0gV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKHNxbC5nZXRDb2x1bW5Eb3VibGUoNCkpOwotICAgICAgICBhdXRvIHVwZGF0ZVZp
YUNhY2hlID0gc3RyaW5nVG9VcGRhdGVWaWFDYWNoZShzcWwuZ2V0Q29sdW1uVGV4dCg1KSk7Ci0g
ICAgICAgIGF1dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0KDYp
IH07Ci0gICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmluZ1RvV29ya2VyVHlwZShzcWwuZ2V0
Q29sdW1uVGV4dCg3KSk7CisgICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC0+Z2V0Q29sdW1uVGV4dCgzKSk7CisgICAg
ICAgIGF1dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhz
cWwtPmdldENvbHVtbkRvdWJsZSg0KSk7CisgICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBz
dHJpbmdUb1VwZGF0ZVZpYUNhY2hlKHNxbC0+Z2V0Q29sdW1uVGV4dCg1KSk7CisgICAgICAgIGF1
dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCg2KSB9OworICAg
ICAgICBhdXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLT5nZXRDb2x1bW5U
ZXh0KDcpKTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJp
dHlQb2xpY3lEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOCwgY29u
dGVudFNlY3VyaXR5UG9saWN5RGF0YSk7CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLmRhdGEoKSwgY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YS5zaXplKCkpOwogICAgICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAg
aWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKSB7CkBAIC01MzIsMTAgKzUzMiwx
MCBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC5n
ZXRDb2x1bW5UZXh0KDkpOworICAgICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLT5nZXRD
b2x1bW5UZXh0KDkpOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzY3JpcHRSZXNvdXJjZU1h
cERhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291
cmNlTWFwRGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDEwLCBzY3Jp
cHRSZXNvdXJjZU1hcERhdGEpOwogICAgICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNv
bnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAKICAgICAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0
UmVzb3VyY2VNYXBEYXRhLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhLnNpemUoKSk7CkBA
IC01NTAsNyArNTUwLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNv
cmRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0aWZpY2F0ZUlu
Zm9EYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0
ZUluZm9EYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRp
ZmljYXRlSW5mb0RhdGEpOwogICAgICAgICBPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRp
ZmljYXRlSW5mbzsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmlj
YXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0YS5kYXRhKCksIGNlcnRpZmljYXRlSW5m
b0RhdGEuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IGUyYzc3MTVhMzE1NmEwZmY2OTYyYWRlZjNkOWZmYWE2
MGIxZTA3NmIuLjc5N2JmN2MxYWFhZDEwYmVhNjgzOWZlZmQ3YzUzNWIwMTJhOTgwMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2V0QnVzeVRpbWVvdXQobV9kYXRhYmFz
ZSwgIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIik7Ci0gICAgaWYgKHNldEJ1c3lUaW1lb3V0
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgc2V0QnVzeVRpbWVvdXQuc3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKKyAgICBhdXRvIHNldEJ1c3lUaW1lb3V0ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAwMCJfcyk7CisgICAgaWYgKCFzZXRCdXN5
VGltZW91dCB8fCBzZXRCdXN5VGltZW91dC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQwMSwyMiAr
NDAxLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5J
VFBEYXRhYmFzZSgpCiBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKIHsKICAg
ICBWZWN0b3I8U3RyaW5nPiBtaXNzaW5nVGFibGVzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
PSd0YWJsZScgYW5kIHRibF9uYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBh
bmQgdGJsX25hbWU9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBl
cnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAg
Zm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkp
IHsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5iaW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVf
T0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNj
aGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hl
bWEgc2NoZW1hIGlzIG1pc3NpbmcgdGFibGU6ICVzIiwgdGhpcywgdGFibGUuYXNjaWkoKS5kYXRh
KCkpOwogICAgICAgICAgICAgbWlzc2luZ1RhYmxlcy5hcHBlbmQoU3RyaW5nKHRhYmxlKSk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIHN0YXRlbWVudC0+
cmVzZXQoKTsKICAgICB9CiAgICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtNDI2LDggKzQyNiw4IEBAIE9wdGlvbmFsPFZlY3Rv
cjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JN
aXNzaW5nVGFiCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVu
YWJsZUZvcmVpZ25LZXlzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZW5hYmxlRm9yZWlnbktl
eXMobV9kYXRhYmFzZSwgIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiIpOwotICAgIGlmIChlbmFi
bGVGb3JlaWduS2V5cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGVuYWJsZUZvcmVpZ25LZXlz
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7
CisgICAgaWYgKCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5
cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CkBAIC00MzYsMzEgKzQzNiwzMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cygpCiAKIFRhYmxlQW5kSW5k
ZXhQYWlyIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVB
bmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IGdldFRhYmxlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFO
RCB0eXBlID0gJ3RhYmxlJyIpKTsKLSAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZ2V0VGFibGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUnIikp
OworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1
cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggc2NoZW1hIGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChn
ZXRUYWJsZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChnZXRUYWJs
ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRv
IGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgU3RyaW5nIGNyZWF0
ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIFN0
cmluZyBjcmVhdGVUYWJsZVF1ZXJ5ID0gZ2V0VGFibGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0SW5kZXhTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9
JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChnZXRJbmRl
eFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBnZXRJbmRleFN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBB
TkQgdHlwZSA9ICdpbmRleCciKSk7CisgICAgaWYgKCFnZXRJbmRleFN0YXRlbWVudCkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBw
cmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4OwotICAgIGlmIChnZXRJbmRleFN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0g
U3RyaW5nKGdldEluZGV4U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgIGlmIChnZXRJ
bmRleFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byByYXdJ
bmRleCA9IFN0cmluZyhnZXRJbmRleFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CiAgICAg
ICAgIGlmICghcmF3SW5kZXguaXNFbXB0eSgpKQogICAgICAgICAgICAgaW5kZXggPSByYXdJbmRl
eDsKICAgICB9CkBAIC00ODAsMjAgKzQ4MCwyMCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaAog
CiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVl
SW5kaWNlcygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUg
PSAnaW5kZXgnIikpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3Jr
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1
ZUluZGljZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNvdW50
LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKHN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1p
c3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5k
ZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApIDwgZXhwZWN0ZWRJ
bmRleENvdW50KQorICAgIGlmIChzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA8IGV4cGVjdGVk
SW5kZXhDb3VudCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBA
IC01NTQsOCArNTU0LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYg
dGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAg
IGF1dG8gcXVlcnkgPSBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZSwgIiBSRU5BTUUg
VE8gXyIsIHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGFsdGVyVGFibGUobV9kYXRh
YmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAoYWx0ZXJUYWJsZS5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LIHx8IGFsdGVyVGFibGUuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8g
YWx0ZXJUYWJsZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgICAg
IGlmICghYWx0ZXJUYWJsZSB8fCBhbHRlclRhYmxlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nh
cnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDE2ICs1NzAsMTYgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVj
ZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhR
dWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAgIGF1dG8gcXVlcnkgPSBpbnNlcnREaXN0aW5jdFZh
bHVlc0luVGFibGVRdWVyeSh0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBtaWdyYXRl
VGFibGVEYXRhKG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKG1pZ3JhdGVUYWJsZURh
dGEucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBtaWdyYXRlVGFibGVEYXRhLnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVUYWJsZURhdGEgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEg
fHwgbWlncmF0ZVRhYmxlRGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0
byBtaWdyYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBkcm9wUXVlcnkgPSBtYWtl
U3RyaW5nKCJEUk9QIFRBQkxFIF8iLCB0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBk
cm9wVGFibGVRdWVyeShtX2RhdGFiYXNlLCBkcm9wUXVlcnkpOwotICAgICAgICBpZiAoZHJvcFRh
YmxlUXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBkcm9wVGFibGVRdWVyeS5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudChkcm9wUXVlcnkpOworICAgICAgICBpZiAoIWRyb3BUYWJsZVF1
ZXJ5IHx8IGRyb3BUYWJsZVF1ZXJ5LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVk
IHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTk3LDE3ICs1OTcsMTcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVj
ZXNzYXJ5KCkKIAogVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlBSQUdNQSB0
YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwg
dGFibGVOYW1lLCAiKSIpKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRD
b2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgVmVjdG9y
PFN0cmluZz4gY29sdW1uczsKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOwor
ICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1
dG8gbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICAgICAgY29sdW1ucy5h
cHBlbmQobmFtZSk7CiAgICAgfQogCkBAIC02MjIsMTggKzYyMiwxOCBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoU3Ry
aW5nJiYgdGFibAogICAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5zLmNvbnRhaW5zKGNvbHVtbikp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVO
YW1lLCAiIEFERCBDT0xVTU4gIiwgY29sdW1uKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUs
ICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRv
IHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgZXJy
b3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBhZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAg
ICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiB9CiAKQEAgLTY0OCwxMyArNjQ4LDEzIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1
bW5zSWZOZWNlc3NhcnkoKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhpc3RpbmdDb2x1
bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUmJiBleHBlY3Rl
ZENvbHVtbk5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAi
LCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7Ci0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiQUxURVIgVEFCTEUg
IiwgdGFibGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4gIiwgZXhpc3RpbmdDb2x1bW5OYW1lLCAiIFRP
ICIsIGV4cGVjdGVkQ29sdW1uTmFtZSkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5n
Q29sdW1uc1RvVGFibGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byByZW5hbWUgY29sdW1u
IGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzEyLDE1ICs3MTIsMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIGFuIGV4aXN0aW5nIE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJP
TSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIik7Ci0gICAg
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNx
bCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9tYWlucyciX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JzZXJ2ZWRE
b21haW5zIHRhYmxlLiIpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBP
YnNlcnZlZERvbWFpbnMgdGFibGUgYXQgYWxsLCBvciB0aGVyZSBpcyBhbiBlcnJvciBleGVjdXRp
bmcgdGhlIGZldGNoLCBkZWxldGUgdGhlIGZpbGUuCi0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwog
ICAgICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNz
YXJ5KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRT
Y2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVt
YSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1
cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTc1MSwxMiArNzUxLDE0IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vz
c2FyeSgpCiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0
IFN0cmluZyYgbG9nU3RyaW5nKSBjb25zdAogewogICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2Rh
dGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBh
dXRvIHN0YXRlbWVudE9yRXJyb3IgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHF1
ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnRPckVycm9yKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5nLmFzY2lpKCkuZGF0YSgpLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsK
ICAgICAgICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZhbHVlKCku
bW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVt
ZW50LmdldCgpIH07CiB9CkBAIC0xMDA0LDkgKzEwMDYsOCBAQCBPcHRpb25hbDx1bnNpZ25lZD4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byBzY29wZWRT
dGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQsIGRvbWFpbklERnJvbVN0cmluZ1F1ZXJ5LCAiZG9tYWluSUQiX3MpOwotICAgIGlmICgh
c2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwg
ZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQuIFN0YXRlbWVudDogJXMuIEVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgc2NvcGVkU3RhdGVtZW50
LT5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAg
IGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9t
YWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQuIEVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIH0KQEAgLTEwMzksMjMgKzEwNDAsMjMgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2UKIAog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQogewotICAgIFNR
TGl0ZVN0YXRlbWVudCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFr
ZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAi
ICk7IikpOworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoc3RhdGVtZW50LCBlbnN1cmVBbmRNYWtlRG9t
YWluTGlzdChkb21haW5MaXN0KSwgIiApOyIpKTsKICAgICAKLSAgICBpZiAoaW5zZXJ0UmVsYXRp
b25zaGlwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0
UmVsYXRpb25zaGlwU3RhdGVtZW50LmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykg
eworICAgIGlmICghaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50CisgICAgICAgIHx8IGluc2Vy
dFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09L
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHN0YXRlbWVudC5jb250YWlu
cygiUkVQTEFDRSIpKSB7Ci0gICAgICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQu
YmluZERvdWJsZSgyLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVu
dC0+YmluZERvdWJsZSgyLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MTIyOSwxNyArMTIzMCwxNyBAQCBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdAogCiAgICAgVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IHRoaXJkUGFy
dHlEYXRhTGlzdDsKICAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVy
ID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU6OkFsbCA/ICIlIiA6ICIxIjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc29ydGVkU3Rh
dGlzdGljcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9pblN1YlN0YXRpc3Rp
Y3NGb3JTb3J0aW5nKCkpKTsKLSAgICBpZiAoc29ydGVkU3RhdGlzdGljcy5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MuYmluZFRleHQoMSwgcHJldmFs
ZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MuYmlu
ZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHNvcnRlZFN0YXRpc3RpY3Mg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUICIsIGpvaW5T
dWJTdGF0aXN0aWNzRm9yU29ydGluZygpKSk7CisgICAgaWYgKCFzb3J0ZWRTdGF0aXN0aWNzCisg
ICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDEsIHByZXZhbGVudERvbWFpbnNC
aW5kUGFyYW1ldGVyKQorICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLT5iaW5kVGV4dCgyLCAi
JSIpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5
RGF0YSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIHRoaXJkUGFydHlEYXRhTGlzdDsKICAgICB9Ci0gICAgd2hpbGUgKHNvcnRlZFN0YXRpc3Rp
Y3Muc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5
KHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDEpKSkgewotICAgICAgICAgICAgYXV0byB0
aGlyZFBhcnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0aXN0aWNzLmdldENvbHVtbkludCgwKTsKKyAg
ICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmdldENvbHVtbkludCgx
KSkpIHsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlz
dGljcy0+Z2V0Q29sdW1uSW50KDApOwogICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWlu
ID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7
CiAgICAgICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGly
ZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklE
LCB0aGlyZFBhcnR5RG9tYWluKSB9KTsKICAgICAgICAgfQpAQCAtMTI2NSw5ICsxMjY2LDggQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNS
ZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJ
TiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9t
YWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VT
dHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRh
dGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFp
bnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0
ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3Rp
Y3NGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQpAQCAtMTI4NSwzMSArMTI4NSwzMCBAQCB1bnNpZ25lZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50
RG9tYWlucwogICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKIAogICAgIFN0ZFNldDx1bnNp
Z25lZD4gbmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFN1
YnJlc291cmNlcyhtX2RhdGFiYXNlLCAiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5O
RVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJj
ZURvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7Ci0g
ICAgaWYgKGZpbmRTdWJyZXNvdXJjZXMucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBmaW5kU3VicmVzb3VyY2VzLmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFN1YnJl
c291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1
cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4g
ZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2Vz
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRT
dWJyZXNvdXJjZXMuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2Vz
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5k
U3VicmVzb3VyY2VzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0
ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAg
ICAgICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlm
aWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBmaW5kVG9wRnJhbWVzKG1fZGF0YWJhc2UsICJTRUxFQ1QgVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBJ
Tk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRhcmdldERvbWFp
bklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7Ci0gICAgaWYg
KGZpbmRUb3BGcmFtZXMucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBmaW5kVG9w
RnJhbWVzLmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIGZpbmRUb3BGcmFtZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9t
YWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQg
V0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQg
PSAwIl9zKTsKKyAgICBpZiAoIWZpbmRUb3BGcmFtZXMKKyAgICAgICAgfHwgZmluZFRvcEZyYW1l
cy0+YmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9t
YWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICAKLSAgICB3aGlsZSAoZmluZFRvcEZyYW1lcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLmdldENvbHVtbkludCgwKTsKKyAg
ICB3aGlsZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
aW50IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Z2V0Q29sdW1uSW50KDApOwogICAgICAg
ICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNl
cnQobmV3RG9tYWluSUQpOwogICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKICAgICAg
ICAgICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKQEAgLTEz
NDEsMjEgKzEzNDAsMjAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWwKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFN0ZFNldDx1bnNpZ25lZD4gcHJldmFsZW50RHVlVG9S
ZWRpcmVjdDsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8g
Sk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQ
cmV2YWxlbnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5w
cmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50
RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklE
ID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERv
bWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0
YXRlbWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0
Lmluc2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwog
ICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3Vy
Y2VEb21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERv
bWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsK
LSAgICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9w
RnJhbWVSZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gdG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJPTSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVk
RG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBB
TkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHRvcEZyYW1l
UmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0
ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9S
ZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
KTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgbWFya1ByZXZhbGVudFN0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZh
bGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFu
Z2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHByZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVn
aW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQoKSkpLCAiKSIpKTsKLSAgICBpZiAobWFy
a1ByZXZhbGVudFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1h
cmtQcmV2YWxlbnRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBt
YXJrUHJldmFsZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VT
dHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBk
b21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWdu
ZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnRE
dWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikpOworICAgIGlmICghbWFya1ByZXZhbGVudFN0YXRl
bWVudCB8fCBtYXJrUHJldmFsZW50U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFz
UmVkaXJlY3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMzY2LDEyICsxMzY0LDEy
IEBAIEhhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiBy
ZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBp
c1ByZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAw
Il9zKTsKLSAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5wcmVwYXJl
KCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJl
c291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDEpKQotICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291
cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpI
aWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93CisgICAgYXV0byBub3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAobm90VmVyeVBy
ZXZhbGVudFJlc291cmNlc1N0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAobm90VmVyeVByZXZh
bGVudFJlc291cmNlc1N0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFsZW50
UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgTm90VmVy
eVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNl
c1N0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSkKKyAgICAgICAgICAgICAgICAsIG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKICAgICAgICAg
ICAgICAgICAsIDAsIDAsIDAsIDAgfSk7CiAgICAgICAgICAgICByZXN1bHRzLmFkZChrZXksIHZh
bHVlKTsKICAgICAgICAgfQpAQCAtMTM4Niw0MyArMTM4NCw0MyBAQCBIYXNoTWFwPHVuc2lnbmVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVByZXZhbGVudFJl
c291cmNlcwogCiAgICAgYXV0byBkb21haW5JRHNPZkludGVyZXN0ID0gYnVpbGRlci50b1N0cmlu
ZygpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9t
YWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZklu
dGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwotICAgIGlmIChzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVf
T0spIHsKLSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFp
bklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFr
ZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWlu
SUQpIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJj
ZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNv
dXJjZURvbWFpbklEIikpOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWdu
ZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQs
IENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVS
RSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9V
UCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwotICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAg
ICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5n
KCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIs
IGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7
CisgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgewor
ICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRz
LmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YmZyYW1lRG9tYWluSUQsIENPVU5UKHRvcEZyYW1l
RG9tYWluSUQpIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJmcmFt
ZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJmcmFt
ZURvbWFpbklEIikpOwotICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRT
dGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApKTsKKyAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3ViZnJh
bWVEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAoc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWlu
SUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDEpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VM
RUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJl
c3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOwotICAgIGlmICh0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAg
ICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxF
Q1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVz
dCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAg
ICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTU0OSwxMCArMTU0NywxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFnZUFjY2VzcyhtX2Rh
dGFiYXNlLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklEID0gPyIpOwotICAgIGlmIChpbmNy
ZW1lbnRTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5j
cmVtZW50U3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7
CisgICAgaWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IGluY3JlbWVudFN0
b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3Jh
Z2VBY2Nlc3MgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTY0Niw5ICsxNjQ0LDggQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhj
b25zdCBIYXNoU2UKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFu
ZGZhdGhlckRhdGFGb3JEb21haW5zIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5z
ZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElO
ICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAgIGlmIChkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5z
VG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0
cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUg
cmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7
CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNzc2LDEwICsx
NzczLDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlKG1f
ZGF0YWJhc2UsICJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyIpOwotICAgIGlm
IChyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUuYmluZEludCgxLCAqdGFy
Z2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0
c1RvU2luY2VTYW1lU2l0ZS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHJlbW92
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
REVMRVRFIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghcmVtb3Zl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlCisgICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2lu
Y2VTYW1lU2l0ZS0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTE4MzIsMTAgKzE4MjksMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUK
ICAgICB9CiAgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgZmFsc2UsIHsgfSk7CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlU3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLCAiREVMRVRF
IEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0g
PyIpOwotICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQu
c2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHJlbW92ZVN0b3JhZ2VBY2Nlc3MgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRv
cEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICghcmVtb3ZlU3Rv
cmFnZUFjY2VzcworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5iaW5kSW50KDEsICp0
YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFn
ZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTkxOCw5
ICsxOTE1LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4KIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
aXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVy
YXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2luKCksIGRv
bWFpbnMuZW5kKCkpKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1
aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRv
bWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9t
YWluc0FzUHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzMDEsMTYgKzIyOTcsMTUgQEAgQ29v
a2llQWNjZXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nl
c3MoY29uc3QgU3ViUmVzb3VyY2UKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpc1By
ZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluID0gPyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21h
aW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFj
dGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3Mp
OworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwgc3VicmVzb3Vy
Y2VEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBib29sIGhhc05v
RW50cnkgPSBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9vbCBpc1ByZXZh
bGVudCA9ICFoYXNOb0VudHJ5ICYmICEhc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKLSAgICBi
b29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CisgICAgYm9vbCBoYXNOb0VudHJ5ID0gc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKKyAgICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50
cnkgJiYgISFzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKKyAgICBib29sIGhhZFVzZXJJbnRl
cmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpID8gdHJ1
ZSA6IGZhbHNlOwogCiAgICAgaWYgKCFhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRl
cih0b3BGcmFtZURvbWFpbikgJiYgIWlzUHJldmFsZW50KQogICAgICAgICByZXR1cm4gQ29va2ll
QWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OwpAQCAtMjMzMywxNCArMjMyOCwxNCBAQCBTdG9y
YWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omhhc1VzZXJHcmFudGVkUwogCiAgICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklE
ID0gKnJlc3VsdC5zZWNvbmQ7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURv
bWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/IEFORCB0b3BMZXZlbERvbWFpbklEID0gPyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1l
bnQuYmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQo
KikgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQg
PSA/IEFORCB0b3BMZXZlbERvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQKKyAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFy
eURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6
Tm87CiAKLSAgICByZXR1cm4gISFzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gU3RvcmFnZUFj
Y2Vzc1Byb21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5v
OworICAgIHJldHVybiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApID8gU3RvcmFnZUFjY2Vz
c1Byb21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOwog
fQogCiBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoKSBjb25zdApAQCAt
MjM0OCwxMiArMjM0MywxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZAogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
cmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxl
bnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDAi
X3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAK
LSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1
bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUg
KHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5T
dHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdHM7CiB9CkBAIC0yMzYzLDEyICsyMzU4LDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7Ci0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAg
ICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZy
b21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOwor
ICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1
bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdHM7CiB9CkBAIC0yMzc4LDEyICsyMzczLDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNXaXRo
VXNlckluCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNo
ZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzOTMsMTMgKzIzODgs
MTIgQEAgSGFzaE1hcDxUb3BGcmFtZURvbWFpbiwgU3ViUmVzb3VyY2VEb21haW4+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjoKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlNFTEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4g
RlJPTSAoU0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9w
TGV2ZWxEb21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFz
IG8gSU5ORVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVS
RSBvLmRvbWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlu
cyBPTiBkb21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsiX3MpOwotCi0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxl
RG9tYWluIEZST00gKFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWlu
LCBzLnRvcExldmVsRG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBhcyBvIElOTkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFz
IHMgV0hFUkUgby5kb21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZl
ZERvbWFpbnMgT04gZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKLSAgICB3aGlsZSAoc3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFkZChSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0
ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkp
OworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBy
ZXN1bHRzLmFkZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSksIFJlZ2lzdHJhYmxl
RG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTI0
NDUsMTkgKzI0MzksMTggQEAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpEb21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGEKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBWZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWlu
SUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFk
VXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFp
bnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZU
b3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5z
b3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwg
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgY291bnRPZlRvcEZyYW1lUmVk
aXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9JTiAoU0VMRUNUIHNvdXJjZURvbWFp
bklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IEdST1VQIEJZIHNv
dXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWluSUQgPSBkb21haW5JRCJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdo
aWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0cy5h
cHBlbmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludCgwKSkK
LSAgICAgICAgICAgICwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSkKLSAgICAgICAg
ICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUo
MikpCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMykgPyB0cnVlIDogZmFs
c2UKLSAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCg0KSA/IHRydWUgOiBmYWxz
ZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNl
Ci0gICAgICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDYpKQorICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVj
a2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgxKSkKKyAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVu
dC0+Z2V0Q29sdW1uRG91YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgzKSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCg0KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmdldENvbHVt
bkludCg1KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNikpCiAgICAgICAgIH0pOwogICAgIH0KICAgICAK
QEAgLTI0NzMsMTEgKzI0NjYsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYKIAogICAgIGF1
dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNp
Z25lZD46Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJlZ2luKCksIGRvbWFpbklEc1RvQ2xl
YXIuZW5kKCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckdyYW5kZmF0aGVyaW5nU3Rh
dGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VU
IGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIiki
KSk7Ci0gICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBhdXRvIGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAi
KSIpKTsKKyAgICBpZiAoIWNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0yNjE3LDIzICsyNjEwLDIx
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlz
dGljc0lmTmVlZGVkKCkKICAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNvdW50IC0gcGFy
YW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbzsKICAgICBBU1NFUlQoY291bnRMZWZ0VG9QcnVu
ZSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUobV9kYXRhYmFzZSwgIlNF
TEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50ZXJh
Y3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Iik7Ci0gICAgaWYgKHJlY29yZHNU
b1BydW5lLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVjb3Jkc1RvUHJ1bmUu
YmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJl
Y29yZHNUb1BydW5lID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBpc1By
ZXZhbGVudCwgbGFzdFNlZW4gTElNSVQgPyJfcyk7CisgICAgaWYgKCFyZWNvcmRzVG9QcnVuZSB8
fCByZWNvcmRzVG9QcnVuZS0+YmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJVEVf
T0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IGVudHJpZXNUb1BydW5lOwot
ICAgIHdoaWxlIChyZWNvcmRzVG9QcnVuZS5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
ZW50cmllc1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLmdldENvbHVtbkludCgwKSk7Cisg
ICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAg
ZW50cmllc1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLT5nZXRDb2x1bW5JbnQoMCkpOwog
CiAgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVj
dG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJlZ2luKCksIGVudHJpZXNU
b1BydW5lLmVuZCgpKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcHJ1bmVDb21tYW5kKG1fZGF0
YWJhc2UsIG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOwotICAgIGlmIChwcnVuZUNvbW1hbmQucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBwcnVuZUNvbW1hbmQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgYXV0byBwcnVuZUNvbW1hbmQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRv
bWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7CisgICAgaWYgKCFwcnVuZUNvbW1hbmQg
fHwgcHJ1bmVDb21tYW5kLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI3MTcsMzUgKzI3MDgsMzMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0IFJlZ2lzdHIKIAogYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNDb3JyZWN0U3ViU3RhdGlz
dGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJmcmFtZURvbWFpbiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YmZyYW1lVW5kZXJU
b3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lQ291bnQobV9kYXRhYmFzZSwgY291bnRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVRdWVyeSk7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8obV9kYXRh
YmFzZSwgY291bnRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOworICAgIGF1dG8g
c3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
Y291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJh
bWVDb3VudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYg
KCFzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
Q291bnQgfHwgIXN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRv
IHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVy
VG9wRnJhbWVDb3VudC5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQuYmlu
ZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9tYWlu
SUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9t
YWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUby5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5iaW5k
SW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQo
c3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJGcmFt
ZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbiku
dmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJ
bnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDEsIGRvbWFpbklE
KHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFp
bikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBiaW5kLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQuc3Rl
cCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291
bnQuc3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZy
YW1lQ291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8fCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQu
Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuZ2V0
Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5nZXRDb2x1
bW5JbnQoMCkgPT0gMSk7CisgICAgcmV0dXJuIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+
Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmdl
dENvbHVtbkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmdldENv
bHVtbkludCgwKSA9PSAxKTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kQm9vbGVhbihTdHJpbmdC
dWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBib29sIGZsYWcpCkBAIC0yODEy
LDI3ICsyODAxLDI2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYKICAgICBpZiAocXVlcnkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGEo
bV9kYXRhYmFzZSwgcXVlcnkpOworICAgIGF1dG8gZGF0YSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChxdWVyeSk7CiAgICAgCi0gICAgaWYgKGRhdGEucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBkYXRhLmJpbmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNRTElURV9PSykg
eworICAgIGlmICghZGF0YSB8fCBkYXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxl
RG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFwcGVuZFN1YlN0
YXRpc3RpY0xpc3QuIFN0YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBpZiAoZGF0YS5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAo
ZGF0YS0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICAiKTsKICAgICBidWlsZGVyLmFwcGVuZCh0YWJsZU5h
bWUpOwogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOlxuIik7CiAgICAgCi0gICAgYXV0byBy
ZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRDb2x1bW5JbnQoMCkp
OworICAgIGF1dG8gcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmdl
dENvbHVtbkludCgwKSk7CiAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAg
ICAgCi0gICAgd2hpbGUgKGRhdGEuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVz
dWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEuZ2V0Q29sdW1uSW50KDApKTsK
KyAgICB3aGlsZSAoZGF0YS0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0
ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmdldENvbHVtbkludCgwKSk7CiAg
ICAgICAgIGFwcGVuZE5leHRFbnRyeShidWlsZGVyLCByZXN1bHQpOwogICAgIH0KIH0KQEAgLTI5
NDYsMjggKzI5MzQsMjYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKIAogdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0
ZXJzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBE
RVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0Ms
IG1vbnRoRGF5IERFU0MgTElNSVQgMSBPRkZTRVQgPzsiX3MpOworICAgIGF1dG8gY291bnRPcGVy
YXRpbmdEYXRlc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IENPVU5UKCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsKKyAgICBhdXRvIGdldE1vc3RSZWNl
bnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVT
QywgbW9udGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7CisgICAgYXV0byBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBG
Uk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhE
YXkgREVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CiAKLSAgICBpZiAoY291bnRPcGVyYXRpbmdE
YXRlc1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNvdW50T3Bl
cmF0aW5nRGF0ZXNTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWNv
dW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBjb3VudE9wZXJhdGluZ0RhdGVz
U3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fb3BlcmF0aW5n
RGF0ZXNTaXplID0gY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7
CisgICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCk7CiAKLSAgICBpZiAoZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBnZXRNb3N0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICgh
Z2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgfHwgZ2V0TW9zdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0
Rmlyc3RPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX21vc3RSZWNlbnRPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRNb3N0UmVj
ZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCksIGdldE1vc3RSZWNlbnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0TW9zdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAgICBtX21vc3RSZWNlbnRPcGVy
YXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDIpKTsKIAotICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIWdldE9wZXJhdGluZ0RhdGVX
aW5kb3dTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVw
ZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50IGZhaWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGggZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBA
IC0yOTc2LDI2ICsyOTYyLDI2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpCiAgICAgaWYgKG1fb3BlcmF0
aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQogICAgICAgICBt
X3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IFdURjo6bnVsbG9wdDsKICAgICBlbHNlIHsKLSAg
ICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZEludCgxLCBvcGVy
YXRpbmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9w
ZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5n
RGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIHdp
dGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIFRoZSBlcnJvciBjb3Vs
ZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4iLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRp
bmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsK
KyAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5n
RGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogICAgIH0KIAogICAgIGlmIChtX29wZXJh
dGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKQogICAgICAgICBt
X2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2UgewotICAg
ICAgICBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnJlc2V0KCk7Ci0gICAgICAgIGlm
IChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0
ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgICAgIGlmIChnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2lu
ZG93TG9uZyAtIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0
ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMg
Z2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxs
cyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGlu
Z0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCksIGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgICAgIG1fbG9uZ1dp
bmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQoMikpOwogICAgIH0KIH0KIApAQCAtMzAxMSwyMSArMjk5NywyMSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGlu
Z0RhdGVJZk5lY2Vzc2FyeQogCiAgICAgaW50IHJvd3NUb1BydW5lID0gbV9vcGVyYXRpbmdEYXRl
c1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAxOwogICAgIGlmIChyb3dzVG9QcnVu
ZSA+IDApIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMg
T1JERVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKLSAgICAgICAgaWYg
KGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCi0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQuYmluZEludCgxLCByb3dzVG9QcnVuZSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIGF1dG8gZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcGVyYXRp
bmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3MpOworICAg
ICAgICBpZiAoIWRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAg
ICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50
KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0
UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVy
YXRpbmdEYXRlSWZOZWNlc3NhcnkgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50
IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBPUiBJR05P
UkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywg
PywgPzsiX3MpOwotICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5i
aW5kSW50KDEsIHRvZGF5LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDMsIHRv
ZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNF
TEVDVCA/LCA/LCA/OyJfcyk7CisgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
CisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgdG9k
YXkueWVhcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0b2RheS5tb250aERh
eSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zMDY5LDE2ICszMDU1LDE2IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiAgICAgICAgIGRheXNBZ29JblNlY29uZHMgPSBXYWxsVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIC0gZGF5c1RvU3VidHJhY3Q7CiAg
ICAgICAgIGF1dG8gZGF0ZVRvSW5zZXJ0ID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdh
bGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhkYXlzQWdvSW5TZWNvbmRzKSk7CiAKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5
KSBTRUxFQ1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJ
bnQoMiwgZGF0ZVRvSW5zZXJ0Lm1vbnRoKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250
aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNF
TEVDVCA/LCA/LCA/OyJfcyk7CisgICAgICAgIGlmICghaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRl
bWVudAorICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZElu
dCgxLCBkYXRlVG9JbnNlcnQueWVhcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZGF0ZVRvSW5zZXJ0Lm1vbnRo
KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRl
bWVudC0+YmluZEludCgzLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC5yZXNldCgpOworICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5yZXNldCgp
OwogICAgIH0KIAogICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOwpAQCAtMzIw
MSwzNiArMzE4NywzNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChQcml2YXRlQwogICAgICAgICAvLyBXZSBz
aG91bGQgbmV2ZXIgYmUgaW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgcHJpdmF0ZSBjbGljayBtZWFz
dXJlbWVudCB2YWx1ZSBpbnRvIHRoZSBkYXRhYmFzZSB3aXRob3V0IHZhbGlkIHJlcG9ydCB0aW1l
cy4KICAgICAgICAgQVNTRVJUKHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCAhPSAtMSAmJiBkZXN0
aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCAhPSAtMSk7CiAKLSAgICAgICAgYXV0byBzdGF0ZW1l
bnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50UXVlcnkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsICpzb3VyY2VE
YXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZElu
dCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCku
aWQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoNCwgYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1l
bnQuYmluZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0
ZW1lbnQuYmluZERvdWJsZSg2LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVu
dC5iaW5kRG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2Vu
ID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDksIHNvdXJj
ZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0
VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1l
bnQuYmluZFRleHQoMTAsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVU
b2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGlt
ZVRvU2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+Ymlu
ZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMsIGF0dHJp
YnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kSW50KDQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg2LCBhdHRyaWJ1dGlvbi50aW1l
T2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg3LCBzb3VyY2VFYXJsaWVzdFRpbWVU
b1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg4
LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFz
ZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDksIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2Fi
bGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBzb3VyY2VVbmxpbmthYmxl
VG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUo
MTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
aW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVy
eSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHN0YXRlbWVudC5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0
YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgzLCBh
dHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVt
ZW50LmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5j
ZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5k
VGV4dCg1LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRv
a2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0
YXRlbWVudC5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmth
YmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNywgc291cmNlVW5saW5rYWJsZVRva2Vu
ID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5z
ZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAgaWYgKCFz
dGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNl
Y29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0
cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGlt
ZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2VuID8g
c291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNvdXJjZVVubGlu
a2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRl
eHQoNywgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJ
REJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0VW5hdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzQzNSwxNCArMzQyMSwxNCBAQCBTdHJp
bmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0aW9uVG9TdHJp
bmcoV2ViQ29yZTo6U1FMaXRlUwogCiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcoKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMobV9kYXRhYmFzZSwg
IlNFTEVDVCAoU0VMRUNUIENPVU5UKCopIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQpIGFzIGNudDEsIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQpIGFzIGNudDIiX3MpOwotICAgIGlmIChwcml2YXRlQ2xpY2tNZWFz
dXJlbWVudERhdGFFeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBwcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudERhdGFFeGlzdHMuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBhdXRvIHBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7CisgICAgaWYgKCFwcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudERhdGFFeGlzdHMgfHwgcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhp
c3RzLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLmdldENvbHVtbkludCgwKSAm
JiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLmdldENvbHVtbkludCgxKSkKKyAg
ICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0Q29sdW1uSW50KDAp
ICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmdldENvbHVtbkludCgxKSkK
ICAgICAgICAgcmV0dXJuICJcbk5vIHN0b3JlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50IGRh
dGEuXG4iX3M7CiAKICAgICBhdXRvIHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25zU3RhdGVtZW50LCBhbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uc1F1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyJf
cyk7CkBAIC0zNTczLDExICszNTU5LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVDCiAgICAg
aWYgKGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIHx8IHNvdXJjZUVhcmxpZXN0VGltZVRv
U2VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyQXR0cmli
dXRlZFN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKGNsZWFyQXR0cmlidXRlZFN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRl
bWVudC5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuYmluZEludCgyLCAqZGVzdGluYXRpb25TaXRl
RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBjbGVhckF0dHJpYnV0ZWRTdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFO
RCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghY2xlYXJBdHRyaWJ1
dGVkU3RhdGVtZW50CisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZElu
dCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhclNlbnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzU4NywxOCArMzU3MywxNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50cwogewogICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBX
YWxsVGltZTo6bm93KCkgLSAxX2g7CiAKLSAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291
cmNlU3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJj
ZSA9ID8iKTsKLSAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1l
bnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBu
dWxsIik7CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Il9zKTsKKyAgICBh
dXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIl9zKTsKIAotICAg
IGlmIChlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LmJp
bmRJbnQoMSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZVN0YXRlbWVudAorICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0
YXRlbWVudC0+YmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1Nv
dXJjZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
c0FzRXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGlmIChlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RU
aW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwgZWFy
bGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2UuY3BwCmluZGV4IDUyMzIzM2QxOGIwNDAwM2VmMzBkMzM2MzJjZmU2MmYwMmYy
N2EzNDguLjNhNjVmY2NlZjE4OWYwN2M4OTE2NWE5YzYyMjdhNWNhZDE0MDcwMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VE
YXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IGNoYXIgZ2V0
SXRlbXNRdWVyeVN0cmluZ1tdID0gIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIjsK
K3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgZ2V0SXRlbXNRdWVyeVN0cmluZyB7ICJTRUxFQ1Qg
a2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyB9OwogCiBSZWY8TG9jYWxTdG9yYWdlRGF0YWJh
c2U+IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUoU3RyaW5nJiYgZGF0YWJhc2VQYXRoLCB1
bnNpZ25lZCBxdW90YUluQnl0ZXMpCiB7CkBAIC05OSwxMCArOTksMTAgQEAgYm9vbCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCkKICAgICBpZiAoIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIkl0ZW1UYWJsZSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00g
SXRlbVRhYmxlIExJTUlUIDEiKTsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAKICAg
ICAvLyBUaGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQsIGl0J3MganVzdCB1c2VkIHRvIGNo
ZWNrIHRoZSBjb2x1bW4gdHlwZS4KLSAgICBpZiAocXVlcnkuaXNDb2x1bW5EZWNsYXJlZEFzQmxv
YigwKSkKKyAgICBpZiAocXVlcnkgJiYgcXVlcnktPmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IHRhYmxlIHdpdGgg
dGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92ZXIgdG8gaXQgYW5kIHRoZW4gcmVw
bGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJsZS4KQEAgLTMwMiwxOSArMzAyLDE4
IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0CiAg
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IEl0ZW1UYWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5U
KCopIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHJl
c3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAg
ICBpZiAocXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigi
Tm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3Ig
bG9jYWwgc3RvcmFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0
dXJuICFxdWVyeS5nZXRDb2x1bW5JbnQoMCk7CisgICAgcmV0dXJuICFxdWVyeS0+Z2V0Q29sdW1u
SW50KDApOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZygp
CkBAIC0zMzAsMTQgKzMyOSwxNSBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZF
eGlzdGluZygpCiAgICAgICAgIHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1zU3RhdGVtZW50LCBn
ZXRJdGVtc1F1ZXJ5U3RyaW5nKTsKIH0KIAotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8U1FM
aXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAorU1FM
aXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0
YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJ
SUxpdGVyYWwgcXVlcnkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxT
UUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0
YWJhc2UuaXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQorICAgICAgICBhdXRvIHN0YXRlbWVudE9yRXJyb3IgPSBtX2RhdGFiYXNlLnByZXBh
cmVIZWFwU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnRPckVycm9yKQog
ICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKKyAg
ICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50T3JFcnJvci52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0
cigpOworICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgfQogICAgIHJl
dHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQoKSB9Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xv
Y2FsU3RvcmFnZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaAppbmRleCBiN2VmMDM0ZDJhODZjMjRiZDA0ZGY3
OTQzMTdjYWJhZmMwM2U3NDZjLi4zOThkYTdkY2ZiMjhkZDMwZDJlNjBhNTE0ZGRlOWIxOWQ1NTM2
MjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtNjIsNyArNjIsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7CiAgICAgYm9vbCBkYXRh
YmFzZUlzRW1wdHkoKSBjb25zdDsKIAotICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiYsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0OworICAgIFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3Q7
CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZVBhdGg7CiAgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZSBtX2RhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggMzM5NjAyYTQ5ZjExNDNkOWZmZTQ2MzA1YWIx
YWQ5OWE2ODc0Y2I2My4uNjUwODg2ZWU1NjYxNjIwYjg4MzBhNjM1MDZiOTdmMzQ0MGQ3Zjc4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2Uu
Y3BwCkBAIC02Niw3ICs2Niw4IEBAIEljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYgcGF0aCwgQWxsb3dEYXRhYmFzZVdyaXRlIGFsbG93RGF0YWJhc2VXCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbk51bWJl
ciA9IFNRTGl0ZVN0YXRlbWVudChtX2RiLCAiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNl
SW5mbyBXSEVSRSBrZXkgPSAnVmVyc2lvbic7IikuZ2V0Q29sdW1uSW50KDApOworICAgICAgICBh
dXRvIHZlcnNpb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1
ZSBGUk9NIEljb25EYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ1ZlcnNpb24nOyJfcyk7CisgICAg
ICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNp
b25TdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgICAgIGlmIChkYXRhYmFzZVZl
cnNpb25OdW1iZXIgPiBjdXJyZW50RGF0YWJhc2VWZXJzaW9uKSB7CiAgICAgICAgICAgICBMT0co
SWNvbkRhdGFiYXNlLCAiRGF0YWJhc2UgdmVyc2lvbiBudW1iZXIgJWQgaXMgZ3JlYXRlciB0aGFu
IG91ciBjdXJyZW50IHZlcnNpb24gbnVtYmVyICVkIC0gY2xvc2luZyB0aGUgZGF0YWJhc2UgdG8g
cHJldmVudCBvdmVyd3JpdGluZyBuZXdlciB2ZXJzaW9ucyIsCiAgICAgICAgICAgICAgICAgZGF0
YWJhc2VWZXJzaW9uTnVtYmVyLCBjdXJyZW50RGF0YWJhc2VWZXJzaW9uKTsKQEAgLTg0LDcgKzg1
LDcgQEAgSWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxv
d0RhdGFiYXNlV3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJl
ZHVjZSBzcWxpdGUgUkFNIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IDIwMDAgcGFnZXMgKH4xLjVr
QiBwZXIgcGFnZSkuIDNNQiBvZiBjYWNoZSBmb3IgaWNvbiBkYXRhYmFzZSBpcyBvdmVya2lsbC4K
LSAgICAgICAgU1FMaXRlU3RhdGVtZW50KG1fZGIsICJQUkFHTUEgY2FjaGVfc2l6ZSA9IDIwMDsi
KS5leGVjdXRlQ29tbWFuZCgpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJQUkFHTUEg
Y2FjaGVfc2l6ZSA9IDIwMDsiX3MpOwogCiAgICAgICAgIGlmIChhbGxvd0RhdGFiYXNlV3JpdGUg
PT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpIHsKICAgICAgICAgICAgIG1fcHJ1bmVUaW1lciA9
IG1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8SWNvbkRhdGFiYXNlPj4oUnVuTG9vcDo6Y3VycmVu
dCgpLCB0aGlzLCAmSWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOwpAQCAtMTc1LDE3ICsx
NzYsMTcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBvcHVsYXRlUGFnZVVSTFRvSWNvblVSTE1hcCgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbXBvcnRRdWVyeSA9IG1ha2VTdHJpbmco
IlNFTEVDVCBQYWdlVVJMLnVybCwgSWNvbkluZm8udXJsLCBJY29uSW5mby5zdGFtcCBGUk9NIFBh
Z2VVUkwgSU5ORVIgSk9JTiBJY29uSW5mbyBPTiBQYWdlVVJMLmljb25JRD1JY29uSW5mby5pY29u
SUQgV0hFUkUgSWNvbkluZm8uc3RhbXAgPiAiLCBmbG9vcigoV2FsbFRpbWU6Om5vdygpIC0gbm90
VXNlZEljb25FeHBpcmF0aW9uVGltZSkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpLCAn
OycpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBpbXBvcnRRdWVyeSk7Ci0gICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9k
Yi5wcmVwYXJlU3RhdGVtZW50KGltcG9ydFF1ZXJ5KTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgaWNvbiB1cmwgaW1wb3J0IHF1ZXJ5Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAo
KTsKKyAgICBhdXRvIHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgTG9ja0hvbGRlciBsb2Nr
SG9sZGVyKG1fcGFnZVVSTFRvSWNvblVSTE1hcExvY2spOwogICAgIHdoaWxlIChyZXN1bHQgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBtX3BhZ2VVUkxUb0ljb25VUkxNYXAuc2V0KHF1ZXJ5Lmdl
dENvbHVtblRleHQoMCksIHF1ZXJ5LmdldENvbHVtblRleHQoMSkpOwotICAgICAgICByZXN1bHQg
PSBxdWVyeS5zdGVwKCk7CisgICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnkt
PmdldENvbHVtblRleHQoMCksIHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgcmVz
dWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBzdGFydFBydW5lVGltZXIoKTsKQEAg
LTIxNCwxMiArMjE1LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQoKQog
ICAgIEFTU0VSVChtX2RiLmlzT3BlbigpKTsKIAogICAgIGlmICghbV9wcnVuZUljb25zU3RhdGVt
ZW50KSB7Ci0gICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8p
OyIpOwotICAgICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGF1dG8gcHJ1bmVJY29uc1N0YXRlbWVudCA9IG1fZGIucHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIHN0YW1wIDw9ICg/KTsi
X3MpOworICAgICAgICBpZiAoIXBydW5lSWNvbnNTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBwcnVuZUljb25zIGZhaWxlZCIpOwotICAgICAg
ICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBwcnVuZUljb25z
U3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1f
cHJ1bmVJY29uc1N0YXRlbWVudC0+YmluZEludDY0KDEsIGZsb29yKChXYWxsVGltZTo6bm93KCkg
LSBub3RVc2VkSWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMo
KSkpICE9IFNRTElURV9PSykgewpAQCAtMjMwLDggKzIzMSw4IEBAIHZvaWQgSWNvbkRhdGFiYXNl
OjpwcnVuZVRpbWVyRmlyZWQoKQogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
ZGIpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgaWYgKG1fcHJ1bmVJY29uc1N0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1h
bmQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIGljb25JRCBOT1QgSU4gKFNFTEVDVCBpY29u
SUQgRlJPTSBJY29uSW5mbyk7Iik7Ci0gICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVU
RSBGUk9NIFBhZ2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIElj
b25JbmZvKTsiKTsKKyAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNv
bkRhdGEgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsi
X3MpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBQYWdlVVJMIFdI
RVJFIGljb25JRCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Il9zKTsKICAg
ICB9CiAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50LT5yZXNldCgpOwogCkBAIC0yODUsMTIgKzI4
NiwxMiBAQCBPcHRpb25hbDxpbnQ2NF90PiBJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwo
Y29uc3QgU3RyaW5nJiBpY29uVVJMLCBib29sJiBleAogICAgIEFTU0VSVChtX2RiLmlzT3Blbigp
KTsKIAogICAgIGlmICghbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50KSB7Ci0gICAgICAgIG1f
aWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50Piht
X2RiLCAiU0VMRUNUIEljb25JbmZvLmljb25JRCwgSWNvbkluZm8uc3RhbXAgRlJPTSBJY29uSW5m
byBXSEVSRSBJY29uSW5mby51cmwgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2ljb25JREZvcklj
b25VUkxTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBp
Y29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VM
RUNUIEljb25JbmZvLmljb25JRCwgSWNvbkluZm8uc3RhbXAgRlJPTSBJY29uSW5mbyBXSEVSRSBJ
Y29uSW5mby51cmwgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uSURGb3JJY29uVVJMU3Rh
dGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgaWNv
bklERm9ySWNvblVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1faWNvbklERm9ySWNvblVSTFN0
YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICB9CisgICAgICAgIG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9IGljb25JREZvcklj
b25VUkxTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBp
ZiAobV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBT
UUxJVEVfT0spIHsKQEAgLTMxNSwxMiArMzE2LDEyIEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpzZXRJ
Y29uSURGb3JQYWdlVVJMKGludDY0X3QgaWNvbklELCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCiAg
ICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVz
KTsKIAogICAgIGlmICghbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7Ci0gICAgICAg
IG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihtX2RiLCAiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29uSUQpIFZBTFVFUyAoKD8p
LCA/KTsiKTsKLSAgICAgICAgaWYgKG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC0+cHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHNldEljb25JREZvclBhZ2VVUkxT
dGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBQYWdlVVJM
ICh1cmwsIGljb25JRCkgVkFMVUVTICgoPyksID8pOyJfcyk7CisgICAgICAgIGlmICghc2V0SWNv
bklERm9yUGFnZVVSTFN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJp
bmcgc3RhdGVtZW50IHNldEljb25JREZvclBhZ2VVUkwgZmFpbGVkIik7Ci0gICAgICAgICAgICBt
X3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CisgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRl
bWVudCA9IHNldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQ
dHIoKTsKICAgICB9CiAKICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBwYWdlVVJMKSAhPSBTUUxJVEVfT0sKQEAgLTM0MiwxMiArMzQzLDEyIEBAIFZl
Y3RvcjxjaGFyPiBJY29uRGF0YWJhc2U6Omljb25EYXRhKGludDY0X3QgaWNvbklEKQogICAgIEFT
U0VSVChtX2RiLmlzT3BlbigpKTsKIAogICAgIGlmICghbV9pY29uRGF0YVN0YXRlbWVudCkgewot
ICAgICAgICBtX2ljb25EYXRhU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGIsICJTRUxFQ1QgSWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRh
Lmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBpY29uRGF0YVN0YXRlbWVudCA9IG1f
ZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRh
dGEgV0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghaWNvbkRh
dGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVu
dCBpY29uRGF0YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBu
dWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQorICAgICAgICBtX2lj
b25EYXRhU3RhdGVtZW50ID0gaWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQ
dHIoKTsKICAgICB9CiAKICAgICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+YmluZEludDY0KDEs
IGljb25JRCkgIT0gU1FMSVRFX09LKSB7CkBAIC0zNzAsMjAgKzM3MSwyMCBAQCBPcHRpb25hbDxp
bnQ2NF90PiBJY29uRGF0YWJhc2U6OmFkZEljb24oY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25z
dCBWZWN0b3I8Y2hhcgogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0Rh
dGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fYWRkSWNvblN0YXRlbWVudCkgewotICAg
ICAgICBtX2FkZEljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9k
YiwgIklOU0VSVCBJTlRPIEljb25JbmZvICh1cmwsIHN0YW1wKSBWQUxVRVMgKD8sIDApOyIpOwot
ICAgICAgICBpZiAobV9hZGRJY29uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gYWRkSWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1l
bnQoIklOU0VSVCBJTlRPIEljb25JbmZvICh1cmwsIHN0YW1wKSBWQUxVRVMgKD8sIDApOyJfcyk7
CisgICAgICAgIGlmICghYWRkSWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJQcmVwYXJpbmcgc3RhdGVtZW50IGFkZEljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2Fk
ZEljb25TdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgfQorICAgICAgICBtX2FkZEljb25TdGF0ZW1lbnQgPSBhZGRJY29uU3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9hZGRJY29u
RGF0YVN0YXRlbWVudCkgewotICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBJY29uRGF0YSAoaWNvbklE
LCBkYXRhKSBWQUxVRVMgKD8sID8pOyIpOwotICAgICAgICBpZiAobV9hZGRJY29uRGF0YVN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGFkZEljb25EYXRh
U3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkRh
dGEgKGljb25JRCwgZGF0YSkgVkFMVUVTICg/LCA/KTsiX3MpOworICAgICAgICBpZiAoIWFkZElj
b25EYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0
ZW1lbnQgYWRkSWNvbkRhdGEgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2FkZEljb25EYXRhU3Rh
dGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIH0KKyAgICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IGFkZEljb25EYXRhU3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fYWRkSWNv
blN0YXRlbWVudC0+YmluZFRleHQoMSwgaWNvblVSTCkgIT0gU1FMSVRFX09LKSB7CkBAIC00MTMs
MTIgKzQxNCwxMiBAQCB2b2lkIEljb25EYXRhYmFzZTo6dXBkYXRlSWNvblRpbWVzdGFtcChpbnQ2
NF90IGljb25JRCwgaW50NjRfdCB0aW1lc3RhbXApCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFz
ZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV91cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0
YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiVVBEQVRFIEljb25J
bmZvIFNFVCBzdGFtcCA9ID8gV0hFUkUgaWNvbklEID0gPzsiKTsKLSAgICAgICAgaWYgKG1fdXBk
YXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
ICAgICBhdXRvIHVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFw
U3RhdGVtZW50KCJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/
OyJfcyk7CisgICAgICAgIGlmICghdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHVwZGF0ZUljb25UaW1lc3Rh
bXAgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQg
PSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fdXBk
YXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IHVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQu
dmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV91cGRhdGVJY29u
VGltZXN0YW1wU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgdGltZXN0YW1wKSAhPSBTUUxJVEVfT0sg
fHwgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgaWNvbklEKSAh
PSBTUUxJVEVfT0spIHsKQEAgLTQzNywyOCArNDM4LDI4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpk
ZWxldGVJY29uKGludDY0X3QgaWNvbklEKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0
ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fZGVsZXRlUGFnZVVS
THNGb3JJY29uU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3Rh
dGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBQ
YWdlVVJMIFdIRVJFIFBhZ2VVUkwuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxl
dGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgYXV0byBkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVI
ZWFwU3RhdGVtZW50KCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIFBhZ2VVUkwuaWNvbklEID0g
KD8pOyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlUGFnZVVS
THNGb3JJY29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25T
dGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAg
ICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0gZGVsZXRlUGFnZVVSTHNGb3JJ
Y29uU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICgh
bV9kZWxldGVJY29uRGF0YVN0YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25EYXRhU3Rh
dGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJ
Y29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2Rl
bGV0ZUljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50
KCJERUxFVEUgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsK
KyAgICAgICAgaWYgKCFkZWxldGVJY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGRlbGV0ZUljb24gZmFpbGVkIik7Ci0gICAgICAg
ICAgICBtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50ID0gZGVs
ZXRlSWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAg
ICAgaWYgKCFtX2RlbGV0ZUljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVJY29uU3Rh
dGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJ
Y29uSW5mbyBXSEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2Rl
bGV0ZUljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBkZWxldGVJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRF
IEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8uaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAg
IGlmICghZGVsZXRlSWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVw
YXJpbmcgc3RhdGVtZW50IGRlbGV0ZUljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0
ZUljb25TdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CisgICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IGRlbGV0ZUljb25TdGF0ZW1lbnQudmFs
dWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9kZWxldGVQYWdlVVJM
c0Zvckljb25TdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBpY29uSUQpICE9IFNRTElURV9PSwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCBj
ZTVjMjliYWE1ODA1Y2E0MmY0OGVmMDUwYjgzMmQwY2Q1Y2NlMTFjLi5jYWUwODJmMTNkY2QzNjhj
NDgxOTViZTMxMWYyMGE1YjY2NDQ4ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcApAQCAtMjc4LDkgKzI3OCw5IEBAIHZvaWQgU3RvcmFn
ZUFyZWFTeW5jOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAK
ICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNU
IHZhbHVlIEZST00gSXRlbVRhYmxlIExJTUlUIDEiKTsKKyAgICAgICAgYXV0byBxdWVyeSA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIExJ
TUlUIDEiX3MpOwogICAgICAgICAvLyB0aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQuCi0g
ICAgICAgIGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgICAgICBpZiAo
cXVlcnkgJiYgcXVlcnktPmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0zMjYsOCArMzI2LDggQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnBlcmZvcm1JbXBvcnQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJs
ZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBx
dWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGtleSwgdmFsdWUgRlJP
TSBJdGVtVGFibGUiX3MpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsMTAgKzMz
NSwxMCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBpdGVtTWFwOwogCi0gICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0
ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB3aGlsZSAocmVzdWx0
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4
dCgwKSwgcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKLSAgICAgICAgcmVzdWx0ID0g
cXVlcnkuc3RlcCgpOworICAgICAgICBpdGVtTWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgw
KSwgcXVlcnktPmdldENvbHVtbkJsb2JBc1N0cmluZygxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1
ZXJ5LT5zdGVwKCk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpA
QCAtNDEyLDI3ICs0MTIsMjcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVh
ckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKIAogICAgIC8vIElm
IHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9y
ZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFi
bGUiKTsKLSAgICAgICAgaWYgKGNsZWFyLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBjbGVhciA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
SXRlbVRhYmxlIl9zKTsKKyAgICAgICAgaWYgKCFjbGVhcikgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8g
bG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IGNsZWFyLnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3Vs
dCA9IGNsZWFyLT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUg
bG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGlu
c2VydC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8p
Il9zKTsKKyAgICBpZiAoIWluc2VydCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBw
cmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBk
YXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHJlbW92ZShtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7
Ci0gICAgaWYgKHJlbW92ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byByZW1v
dmUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBX
SEVSRSBrZXk9PyJfcyk7CisgICAgaWYgKCFyZW1vdmUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2Fs
IHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ0MywyMSAr
NDQzLDIxIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0
aGUgbnVsbC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMg
aXMgYW4gaW5zZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5
ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBhdXRvJiBx
dWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBx
dWVyeS5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKKyAgICAgICAgcXVlcnktPmJpbmRUZXh0KDEsIGl0
LT5rZXkpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGws
IHdlJ3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCiAgICAgICAg
IGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcXVlcnkuYmluZEJsb2IoMiwg
aXQtPnZhbHVlKTsKKyAgICAgICAgICAgIHF1ZXJ5LT5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwog
Ci0gICAgICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQg
PSBxdWVyeS0+c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBpbiB0aGUgbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKLSAgICAgICAgcXVlcnkucmVzZXQoKTsKKyAgICAgICAgcXVlcnktPnJlc2V0KCk7
CiAgICAgfQogICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQpAQCAtNDk5LDMxICs0OTksMzMg
QEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UoKQogICAgIGlmICgh
bV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiKTsK
LSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2Fs
IHN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIGNvdW50ID0gWyZd
IHsKKyAgICAgICAgYXV0byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICAgICAgaWYgKCFxdWVyeSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4g
SXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIk5vIHJl
c3VsdHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2Fs
IHN0b3JhZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCi0gICAgaW50
IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJv
d3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgIHJldHVybiBxdWVy
eS0+Z2V0Q29sdW1uSW50KDApOworICAgIH0oKTsKKyAgICBpZiAoY291bnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBpbnQgY291bnQgPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7Ci0g
ICAgaWYgKCFjb3VudCkgewotICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwotICAgICAgICBtX2Rh
dGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRp
ZmllciA9IG1fZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgICAg
ICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW5XaXRoSWRlbnRpZmll
cihkYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1
bGxEYXRhYmFzZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGlm
ICghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmlsZSAlc1xuIiwgZGF0
YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfQorICAgIG1fZGF0YWJhc2Uu
Y2xvc2UoKTsKKyAgICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRpZmllciA9IG1fZGF0YWJh
c2VJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpXSB7CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmll
cik7CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBkYXRhYmFzZUZp
bGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlk
ZW50aWZpZXIpOworICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGF0YWJhc2VG
aWxlbmFtZSkpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJh
c2UgZmlsZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCmlu
ZGV4IDgzNjA0NzFiZTNlNDE3YWE1MDc2NWQ5YTY5Y2Q2NGExZTc2YmJiYmQuLmE5ZWFiM2M4YmU4
NTczYzQ2YmI4MmYyNzc0ZjUyNjMwZWEwNzdhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcApAQCAtMTg5LDggKzE4OSw4IEBAIHZvaWQgU3Rv
cmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgIGlmICht
X2RhdGFiYXNlLmlzT3BlbigpKSB7CiAgICAgICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAKLSAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmln
aW5zIik7Ci0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUg
c3RhdGVtZW50LiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAg
LTE5OSw4ICsxOTksOCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRl
bnRpZmllcnMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgw
KS5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0
ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICAgICAgbV9vcmln
aW5TZXQuYWRkKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKS5pc29sYXRlZENvcHkoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKQEAgLTMxNiwxNiArMzE2LDE2IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5
bmNTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QK
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMg
VkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJ
TlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBp
biB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfSAKICAgICAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2lu
SWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7Cisg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7CiAgICAgCi0gICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICcl
cycgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKIAog
ICAgIHsKQEAgLTQwNCwyMyArNDA0LDIzIEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxl
dGVBbGxPcmlnaW5zKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJT
RUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaW50IHJl
c3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9S
T1cpIHsKLSAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCkpKQorICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDApKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgICAgICBGaWxlU3lz
dGVtOjpkZWxldGVGaWxlKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSk7CiAKICAgICAgICAg
ewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jbGllbnRNdXRleCk7CiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTQ0MSwxMiArNDQxLDEyIEBAIHZv
aWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKCkKICAgICAgICAgb3BlblRy
YWNrZXJEYXRhYmFzZShmYWxzZSk7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRl
bWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoZGVs
ZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxl
dGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9y
aWdpbnMiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZGVsZXRlU3RhdGVt
ZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4
ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1
dGUgZGVsZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtNTE5LDEzICs1MTksMTMgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFi
YXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyIpOwotICAgIGlmIChkZWxl
dGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZGVsZXRlU3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5z
IHdoZXJlIG9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudCkgewogICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwg
b3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgZGVsZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAg
IGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBkZWxldGVTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGlmICghZGVsZXRlU3Rh
dGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGV4ZWN1dGUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lp
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxNCwxNyArNjE0LDE3IEBA
IFN0cmluZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllcikKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1
dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRo
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3Jp
Z2luPT8iKTsKLSAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBwYXRoU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghcGF0
aFN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVj
dGlvbiBvZiBwYXRoIGZvciBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIHBhdGhTdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaW50IHJlc3VsdCA9IHBhdGhT
dGF0ZW1lbnQuc3RlcCgpOworICAgIHBhdGhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklk
ZW50aWZpZXIpOworICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LT5zdGVwKCk7CiAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAg
ICByZXR1cm4gcGF0aFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHJldHVybiBwYXRo
U3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogfQogICAgIAogbG9uZyBsb25nIFN0b3JhZ2VU
cmFja2VyOjpkaXNrVXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzY2E0M2ZmNmY0
NzVhZjgxYzkwZTlmOTQ0ZTQ0YWY1MTYzM2IyMjU1Li45YmQxMDgyZGRhOTE3NzNjZTAwNzM5YTE2
MmQxMjg4NmYzOWJiOGVmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0
ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxp
dGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVudCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFs
c28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6YWRkVG9EYXRhYmFzZXNUYWJsZSk6CisKIDIwMjEtMDUtMTMgIEFha2FzaCBKYWlu
ICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIHJlcG9ydC1ub24taW5jbHVzaXZl
LWxhbmd1YWdlIHNob3VsZCBza2lwIHN5bWxpbmtzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1t
CmluZGV4IDY2ODJiZjQ1ODY2NjExNTUzZjEwYTE3ZTcyYTcyOWVjYWE2OTU4YzQuLjJjN2Y0NDRl
OGJjOGFlYjkwNmMwYmI5MGE2OWI5NTUzYzcxODEzMTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJU
ZXN0Lm1tCkBAIC02NiwxMiArNjYsMTIgQEAgc3RhdGljIHZvaWQgYWRkVG9EYXRhYmFzZXNUYWJs
ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgY29uc3QgU2VjdXJpdHlPcmlnaW4KICAgICBT
UUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKICAgICBkYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCk7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWRkRGF0YWJhc2VTdGF0ZW1lbnQoZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/
KTsiKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAgYWRkRGF0YWJh
c2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAg
ICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBuZXdEYXRhYmFzZU5hbWUpOwotICAg
IGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDMsIG5ld0RhdGFiYXNlUGF0aCk7Ci0gICAg
YWRkRGF0YWJhc2VTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICBpZiAoYXV0byBhZGRE
YXRhYmFzZVN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRP
IERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcykpIHsK
KyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgy
LCBuZXdEYXRhYmFzZU5hbWUpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRl
eHQoMywgbmV3RGF0YWJhc2VQYXRoKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmV4
ZWN1dGVDb21tYW5kKCk7CisgICAgfQogCiAgICAgZGF0YWJhc2UuY2xvc2UoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428628</attachid>
            <date>2021-05-14 09:38:43 -0700</date>
            <delta_ts>2021-05-14 09:46:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210514093842.patch</filename>
            <type>text/plain</type>
            <size>291979</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU1ZjQ2YzVmNDE0M2Y5MjRiNDNiNDM3
ZWE1YzJiNGEyODFjNDg3ZWQuLmI0NmQyZmRhYmY0NzRhNDJkOTBmZjQzZTRmNTMxN2M2MGM2YjQ2
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpwYXRoR2V0Rmls
ZU5hbWUoKSB0byBGaWxlU3lzdGVtOjpwYXRoRmlsZU5hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDc5ZmIz
ZWY2NTA3MjRkNGU0M2IyMWJkM2Q3NjViMjdhMTEyNDA5YWIuLjEyYjYyMWQxYzRlZjI2MzM0M2M2
NWMxMmRhY2IyZmYxZWVlY2I0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTkgQEAKKzIwMjEt
MDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5p
emUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2Rlcm5pemUg
LyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uOgorICAg
ICAgICAtIFRoZSBTUUxpdGVTdGF0ZW1lbnQgY29uc3RydWN0b3IgaXMgbm93IHByaXZhdGUgc28g
dGhhdCB3ZSBuZXZlciBoYXZlIGEKKyAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdGhhdCBoYXMg
bm90IGJlZW4gInByZXBhcmVkIi4gT25seSB0aGUgU1FMaXRlRGF0YWJhc2UKKyAgICAgICAgICBj
YW4gbm93IGNvbnN0cnVjdCBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0cy4gV2UgYWxyZWFkeSBuZWVk
ZWQgdG8gcGFzcworICAgICAgICAgIGEgU1FMaXRlRGF0YWJhc2UgcmVmZXJlbmNlIHdoZW4gY29u
c3RydWN0aW5nIHRoZSBTUUxpdGVTdGF0ZW1lbnQgYW55d2F5LgorICAgICAgICAtIFRoZSBjb25z
dHJ1Y3QgQU5EIHByZXBhcmUgYSBTUUxpdGVTdGF0ZW1lbnQsIHdlIG5vdyBjYWxsCisgICAgICAg
ICAgU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQoKSB0byBnZXQgYSBzdGFjayBvYmpl
Y3Qgb3IKKyAgICAgICAgICBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQoKSB0
byBnZXQgYSBoZWFwIG9uZS4gVGhlc2UgZnVuY3Rpb25zCisgICAgICAgICAgcmV0dXJuIGFuIEV4
cGVjdGVkPD4gdHlwZSBzbyB0aGV5IHdpbGwgZWl0aGVyIHJldHVybiBhICJwcmVwYXJlZCIKKyAg
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3IgYW4gdW5leHBlY3RlZCBTUUxpdGUgZXJyb3IgY29k
ZS4KKyAgICAgICAgLSBUaGUgcHJlcGFyZSpTdGF0ZW1lbnQoKSBmdW5jdGlvbnMgbm93IGF2b2lk
IFN0cmluZyBhbGxvY2F0aW9ucyBpbiBtb3N0CisgICAgICAgICAgY2FzZXMgdGhhbmtzIHRvIG92
ZXJsb2FkcyB0YWtpbmcgaW4gdGhlIHF1ZXJ5IGFzIGFuIEFTQ0lJTGl0ZXJhbC4KKyAgICAgICAg
LSBEcm9wIGZpbmFsaXplKCkgZnVuY3Rpb24gb24gU1FMaXRlU3RhdGVtZW50IHNvIFNRTGl0ZVN0
YXRlbWVudCBvYmplY3RzCisgICAgICAgICAgYXJlIGFsd2F5cyB2YWxpZC4gSXQgc2ltcGxpZmll
cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgU1FMaXRlU3RhdGVtZW50CisgICAgICAgICAgbWVtYmVy
IGZ1bmN0aW9ucy4gVGhlIFNRTGl0ZVN0YXRlbWVudCBkZXN0cnVjdG9yICJmaW5hbGl6ZXMiIHRo
ZSBzdGF0ZW1lbnQKKyAgICAgICAgICBzbyB1c2VycyBjYW4gc2ltcGx5IGRlc3Ryb3kgdGhlIFNR
TGl0ZVN0YXRlbWVudCBpZiB0aGV5IG5lZWQgdGhlIG9iamVjdAorICAgICAgICAgIHRvIGJlIGZp
bmFsaXplIGF0IGEgY2VydGFpbiBwb2ludCAoZS5nLiBiZWZvcmUgY2xvc2luZyBhIGRhdGFiYXNl
KS4KKyAgICAgICAgLSBEcm9wIHRoZSBwcmVwYXJlKCkgJiBwcmVwYXJlQW5kU3RlcCgpIFNRTGl0
ZVN0YXRlbWVudCBtZW1iZXIgZnVuY3Rpb25zIG5vdworICAgICAgICAgIHRoYXQgU1FMaXRlU3Rh
dGVtZW50IGFyZSBhbHdheXMgcHJlcGFyZWQuCisgICAgICAgIC0gU3RvcCBzdG9yaW5nIHRoZSBT
UUwgcXVlcnkgYXMgYSBTdHJpbmcgZGF0YSBtZW1iZXIgaW4gU1FMaXRlU3RhdGVtZW50IGNsYXNz
LgorICAgICAgICAgIFRoaXMgaXMgbm8gbG9uZ2VyIG5lZWRlZCBub3cgdGhhdCB0aGV5IGlzIG5v
IHNlcGFyZSBwcmVwYXJlIHN0ZXAgYWZ0ZXIgdGhlCisgICAgICAgICAgY29uc3RydWN0aW9uLiBU
aGlzIG1ha2VzIHRoZSBTUUxpdGVTdGF0ZW1lbnQgYSBiaXQgc21hbGxlci4KKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5l
Y2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1
cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJ
bmZvVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhSZWNvcmRz
VGFibGVGb3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZU5hbWVBbmRW
ZXJzaW9uRnJvbUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVt
ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpjcmVh
dGVTUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJDdXJzb3I6OnJlc2V0QW5kUmViaW5kUHJlSW5kZXhTdGF0ZW1lbnRJZk5lY2Vzc2FyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6aW50ZXJuYWxGZXRj
aE5leHRSZWNvcmQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0VGV4dFZhbHVlSW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc05vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6cXVvdGFOb0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OmFkZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRl
T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEZWxldGVkT3Bl
bmVkRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRl
RGF0YWJhc2VGaWxlSWZFbXB0eSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxT
dGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpleGVjdXRlKToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkTWFuaWZl
c3RIb3N0SGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpjYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2FnZUZvck9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRl
UmVtYWluaW5nU2l6ZUZvck9yaWdpbkV4Y2x1ZGluZ0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0
ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
VXBkYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmVuc3VyZU9yaWdpblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyREI6OmNoZWNrRGF0YWJhc2VWYWxpZGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXJEQjo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJE
Qjo6YWxsRG9tYWlucyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6Y3JlYXRlUHJl
cGFyZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6ZXhlY3V0ZVNx
bCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlOjp1c2VXQUxKb3VybmFsTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6
OnNldE1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpwYWdl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6dG90YWxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVEYXRhYmFzZTo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlOjpjbGVhckFsbFRhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6flNRTGl0ZVN0YXRlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnN0ZXApOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudDo6cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50OjpiaW5kQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZEludCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQ2NCk6CisgICAgICAg
IChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRQYXJhbWV0ZXJDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ6OmNvbHVtbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudDo6aXNDb2x1bW5OdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dDo6aXNDb2x1bW5EZWNsYXJlZEFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ6OmdldENvbHVtbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpnZXRDb2x1bW5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6Omdl
dENvbHVtblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1
bW5Eb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5J
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5JbnQ2NCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1Zl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1
bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50UmVzdWx0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludDY0UmVzdWx0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkRvdWJsZVJlc3Vs
dHMpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmNoZWNrRGF0YWJhc2VWYWxpZGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6ZXhlY3V0ZVNpbXBsZVNxbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6Y3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQpOgorICAg
ICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jk
c1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hD
aGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRS
ZWNvcmRzKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUoKSB0byBGaWxlU3lz
dGVtOjpwYXRoRmlsZU5hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MjM4YjVmMGJmZjIzYzQ2MmIxM2UzOTRj
OWM3NmEzZmVkNTExM2M4Li4yMGNjMTQ2YjRiZDdmODdiOGI2NTdhZGVjNzRkODFjMjc4YzdjMTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3Rh
dGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FM
aXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBB
bHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5JVFBE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
dXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURh
dGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c1RvVGFibGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cmVuYW1lQ29sdW1uSW5UYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2NvcGVkU3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdn
cmVnYXRlZFRoaXJkUGFydHlEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRG
b3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpm
aW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZh
dGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQ
cmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQ
cm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Js
b2NrQnV0S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0Zp
cnN0UGFydHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnMgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0NvcnJlY3RT
dWJTdGF0aXN0aWNzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVy
YXRpbmdEYXRlc1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclNlbnRBdHRyaWJ1
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRl
c3RpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWln
cmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0
YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3Rv
cmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SWNvbkRh
dGFiYXNlOjpJY29uRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6OnBv
cHVsYXRlUGFnZVVSTFRvSWNvblVSTE1hcCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFz
ZTo6cHJ1bmVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjppY29u
SURGb3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpzZXRJY29uSURG
b3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjppY29uRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6YWRkSWNvbik6CisgICAgICAgIChXZWJLaXQ6
Okljb25EYXRhYmFzZTo6dXBkYXRlSWNvblRpbWVzdGFtcCk6CisgICAgICAgIChXZWJLaXQ6Oklj
b25EYXRhYmFzZTo6ZGVsZXRlSWNvbik6CisKIDIwMjEtMDUtMTQgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVO
YW1lKCkgdG8gRmlsZVN5c3RlbTo6cGF0aEZpbGVOYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5k
ZXggZTE4YzMwZjllNzExMDc1YzllMWNlZjFmODk0MjY5MjNhZjg3OGJhZi4uMzkwNjc4MTI5OWM0
ZjU0OTIyMTA0NWY2NzVhOGMyZmU5YmU2MzVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBh
bmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FM
aXRlU3RhdGVtZW50IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJ
SUxpdGVyYWxzLgorCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgICogU3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5j
SW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tl
cjo6c3luY1NldE9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tl
cjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tl
cjo6c3luY0RlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpk
YXRhYmFzZVBhdGhGb3JPcmlnaW4pOgorCiAyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmRpcmVjdG9yeU5hbWUo
KSB0byBGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1VuaXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKaW5kZXggNDE1YTI5YjY2
MGNmZTllODM2MDBkYTYxOWMxZWMzZTcxYzBmMzc5Ny4uYzRlZTNkYzEyODc0ZjE5OGUxYmY0NTNm
MjM3YTk5Y2Y0NzY3NmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgK
KysrIGIvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgKQEAgLTYxLDYgKzYxLDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fcmVmKTsKICAgICB9CiAKKyAgICBleHBsaWNpdCBVbmlxdWVS
ZWYoVCYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoJm90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fcmVmKTsKKyAgICB9CisKICAgICBUJiBnZXQoKSB7IEFTU0VSVChtX3JlZik7IHJldHVy
biAqbV9yZWY7IH0KICAgICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZik7IHJl
dHVybiAqbV9yZWY7IH0KIApAQCAtODAsMTIgKzg2LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZTxjbGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVu
aXF1ZVB0cihzdGQ6OnVuaXF1ZV9wdHI8VT4pOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKLSAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCi0gICAgICAgIDog
bV9yZWYoJm90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmKTsKLSAgICB9Ci0KICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VD4gbV9yZWY7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IGEzMWRlMTA0MzY4OTI0ZWM0NDg1NTQ4ZTQwNzdjODFkZWJkOTliNWUu
LjQ3MWRiODBiMTNlMGRlYmMxNDQzYzQyZTNiYzIwNGZiMzQ1YjBjNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNjMsMTMgKzI2MywxMyBAQCBzdGF0aWMgYm9vbCBj
cmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0
YWJhc2UpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9
IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0
YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0
ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwg
Y3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FM
SVRFX0RPTkUpIHsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3Jh
dGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50
U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKICAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IGJsb2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpt
X3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJs
X25hbWU9J0Jsb2JSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0
YmxfbmFtZT0nQmxvYlJlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVu
dC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
IAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNy
ZWF0ZSBpdC4uCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAg
LTM1OCw3ICszNTgsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRC
bG9iVGFibGVzKCkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChj
dXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1h
ICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtMzY4LDEzICszNjgs
MTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygp
CiAKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJs
b2IgZmlsZSB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxp
dGVEQiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PSdCbG9iRmlsZXMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PSdCbG9iRmlsZXMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwor
ICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0
aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAg
LTM5MSw3ICszOTEsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRC
bG9iVGFibGVzKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAg
Y3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAg
ICBpZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRT
Y2hlbWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewpAQCAtNDI4LDEzICs0
MjgsMTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNv
cmRzVGFibGUoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8g
RmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUs
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3JkcyciKTsK
LSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5
cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0luZGV4UmVjb3Jkcyci
X3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhS
ZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGlu
dCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFp
bC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNDUxLDcg
KzQ1MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVj
b3Jkc1RhYmxlKCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAg
Y3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAg
ICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTUwMywxMyArNTAzLDEzIEBA
IGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4
KCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRo
ZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxp
dGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyIpOwotICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRl
X21hc3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOworICAgICAgICBpZiAo
IXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXgu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4
UmVjb3Jkc0luZGV4IGluZGV4IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAg
ICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTUyNiw3ICs1MjYsNyBA
QCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRl
eCgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJy
ZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRT
Y2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJU
KCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC01NjEsMTMgKzU2MSwxMyBAQCBib29sIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgp
CiAKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciKTsKLSAgICAgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZElu
ZGV4IGluZGV4LiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICBpZiAoc3FsaXRlUmVz
dWx0ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1
dGVDb21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKSB7CkBAIC01ODMsNyAr
NTgzLDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNv
cmRzUmVjb3JkSW5kZXgoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAg
ICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0K
IAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNjI0LDIwICs2MjQs
MjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJy
ZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRh
dGFWZXJzaW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNx
bC0+YmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElE
QkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewot
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURC
RGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7Ci0gICAgICAgIGlm
IChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0
KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9z
cWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZB
TFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50
byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
KCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRl
REIoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjQ2LDEwICs2NDYsMTAgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVBbmRQb3B1bGF0ZUluaXRpYWwKICAgICB7CiAgICAgICAgIC8vIERhdGFiYXNlIHZlcnNp
b25zIGFyZSBkZWZpbmVkIHRvIGJlIGEgdWluNjRfdCBpbiB0aGUgc3BlYyBidXQgc3FsaXRlMyBk
b2Vzbid0IHN1cHBvcnQgbmF0aXZlIGJpbmRpbmcgb2YgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAg
ICAgIC8vIFRoZXJlZm9yZSB3ZSdsbCBzdG9yZSB0aGUgdmVyc2lvbiBhcyBhIFN0cmluZy4KLSAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRh
dGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4
dCgxLCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+
cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0Rh
dGFiYXNlVmVyc2lvbicsID8pOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8
fCBzcWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJ
bmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3NCwxOSArNjc0LDE5IEBAIE9wdGlvbmFsPElzU2No
ZW1hVXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9y
ZUluZm9UYWJsCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBG
ZXRjaCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qgc3FsIEZST00gc3FsaXRl
X21hc3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyIpOwotICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRl
X21hc3RlciBXSEVSRSB0YmxfbmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7CisgICAgICAgIGlm
ICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUu
Iik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAh
PSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLiIp
OwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBB
U1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTczOSwyMiArNzM5LDIyIEBAIGJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjptaWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0
ZShjb25zdCBIYXNoTWFwPHN0ZDo6CiAgICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlE
LCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUs
IG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJ
bmZvOyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkVycm9yIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIEluZGV4
SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQg
PSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7
Ci0gICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDIpOworICAgICAgICAgICAgdWludDY0X3QgaWQgPSBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCgyKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJ
RE1hcC5nZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JB
c1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKLSAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3Rh
dGVtZW50LmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVt
bkJsb2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVl
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50
cnkgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBzcWwg
PSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVUZW1wSW5kZXhJbmZvLCAiSU5TRVJUIElOVE8g
X1RlbXBfSW5kZXhJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPywgPyk7Il9zKTsKICAgICAgICAg
ICAgIGlmICghc3FsCkBAIC03NjksNyArNzY5LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0
ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRF
X0RPTkUpIHsKQEAgLTgwNCwyMiArODA0LDIyIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjptaWdyYXRlSW5kZXhSZWNvcmRzVGFibGVGb3JJRFVwZGF0ZShjb25zdCBIYXNoTWFwPHN0CiAg
ICAgfQogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNl
LCAiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwgdmFsdWUsIG9iamVjdFN0b3Jl
UmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGtleSwg
dmFsdWUsIG9iamVjdFN0b3JlUmVjb3JkSUQgRlJPTSBJbmRleFJlY29yZHM7Il9zKTsKKyAgICAg
ICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFy
aW5nIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4UmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MSk7CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQo
MCk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQ2NCgxKTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5ld0lEID0gaW5kZXhJRE1hcC5n
ZXQoeyBvYmplY3RTdG9yZUlELCBpZCB9KTsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBr
ZXlCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIs
IGtleUJ1ZmZlcik7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rv
cigyLCBrZXlCdWZmZXIpOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVy
OwotICAgICAgICAgICAgc3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCB2YWx1ZUJ1
ZmZlcik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZWNvcmRJRCA9IHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQ2NCg0KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9y
KDMsIHZhbHVlQnVmZmVyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQ2NCg0KTsKIAogICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRT
dGF0ZW1lbnQoU1FMOjpQdXRUZW1wSW5kZXhSZWNvcmQsICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRl
eFJlY29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSwg
Pyk7Il9zKTsKICAgICAgICAgICAgIGlmICghc3FsCkBAIC04MzMsNyArODMzLDcgQEAgYm9vbCBT
UUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRl
KGNvbnN0IEhhc2hNYXA8c3QKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAg
ICAgICByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0ZDo6dW5p
cXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4
aXN0aW5nRGF0YWJhc2VJCiAKICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lOwogICAgIHsKLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElE
QkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKLSAgICAgICAgaWYg
KHNxbC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtl
eSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgw
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBkYXRhYmFzZU5hbWUgPSBz
cWwuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZGF0YWJhc2VOYW1lID0gc3FsLT5nZXRDb2x1
bW5UZXh0KDApOwogICAgICAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1faWRlbnRpZmllci5kYXRh
YmFzZU5hbWUoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSBuYW1lIGluIHRo
ZSBpbmZvIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAo
JyVzJykiLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9pZGVudGlmaWVyLmRhdGFiYXNl
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MDAwLDEwICsxMDAwLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgfQogICAgIHVp
bnQ2NF90IGRhdGFiYXNlVmVyc2lvbjsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
cWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUg
a2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51
bGwoMCkpCisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZl
cnNpb24nOyJfcyk7CisgICAgICAgIGlmIChzcWwtPmlzQ29sdW1uTnVsbCgwKSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5n
ZXRDb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC0+Z2V0
Q29sdW1uVGV4dCgwKTsKICAgICAgICAgYXV0byBwYXJzZWRWZXJzaW9uID0gcGFyc2VJbnRlZ2Vy
PHVpbnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICAgICAgaWYgKCFwYXJzZWRWZXJzaW9uKSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykg
ZG9lcyBub3QgY2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZl
cnNpb24iLCBzdHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTAyMSwxNyArMTAyMSwx
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJ
RCA9IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewot
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1l
LCBrZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7Ci0gICAgICAgIGlm
IChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0
ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMg
RlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzcWwpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAg
ICAgICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwu
Z2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0g
c3FsLmdldENvbHVtblRleHQoMSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlE
ID0gc3FsLT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9y
ZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxjaGFy
PiBrZXlQYXRoQnVmZmVyOwotICAgICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcigy
LCBrZXlQYXRoQnVmZmVyKTsKKyAgICAgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9y
KDIsIGtleVBhdGhCdWZmZXIpOwogCiAgICAgICAgICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBv
YmplY3RTdG9yZUtleVBhdGg7CiAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0
aChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEoKSks
IGtleVBhdGhCdWZmZXIuc2l6ZSgpLCBvYmplY3RTdG9yZUtleVBhdGgpKSB7CkBAIC0xMDM5LDEx
ICsxMDM5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgYXV0b0luY3Jl
bWVudCA9IHNxbC5nZXRDb2x1bW5JbnQoMyk7CisgICAgICAgICAgICBib29sIGF1dG9JbmNyZW1l
bnQgPSBzcWwtPmdldENvbHVtbkludCgzKTsKIAogICAgICAgICAgICAgZGF0YWJhc2VJbmZvLT5h
ZGRFeGlzdGluZ09iamVjdFN0b3JlKHsgb2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVOYW1lLCBX
VEZNb3ZlKG9iamVjdFN0b3JlS2V5UGF0aCksIGF1dG9JbmNyZW1lbnQgfSk7CiAKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICByZXN1bHQgPSBzcWwtPnN0ZXAo
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAg
LTEwNTYsMjAgKzEwNTYsMjAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICBIYXNoTWFw
PHN0ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8SURCSW5kZXhJbmZvPj4gaW5kZXhJbmZvTWFwOwog
ICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBp
ZCwgbmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJP
TSBJbmRleEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRy
eSBGUk9NIEluZGV4SW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBm
cm9tIHRoZSBJbmRleEluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBp
bnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICAgICAgdWludDY0X3QgaW5kZXhJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2
NCgwKTsKLSAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgx
KTsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwuZ2V0Q29sdW1uSW50
NjQoMik7CisgICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLT5nZXRDb2x1bW5JbnQ2
NCgwKTsKKyAgICAgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBzcWwtPmdldENvbHVtblRleHQo
MSk7CisgICAgICAgICAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlEID0gc3FsLT5nZXRDb2x1bW5J
bnQ2NCgyKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAg
ICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAg
ICAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CiAK
ICAgICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IGluZGV4S2V5UGF0aDsKICAgICAgICAg
ICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4
S2V5UGF0aCkpIHsKQEAgLTEwODEsOCArMTA4MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRh
YmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJ
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGJvb2wgdW5pcXVlID0gc3FsLmdldENvbHVtbkludCg0KTsKLSAgICAgICAgICAgIGJv
b2wgbXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1bW5JbnQoNSk7CisgICAgICAgICAgICBib29sIHVu
aXF1ZSA9IHNxbC0+Z2V0Q29sdW1uSW50KDQpOworICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5
ID0gc3FsLT5nZXRDb2x1bW5JbnQoNSk7CiAKICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUg
PSBkYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSUQp
OwogICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkgewpAQCAtMTEwNiw3ICsxMTA2LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
eHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlz
dGluZ0luZGV4KGluZGV4SW5mbyk7CiAgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJ
RCA8IGluZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTE2MiwxMSAr
MTE2MiwxNSBAQCBPcHRpb25hbDxJREJEYXRhYmFzZU5hbWVBbmRWZXJzaW9uPiBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpbwogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBuYW1lc3FsKGRhdGFiYXNlLCAi
U0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5h
bWUnOyIpOwotICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIGF1dG8gbmFtZXNxbCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2
YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiX3Mp
OworICAgIGlmICghbmFtZXNxbCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVw
YXJlIHN0YXRlbWVudCB0byBnZXQgZGF0YWJhc2UgbmFtZSglaSkgLSAlcyIsIGRhdGFiYXNlLmxh
c3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorICAgIGF1dG8gZGF0YWJhc2VOYW1lID0gbmFtZXNxbC0+Z2V0Q29s
dW1uVGV4dCgwKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB2ZXJzcWwoZGF0YWJhc2UsICJTRUxF
Q1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lv
bic7Il9zKTsKLSAgICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbC5nZXRDb2x1bW5UZXh0
KDApOworICAgIGF1dG8gdmVyc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24n
OyJfcyk7CisgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSB2ZXJzcWwgPyB2ZXJzcWwtPmdldENv
bHVtblRleHQoMCkgOiBTdHJpbmcoKTsKICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbiA9IHBhcnNl
SW50ZWdlcjx1aW50NjRfdD4oc3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFkYXRhYmFzZVZlcnNp
b24pIHsKICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycp
IGRvZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2
ZXJzaW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKQEAgLTEzMTAsMTAgKzEzMTQs
MTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNv
bnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYg
aW5mby5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uY2hhbmdlKSB7CiAgICAg
ICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hhbmdlID0gbWFrZVVuaXF1
ZTxJREJEYXRhYmFzZUluZm8+KCptX2RhdGFiYXNlSW5mbyk7CiAKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZhbHVl
ID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3Fs
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBT
dHJpbmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1f
c3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBJREJEYXRhYmFzZUluZm8gU0VUIHZh
bHVlID0gPyB3aGVyZSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOworICAgICAgICBpZiAo
IXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZv
Lm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2Ui
X3MgfTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzNDcsNDMgKzIzNTEsMzMgQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGkKICAgICBpbnQ2NF90IHJlY29yZElEID0gMDsKICAgICBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciBrZXlSZXN1bHRCdWZmZXIsIHZhbHVlUmVzdWx0QnVmZmVyOwogICAgIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVwcGVyT3BlbiA9ICJTRUxF
Q1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/
IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRF
UiBCWSBrZXk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVw
cGVyQ2xvc2VkID0gIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENB
U1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJPcGVuID0gIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWQgPSAiU0VMRUNU
IGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBB
TkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRF
UiBCWSBrZXk7IjsKLQotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVu
VXBwZXJPcGVuS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RT
dG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMg
VEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBs
b3dlck9wZW5VcHBlckNsb3NlZEtleU9ubHkgPSAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hF
UkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9
IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJPcGVuS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00g
UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlckNsb3NlZEtleU9ubHkgPSAiU0VM
RUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBD
QVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7
Ci0KICAgICAgICAgU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc3FsOwogCiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIElEQkdldFJlY29yZERhdGFUeXBlOjpLZXlB
bmRWYWx1ZToKICAgICAgICAgICAgIGlmIChrZXlSYW5nZS5sb3dlck9wZW4pIHsKICAgICAgICAg
ICAgICAgICBpZiAoa2V5UmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAgICAgICAgICBzcWwg
PSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4s
IGxvd2VyT3BlblVwcGVyT3Blbik7CisgICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBr
ZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZ
IGtleTsiX3MpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9z
ZWQsIGxvd2VyT3BlblVwcGVyQ2xvc2VkKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2Fj
aGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsICJT
RUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQg
PSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkg
T1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGlmIChrZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCBsb3dl
ckNsb3NlZFVwcGVyT3Blbik7CisgICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCAiU0VMRUNUIGtl
eSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZ
IGtleTsiX3MpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNs
b3NlZCwgbG93ZXJDbG9zZWRVcHBlckNsb3NlZCk7CisgICAgICAgICAgICAgICAgICAgIHNxbCA9
IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9z
ZWQsICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0
b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFT
IFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgSURCR2V0UmVjb3JkRGF0YVR5cGU6OktleU9ubHk6CiAgICAgICAg
ICAgICBpZiAoa2V5UmFuZ2UubG93ZXJPcGVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJh
bmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVuVXBwZXJPcGVu
S2V5T25seSk7CisgICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6
OkdldEtleVJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4sICJTRUxFQ1Qga2V5IEZST00gUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBr
ZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRL
ZXlSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGxvd2VyT3BlblVwcGVyQ2xvc2VkS2V5T25s
eSk7CisgICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtl
eVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8
PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIGlmIChrZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICAg
ICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlckNsb3Nl
ZFVwcGVyT3BlbiwgbG93ZXJDbG9zZWRVcHBlck9wZW5LZXlPbmx5KTsKKyAgICAgICAgICAgICAg
ICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2Vk
VXBwZXJPcGVuLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9
ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBP
UkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlckNsb3NlZFVw
cGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5T25seSk7CisgICAgICAgICAgICAg
ICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlckNsb3Nl
ZFVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJ
RCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVY
VCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjQ1
NSwzNiArMjQ0OSwyNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEFsbFJl
Y29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFucwogCiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZSBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudEZv
ckdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0
QWxsUmVjb3Jkc0RhdGEpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3Bl
blVwcGVyT3BlbktleSA9IlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhU
KSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVu
VXBwZXJDbG9zZWRLZXkgPSAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJD
bG9zZWRVcHBlck9wZW5LZXkgPSAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBB
UyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93
ZXJDbG9zZWRVcHBlckNsb3NlZEtleSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBv
YmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENB
U1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgbG93ZXJPcGVuVXBwZXJPcGVuVmFsdWUgPSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZS
T00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRF
WFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVwcGVyQ2xvc2VkVmFsdWUgPSAiU0VMRUNUIGtl
eSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZ
IGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyT3Bl
blZhbHVlID0gIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1Qo
PyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
bG93ZXJDbG9zZWRVcHBlckNsb3NlZFZhbHVlID0gIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0KICAgICBp
ZiAoZ2V0QWxsUmVjb3Jkc0RhdGEuZ2V0QWxsVHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6
OktleXMpIHsKICAgICAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS5sb3dl
ck9wZW4pIHsKICAgICAgICAgICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEu
dXBwZXJPcGVuKQotICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpH
ZXRBbGxLZXlSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXkp
OwotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29y
ZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRzTG93
ZXJPcGVuVXBwZXJPcGVuLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRF
WFQpIE9SREVSIEJZIGtleTsiX3MpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVu
dChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBrZXkg
RlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoZ2V0QWxsUmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLnVwcGVy
T3BlbikKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlS
ZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJPcGVuS2V5KTsKLSAg
ICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlckNs
b3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5KTsKKyAgICAgICAgICAg
IHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRzTG93ZXJDbG9zZWRV
cHBlck9wZW4sICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0g
PyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9S
REVSIEJZIGtleTsiX3MpOworICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0
QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsICJTRUxFQ1Qga2V5IEZST00gUmVj
b3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBB
TkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICB9CiAKICAg
ICBpZiAoZ2V0QWxsUmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLmxvd2VyT3BlbikgewogICAgICAg
ICBpZiAoZ2V0QWxsUmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLnVwcGVyT3BlbikKLSAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5V
cHBlck9wZW4sIGxvd2VyT3BlblVwcGVyT3BlblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNhY2hl
ZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCBsb3dl
ck9wZW5VcHBlckNsb3NlZFZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1l
bnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4sICJTRUxFQ1Qga2V5LCB2
YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkg
PiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7
Il9zKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jk
c0xvd2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVj
b3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFO
RCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogICAgIH0KIAogICAg
IGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICBy
ZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJPcGVuVmFsdWUpOwotICAgIHJldHVybiBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNs
b3NlZFVwcGVyQ2xvc2VkVmFsdWUpOworICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNR
TDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5LCB2YWx1
ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJf
cyk7CisgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2Vy
Q2xvc2VkVXBwZXJDbG9zZWQsICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBr
ZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogfQogCiBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxs
UmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkK
QEAgLTI3NTgsMTkgKzI3NDMsMTQgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpn
ZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW8KICAgICBTUUxp
dGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzdGF0ZW1lbnQ7CiAKICAgICBpZiAoIWluZGV4SWRl
bnRpZmllcikgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dlck9w
ZW5VcHBlck9wZW5SZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FT
VCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExv
d2VyT3BlblVwcGVyQ2xvc2VkUmVjb3JkcyA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtl
eSA8PSBDQVNUKD8gQVMgVEVYVCk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGNvdW50TG93ZXJDbG9zZWRVcHBlck9wZW5SZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVY
VCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgY291bnRMb3dlckNsb3NlZFVwcGVyQ2xvc2VkUmVjb3JkcyA9ICJTRUxFQ1QgQ09V
TlQoKikgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7Ci0KICAgICAgICAgaWYg
KHJhbmdlLmxvd2VyT3BlbiAmJiByYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudFJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4s
IGNvdW50TG93ZXJPcGVuVXBwZXJPcGVuUmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQg
PSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudFJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4sICJT
RUxFQ1QgQ09VTlQoKikgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBr
ZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKTsiX3MpOwogICAg
ICAgICBlbHNlIGlmIChyYW5nZS5sb3dlck9wZW4gJiYgIXJhbmdlLnVwcGVyT3BlbikKLSAgICAg
ICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2Vy
T3BlblVwcGVyQ2xvc2VkLCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkUmVjb3Jkcyk7CisgICAg
ICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudFJlY29yZHNMb3dl
ck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1Qo
PyBBUyBURVhUKTsiX3MpOwogICAgICAgICBlbHNlIGlmICghcmFuZ2UubG93ZXJPcGVuICYmIHJh
bmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChT
UUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCBjb3VudExvd2VyQ2xvc2VkVXBw
ZXJPcGVuUmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQo
U1FMOjpDb3VudFJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKTsiX3MpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudFJlY29yZHNMb3dl
ckNsb3NlZFVwcGVyQ2xvc2VkLCBjb3VudExvd2VyQ2xvc2VkVXBwZXJDbG9zZWRSZWNvcmRzKTsK
KyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jk
c0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkg
PD0gQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0YXRlbWVu
dAogICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKSAhPSBTUUxJVEVfT0sKQEAgLTI3ODAsMTkgKzI3NjAsMTQgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW8KICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwg
IlVuYWJsZSB0byBjb3VudCByZWNvcmRzIGluIG9iamVjdCBzdG9yZSBkdWUgdG8gYmluZGluZyBm
YWlsdXJlIl9zIH07CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgY291bnRMb3dlck9wZW5VcHBlck9wZW5JbmRleFJlY29yZHMgPSAiU0VM
RUNUIENPVU5UKCopIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/IEFORCBrZXkg
PiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKTsiOwotICAgICAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dlck9wZW5VcHBlckNsb3NlZEluZGV4UmVj
b3JkcyA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9
ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsi
OwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dlckNsb3NlZFVwcGVy
T3BlbkluZGV4UmVjb3JkcyA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hF
UkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1Qo
PyBBUyBURVhUKTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dl
ckNsb3NlZFVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIElu
ZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBB
TkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsiOwotICAgICAgICAKICAgICAgICAgaWYgKHJhbmdl
Lmxvd2VyT3BlbiAmJiByYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3Blbiwg
Y291bnRMb3dlck9wZW5VcHBlck9wZW5JbmRleFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVt
ZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRJbmRleFJlY29yZHNMb3dlck9wZW5VcHBl
ck9wZW4sICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9
ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJf
cyk7CiAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmxvd2VyT3BlbiAmJiAhcmFuZ2UudXBwZXJPcGVu
KQotICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRJbmRl
eFJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgY291bnRMb3dlck9wZW5VcHBlckNsb3NlZElu
ZGV4UmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FM
OjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIENPVU5UKCop
IEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAgICAgICAgZWxzZSBpZiAo
IXJhbmdlLmxvd2VyT3BlbiAmJiByYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyQ2xvc2VkVXBw
ZXJPcGVuLCBjb3VudExvd2VyQ2xvc2VkVXBwZXJPcGVuSW5kZXhSZWNvcmRzKTsKKyAgICAgICAg
ICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93
ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hF
UkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1Qo
PyBBUyBURVhUKTsiX3MpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9z
ZWQsIGNvdW50TG93ZXJDbG9zZWRVcHBlckNsb3NlZEluZGV4UmVjb3Jkcyk7CisgICAgICAgICAg
ICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2Vy
Q2xvc2VkVXBwZXJDbG9zZWQsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hF
UkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNU
KD8gQVMgVEVYVCk7Il9zKTsKIAogICAgICAgICBpZiAoIXN0YXRlbWVudAogICAgICAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sK
QEAgLTMwMTcsMTIgKzI5OTIsMTIgQEAgdm9pZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGJvb2wgZXJyb3JlZCA9IHRydWU7CiAKICAgICAgICAg
aWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3Fs
aXRlREIsICJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmlsZXM7Il9zKTsKLSAgICAgICAgICAg
IGlmIChzcWwucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmlsZXM7Il9zKTsKKyAg
ICAgICAgICAgIGlmIChzcWwpIHsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLT5z
dGVwKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQoc3FsLmdldENvbHVtblRleHQoMCkp
OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAg
ICAgICAgICBibG9iRmlsZXMuYXBwZW5kKHNxbC0+Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpCkBAIC0zMDU0LDIxICsz
MDI5LDIwIEBAIHZvaWQgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bnJlZ2lzdGVyQ3Vyc29yKFNR
TGl0ZUlEQkN1cnNvciYgY3Vyc29yKQogICAgIG1fY3Vyc29ycy5yZW1vdmUoY3Vyc29yLmlkZW50
aWZpZXIoKSk7CiB9CiAKLVNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMIHNx
bCwgY29uc3QgY2hhciogc3RhdGVtZW50KQorU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQoU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpTUUwgc3FsLCBBU0NJSUxpdGVyYWwgcXVlcnkpCiB7CiAgICAgaWYgKHNxbCA+PSBTUUw6
OkludmFsaWQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIFNRTCBzdGF0ZW1lbnQgSUQg
cGFzc2VkIHRvIGNhY2hlZFN0YXRlbWVudCgpIik7CiAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgfQogCi0gICAgaWYgKG1fY2FjaGVkU3RhdGVt
ZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKSB7CisgICAgaWYgKG1fY2FjaGVkU3RhdGVt
ZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldKQogICAgICAgICByZXR1cm4gU1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihzcWwpXS5nZXQoKSB9OwotICAgIH0KIAogICAgIGlmIChtX3NxbGl0ZURCKSB7Ci0gICAg
ICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KCptX3NxbGl0ZURCLCBzdGF0ZW1lbnQpOwotICAgICAgICBp
ZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0tPnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzcWwpXSA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9z
cWxpdGVEQi0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoc3RhdGVt
ZW50KQorICAgICAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4o
c3FsKV0gPSBzdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0YXRlbWVu
dHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS5nZXQoKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oCmluZGV4IDk2ZDI4ZTJlNjNjYWE0YTVkMjhjZWM0YjkyZGNkNzIyMGQwNzE0YjMu
LjQxZGNiZjM5NTg1OWJlZjczYWUzM2EzMzNlNDZmYzhhM2NhNDI1NjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmgKQEAgLTIwNCw3ICsyMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBJ
bnZhbGlkLAogICAgIH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNo
ZWRTdGF0ZW1lbnQoU1FMLCBjb25zdCBjaGFyKik7CisgICAgU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50KFNRTCwgQVNDSUlMaXRlcmFsKTsKICAgICBTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnRGb3JHZXRBbGxPYmplY3RTdG9y
ZVJlY29yZHMoY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmKTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxpbnQ+
KFNRTDo6SW52YWxpZCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCBjMmNlZDg0MTkzMDBi
NWE4YzU4YThlODQwMjIyZjI1NTYxMjViMzVjLi5mMjg5MDhjYTUxNWU3YjliMmZmZjg0ODhjMDA2
ZDJiMGU4MWJiZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMjM1LDEyICsyMzUsMTIg
QEAgYm9vbCBTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0YXRlbWVudChjb25zdCBTdHJp
bmcmIHNxbCkKICAgICBBU1NFUlQoIW1fY3VycmVudFVwcGVyS2V5LmlzTnVsbCgpKTsKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKSk7CiAKLSAgICBtX3N0YXRl
bWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX3RyYW5zYWN0aW9uLT5zcWxpdGVU
cmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLCBzcWwpOwotCi0gICAgaWYgKG1fc3RhdGVtZW50LT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3RyYW5zYWN0
aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgpLnByZXBhcmVIZWFwU3RhdGVtZW50
KHNxbCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIGN1cnNvciBzdGF0ZW1lbnQgKHByZXBhcmUvaWQpIC0gJyVzJyIsIG1fdHJhbnNh
Y3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIG1fc3RhdGVtZW50ID0gc3RhdGVtZW50
LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAKICAgICByZXR1cm4gYmluZEFyZ3VtZW50cygp
OwogfQpAQCAtMzQxLDEyICszNDEsMTIgQEAgYm9vbCBTUUxpdGVJREJDdXJzb3I6OnJlc2V0QW5k
UmViaW5kUHJlSW5kZXhTdGF0ZW1lbnRJZk5lY2Vzc2FyeSgpCiAKICAgICBhdXRvJiBkYXRhYmFz
ZSA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCk7CiAgICAg
aWYgKCFtX3ByZUluZGV4U3RhdGVtZW50KSB7Ci0gICAgICAgIG1fcHJlSW5kZXhTdGF0ZW1lbnQg
PSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oZGF0YWJhc2UsIGJ1aWxkUHJlSW5kZXhTdGF0
ZW1lbnQoaXNEaXJlY3Rpb25OZXh0KCkpKTsKLQotICAgICAgICBpZiAobV9wcmVJbmRleFN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHByZUluZGV4U3Rh
dGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoYnVpbGRQcmVJbmRleFN0YXRl
bWVudChpc0RpcmVjdGlvbk5leHQoKSkpOworICAgICAgICBpZiAoIXByZUluZGV4U3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIHByZSBzdGF0ZW1l
bnQgLSAnJXMnIiwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CisgICAgICAgIG1fcHJlSW5kZXhTdGF0ZW1lbnQgPSBwcmVJbmRl
eFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmICht
X3ByZUluZGV4U3RhdGVtZW50LT5yZXNldCgpICE9IFNRTElURV9PSykgewpAQCAtNTg4LDkgKzU4
OCw4IEBAIFNRTGl0ZUlEQkN1cnNvcjo6RmV0Y2hSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjppbnRl
cm5hbEZldGNoTmV4dFJlY29yZChTUUxpdGVDdXJzCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IW1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQgfHwgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRl
bWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0
U3RvcmVTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oZGF0YWJhc2UsICJT
RUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBBUyBURVhUKSBhbmQg
b2JqZWN0U3RvcmVJRCA9ID87Iik7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRPYmplY3RTdG9y
ZVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgICAgICBtX2Nh
Y2hlZE9iamVjdFN0b3JlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChhdXRv
IGNhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1l
bnQoIlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQp
IGFuZCBvYmplY3RTdG9yZUlEID0gPzsiX3MpKQorICAgICAgICAgICAgICAgIG1fY2FjaGVkT2Jq
ZWN0U3RvcmVTdGF0ZW1lbnQgPSBjYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudC52YWx1ZSgpLm1v
dmVUb1VuaXF1ZVB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX2NhY2hlZE9iamVj
dFN0b3JlU3RhdGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCmluZGV4IGFiNDc4MjZjODNlYmI1OGI3N2I0YTYxNTI3MTM5MjEzM2NmODQw
ZTYuLmU3NGUyOGY1YjllNWY3OWZjNWQ1Y2QwY2U3NjZjYTBkZGYxYmY0NzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC0xMTMsMTgg
KzExMywxNSBAQCBzdGF0aWMgU3RyaW5nIGZvcm1hdEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBt
ZXNzYWdlLCBpbnQgc3FsaXRlRXJyb3JDb2RlLCBjb25zdAogCiBzdGF0aWMgYm9vbCBzZXRUZXh0
VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRi
LCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFy
ZVN0YXRlbWVudChxdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNl
ICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOworICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgdmFsdWUpOwogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3Rh
dGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTM0LDE3ICsxMzEsMTUgQEAg
c3RhdGljIGJvb2wgc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNv
bnN0IFN0cmluZyYgcXVlcnksIGNvbnMKIAogc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0
RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3Ry
aW5nJiByZXN1bHRTdHJpbmcpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwg
cXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHBy
ZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcyki
LCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRi
LnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAg
IExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCBy
ZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgc3RhdGVtZW50LmVycm9yKCksIHF1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwog
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNzE0LDggKzcwOSw4IEBAIFZlY3RvcjxT
dHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcygpCiB7CiAgICAgZGlzYWJsZUF1
dGhvcml6ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoc3FsaXRlRGF0YWJh
c2UoKSwgIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7
Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0
byBzdGF0ZW1lbnQgPSBzcWxpdGVEYXRhYmFzZSgpLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBu
YW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0
IG9mIHRhYmxlcyBmb3IgZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCku
ZGF0YSgpKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcigpOwogICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKQEAgLTcyMyw4ICs3MTgsOCBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFz
ZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQogCiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1l
czsKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCk7CiAgICAgICAgIGlmIChuYW1lICE9IHVucXVhbGlmaWVkSW5mb1RhYmxlTmFtZSkK
ICAgICAgICAgICAgIHRhYmxlTmFtZXMuYXBwZW5kKG5hbWUpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApp
bmRleCA3ZjMwNDExZDI2Y2I3MzZiMTc4NTVmZmYyNzZkODVmZGYzOTVkNjhkLi43NzAwMmMwNzc1
ZDdlOTAwOTdjZGIxYTlmMGY1NzRhZWZhZDA3YTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yMzUsMTUg
KzIzNSwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW5Ob0xvY2so
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyB3aGVyZSBvcmln
aW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9y
aWdpbiBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBzdGF0ZW1lbnQu
c3RlcCgpID09IFNRTElURV9ST1c7CisgICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1c7CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXNl
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
SWRlbnRpZmllcikKQEAgLTI1NiwxNSArMjU2LDE1IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpo
YXNFbnRyeUZvckRhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25z
CiAgICAgfQogCiAgICAgLy8gV2UndmUgZ290IGEgdHJhY2tlciBkYXRhYmFzZS4gU2V0IHVwIGEg
cXVlcnkgdG8gYXNrIGZvciB0aGUgZGIgb2YgaW50ZXJlc3Q6Ci0gICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUg
b3JpZ2luPT8gQU5EIG5hbWU9PzsiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2lu
PT8gQU5EIG5hbWU9PzsiX3MpOwogCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQorICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0YXRl
bWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVzsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6
bWF4aW11bVNpemUoRGF0YWJhc2UmIGRhdGFiYXNlKQpAQCAtMzI1LDI2ICszMjUsMjYgQEAgU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWcKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9yIHRo
aXMgZGF0YWJhc2UgeWV0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9Pzsi
KTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50
aWZpZXIpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLQotICAgIGludCByZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQot
ICAgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRv
UGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgaWYgKCFj
cmVhdGVJZk5vdEV4aXN0cykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRy
aWV2ZSBmaWxlbmFtZSBmcm9tIERhdGFiYXNlIFRyYWNrZXIgZm9yIG9yaWdpbiAlcywgbmFtZSAl
cyIsIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2Vz
IFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgc3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgy
LCBuYW1lKTsKKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMp
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUg
ZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBv
cmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGVtZW50
LmZpbmFsaXplKCk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBnZW5lcmF0ZURhdGFiYXNlRmls
ZU5hbWUoKTsKIApAQCAtMzcyLDE2ICszNzIsMTYgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4gRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICBpbnQgc3RlcFJlc3VsdDsKLSAg
ICB3aGlsZSAoKHN0ZXBSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQot
ICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlk
ZW50aWZpZXIoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLT5pc29sYXRlZENvcHkoKSk7Cisg
ICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cp
CisgICAgICAgIG9yaWdpbnMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNl
SWRlbnRpZmllcihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpLT5pc29sYXRlZENvcHkoKSk7
CiAgICAgb3JpZ2lucy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYgKHN0ZXBSZXN1bHQgIT0gU1FM
SVRFX0RPTkUpCkBAIC0zOTcsMTYgKzM5NywxNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZVRy
YWNrZXI6OmRhdGFiYXNlTmFtZXNOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcgog
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00g
RGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87Il9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IG5hbWVzOwogICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBuYW1lcy5hcHBlbmQoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCkpID09IFNRTElURV9ST1cpCisgICAgICAgIG5hbWVzLmFwcGVuZChzdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMCkpOwogICAgIG5hbWVzLnNocmlua1RvRml0KCk7CiAKICAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC00MzksMTQgKzQzOSwxNCBAQCBEYXRhYmFzZURl
dGFpbHMgRGF0YWJhc2VUcmFja2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbgogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRv
ZXNOb3RFeGlzdCk7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
ICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplIEZS
T00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICAgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iX3MpOworICAg
ICAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMo
KTsKIAotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0g
ICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKKyAgICAgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgyLCBuYW1lKTsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0
ID09IFNRTElURV9ET05FKQogICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygpOwog
CkBAIC00NTQsOCArNDU0LDggQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0
YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAgICAgICAg
IExPR19FUlJPUigiRXJyb3IgcmV0cmlldmluZyBkZXRhaWxzIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmln
aW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNl
RGV0YWlscygpOwogICAgICAgICB9Ci0gICAgICAgIGRpc3BsYXlOYW1lID0gc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCk7Ci0gICAgICAgIGV4cGVjdGVkVXNhZ2UgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMSk7CisgICAgICAgIGRpc3BsYXlOYW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDApOworICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgxKTsKICAgICB9CiAKICAgICBTdHJpbmcgcGF0aCA9IGZ1bGxQYXRoRm9yRGF0YWJhc2Uob3Jp
Z2luLCBuYW1lLCBmYWxzZSk7CkBAIC00NzQsMzkgKzQ3NCw0MSBAQCB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2lu
LCBjb25zdAogICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoQ3JlYXRlSWZEb2VzTm90RXhpc3QpOwog
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlkIEZST00gRGF0YWJh
c2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFt
ZSk7CiAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0
ID09IFNRTElURV9ST1cpCi0gICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBpZiAoZ3VpZCA9PSAwKSB7Ci0g
ICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIHRvIGRldGVybWluZyBleGlzdGVuY2Ugb2YgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVz
IGluIHRyYWNrZXIgZGF0YWJhc2UiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZp
ZXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gVGhpcyBj
YXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFi
YXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4g
dGhlIHRyYWNrZXIKLSAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxlIGlz
IGFuIGV4dGVybmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91ciBj
b2RlLCBpdCdzIHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNlCi0g
ICAgICAgICAgICAvLyBTbyB3ZSdsbCBwcmludCBhbiBlcnJvciBpbnN0ZWFkCi0gICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBv
cmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0
IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51
dGY4KCkuZGF0YSgpKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmln
aW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlm
aWVyKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1lKTsKKworICAgICAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDAp
OworCisgICAgICAgIGlmICghZ3VpZCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJ
VEVfRE9ORSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHRvIGRldGVybWluZyBl
eGlzdGVuY2Ugb2YgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGluIHRyYWNrZXIgZGF0YWJhc2Ui
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIG5l
dmVyIG9jY3VyIC0gd2Ugc2hvdWxkIG5ldmVyIGJlIHNldHRpbmcgZGF0YWJhc2UgZGV0YWlscyBm
b3IgYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlcgor
ICAgICAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxlIGlzIGFuIGV4dGVy
bmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91ciBjb2RlLCBpdCdz
IHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNlCisgICAgICAgICAg
ICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAorICAgICAgICAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IHJldHJpZXZlIGd1aWQgZm9yIGRhdGFiYXNlICVzIGluIG9y
aWdpbiAlcyBmcm9tIHRoZSB0cmFja2VyIGRhdGFiYXNlIC0gaXQgaXMgaW52YWxpZCB0byBzZXQg
ZGF0YWJhc2UgZGV0YWlscyBvbiBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0
IGluIHRoZSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRl
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFtZT0/
LCBlc3RpbWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Iik7Ci0gICAgaWYgKHVwZGF0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gdXBkYXRlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFt
ZT0/LCBlc3RpbWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Il9zKTsKKyAgICBpZiAoIXVwZGF0ZVN0
YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRUZXh0
KDEsIGRpc3BsYXlOYW1lKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDIsIGVzdGlt
YXRlZFNpemUpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMywgZ3VpZCk7CisgICAg
dXBkYXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7CisgICAgdXBkYXRlU3Rh
dGVtZW50LT5iaW5kSW50NjQoMiwgZXN0aW1hdGVkU2l6ZSk7CisgICAgdXBkYXRlU3RhdGVtZW50
LT5iaW5kSW50NjQoMywgZ3VpZCk7CiAKLSAgICBpZiAodXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgZGV0YWlscyBm
b3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5J
ZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjcx
LDE1ICs2NzMsMTUgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFO
b0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4KICAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBxdW90YTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBxdW90YSBGUk9NIE9yaWdpbnMgd2hlcmUg
b3JpZ2luPT87Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBxdW90YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Il9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4i
KTsKICAgICAgICAgcmV0dXJuIHF1b3RhOwogICAgIH0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBxdW90YSA9IHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCgwKTsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAg
ICAgcXVvdGEgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogCiAgICAgcmV0dXJuIHF1
b3RhOwogfQpAQCAtNzA1LDI2ICs3MDcsMjYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1
b3RhKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCB1bnNpZ25lZCBsb25nIGwKIAog
ICAgIGJvb2wgb3JpZ2luRW50cnlFeGlzdHMgPSBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhvcmln
aW4pOwogICAgIGlmICghb3JpZ2luRW50cnlFeGlzdHMpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8s
ID8pIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5T
RVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4g
JXMgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5i
aW5kSW50NjQoMiwgcXVvdGEpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBv
cmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMiwgcXVvdGEpOwogCi0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3Jp
Z2luICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGluc2VydGVkTmV3
T3JpZ2luID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/
IFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGJvb2wgZXJyb3IgPSBzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSzsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJFIG9yaWdpbj0/
Il9zKTsKKyAgICAgICAgYm9vbCBlcnJvciA9ICFzdGF0ZW1lbnQ7CiAgICAgICAgIGlmICghZXJy
b3IpIHsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVvdGEpOwotICAgICAg
ICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBxdW90YSk7CisgICAgICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAK
LSAgICAgICAgICAgIGVycm9yID0gIXN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgICAg
ICAgICAgZXJyb3IgPSAhc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGVycm9yKQpAQCAtNzQ4LDE2ICs3NTAsMTYgQEAgYm9vbCBEYXRhYmFzZVRy
YWNrZXI6OmFkZERhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBjb25z
dCBTdHJpbmcKICAgICAvLyBOZXcgZGF0YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHVudGls
IHRoZSBvcmlnaW4gaGFzIGJlZW4gZXN0YWJsaXNoZWQKICAgICBBU1NFUlQoaGFzRW50cnlGb3JP
cmlnaW5Ob0xvY2sob3JpZ2luKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFM
VUVTICg/LCA/LCA/KTsiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZB
TFVFUyAoPywgPywgPyk7Il9zKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgz
LCBwYXRoKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuYW1lKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDMsIHBhdGgpOwogCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1h
bmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGFkZCBkYXRhYmFzZSAlcyB0byBvcmlnaW4gJXM6ICVzXG4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCku
ZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTg4MSwyOCArODgzLDI4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxl
dGVPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIERlbGV0aW9uTW9kCiAg
ICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgICAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOwot
ICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9N
IERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGRh
dGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJh
c2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2Vz
IGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBvcmlnaW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRF
TEVURSBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICAgICAgaWYgKG9yaWdpblN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gb3JpZ2luU3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5z
IFdIRVJFIG9yaWdpbj0/Il9zKTsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2lu
ICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG9y
aWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwor
ICAgICAgICBvcmlnaW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CiAKLSAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQo
KSkgeworICAgICAgICBpZiAoIW9yaWdpblN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRh
YmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CkBAIC05MTUsMTAgKzkxNywxMCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3Jp
Z2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAogCiAgICAg
ICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKICAgICAg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAg
ICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IG9yaWdpbiBGUk9NIE9yaWdpbnMiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7
Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisg
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAg
ICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKICAgICAgICAgfQogCkBAIC0xMDgxLDE3ICsx
MDgzLDE3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyCiAKICAgICBMb2NrSG9sZGVyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBu
YW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZS
T00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iX3MpOworICAgIGlmICghc3Rh
dGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24g
b2YgZGF0YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCku
ZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIGRvbmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNl
SWRlbnRpZmllcigpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKSB7CisgICAgaWYgKCFzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZSAl
cyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdp
bi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZG9uZURlbGV0
aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE5
NywxMyArMTE5OSwxMSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5l
ZERhdGFiYXNlcygpCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAqZGF0
YWJhc2VOYW1lTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5hbWUg
PSBkYXRhYmFzZXMua2V5OwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxl
TmFtZTsKLSAgICAgICAgICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5h
bWU9PzsiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0g
U1FMSVRFX09LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZU5hbWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFt
ZT0/OyJfcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFiYXNlRmlsZU5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0YWJhc2UgPSBmYWxzZTsKQEAgLTEy
NTgsMTMgKzEyNTgsMTQgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmls
ZUlmRW1wdHkoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIAogICAgIC8vIFNwZWNpZnkgdGhhdCB3
ZSB3YW50IHRoZSBleGNsdXNpdmUgbG9ja2luZyBtb2RlLCBzbyBhZnRlciB0aGUgbmV4dCB3cml0
ZSwKICAgICAvLyB3ZSdsbCBiZSBob2xkaW5nIHRoZSBsb2NrIHRvIHRoaXMgZGF0YWJhc2UgZmls
ZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgbG9ja1N0YXRlbWVudChkYXRhYmFzZSwgIlBSQUdNQSBs
b2NraW5nX21vZGU9RVhDTFVTSVZFOyIpOwotICAgIGlmIChsb2NrU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgcmVzdWx0ID0g
bG9ja1N0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XICYmIHJl
c3VsdCAhPSBTUUxJVEVfRE9ORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxvY2tTdGF0
ZW1lbnQuZmluYWxpemUoKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja1N0YXRlbWVudCA9IGRh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBsb2NraW5nX21vZGU9RVhDTFVTSVZFOyJf
cyk7CisgICAgICAgIGlmICghbG9ja1N0YXRlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaW50IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVD
b21tYW5kKCJCRUdJTiBFWENMVVNJVkUgVFJBTlNBQ1RJT047IikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
U3RhdGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3Rh
dGVtZW50LmNwcAppbmRleCA0YzI5NjE1OGFkMjlkYmNlNWYwNTA2ZGNjZTY3MTI5YTFjM2E5NWQx
Li45YjE5MGNhYTk2M2U1YTFhNzUyYWQ5ZWYyNDYwNTFjODQ2MmVhMzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCkBAIC0x
MTIsMjggKzExMiwyNiBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIp
CiAKICAgICBTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UgPSBkYi5zcWxpdGVEYXRhYmFzZSgpOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgbV9zdGF0ZW1lbnQpOwot
ICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5
IGNvcnJlY3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVu
dC5hc2NpaSgpLmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0lOVEVSUlVQVCkKLSAgICAgICAgICAgIG1fZXJyb3Ig
PSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgcHJl
cGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsICJpbnRlcnJ1cHRlZCIpOworICAgIGF1dG8gc3RhdGVt
ZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtX3N0YXRlbWVudCk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNv
cnJlY3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5h
c2NpaSgpLmRhdGEoKSwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5lcnJvcigpID09IFNRTElURV9JTlRFUlJVUFQpCisg
ICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0Vf
RVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksICJp
bnRlcnJ1cHRlZCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRl
bWVudCIsIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgbV9l
cnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3Qg
cHJlcGFyZSBzdGF0ZW1lbnQiLCBzdGF0ZW1lbnQuZXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IElm
IHRoZSBzdGF0ZW1lbnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0ZSwg
dGhlIGJpbmQgcGFyYW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBudW1i
ZXIgb2YgcXVlc3Rpb24gbWFya3MuCiAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBt
aWdodCBiZSB0cnlpbmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cwotICAgIGlm
IChzdGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7
CisgICAgaWYgKHN0YXRlbWVudC0+YmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMu
c2l6ZSgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQg
ZG9lc24ndCBtYXRjaCBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MiKTsKICAgICAgICAgbV9lcnJv
ciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8n
cyBpbiBzdGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50
LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LT5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKICAgICAgICAgaWYg
KHJlc3VsdCA9PSBTUUxJVEVfRlVMTCkgewogICAgICAgICAgICAgc2V0RmFpbHVyZUR1ZVRvUXVv
dGEoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0OSwyMCArMTQ3LDIwIEBAIGJv
b2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlJiBkYikKICAgICBhdXRvIHJlc3VsdFNl
dCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRlKCk7CiAKICAgICAvLyBTdGVwIHNvIHdlIGNhbiBmZXRj
aCB0aGUgY29sdW1uIG5hbWVzLgotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgY2FzZSBTUUxJVEVfUk9XOiB7Ci0gICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVu
dC5jb2x1bW5Db3VudCgpOworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQtPmNv
bHVtbkNvdW50KCk7CiAgICAgICAgIGF1dG8mIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKIAog
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAg
ICByb3dzLmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisgICAgICAgICAg
ICByb3dzLmFkZENvbHVtbihzdGF0ZW1lbnQtPmdldENvbHVtbk5hbWUoaSkpOwogCiAgICAgICAg
IGRvIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUo
aSkpOworICAgICAgICAgICAgICAgIHJvd3MuYWRkUmVzdWx0KHN0YXRlbWVudC0+Z2V0Q29sdW1u
VmFsdWUoaSkpOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAg
ICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgICAgIH0gd2hpbGUgKHJl
c3VsdCA9PSBTUUxJVEVfUk9XKTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05F
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCBlZjM2ZGQ1ZDViMDkzMTk1MjI3OGExZTBjNmU0
Mjk4NTljNTUyMTQxLi4wZmJiN2MzZjMyZjExMDVlZDEzMTExOGYyNzNhODlmYjgzZTQyYmM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTk4LDEzICs5OCwxMyBAQCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBVUkwm
IG1hbmlmZQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIEFORCBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNo
ZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIEFORCBtYW5p
ZmVzdFVSTD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMLnN0cmluZygp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMLnN0cmluZygpKTsKICAg
IAotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ET05FKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTExMywxNCArMTEzLDE0IEBAIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3VwKGNvbnN0
IFVSTCYgbWFuaWZlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMikpOworICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlU3RvcmFn
ZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMikp
OwogCiAgICAgYXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZVN0b3JhZ2VJRCk7CiAg
ICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGF1
dG8mIGdyb3VwID0gKm5ldyBBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKnRoaXMsIG1hbmlmZXN0VVJM
KTsKLSAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgIGdyb3VwLnNl
dE5ld2VzdENhY2hlKGNhY2hlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHJldHVybiAmZ3JvdXA7
CiB9ICAgIApAQCAtMTcxLDEyICsxNzEsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZl
dGNoIHRoZSBob3N0IGhhc2hlcy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgbWFuaWZlc3RIb3N0SGFzaCBGUk9NIENhY2hlR3JvdXBzIik7ICAgIAot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlmZXN0SG9zdEhh
c2ggRlJPTSBDYWNoZUdyb3VwcyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQot
ICAgICAgICBtX2NhY2hlSG9zdFNldC5hZGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQorICAgICAgICBtX2NhY2hlSG9zdFNldC5hZGQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKIH0gICAgCiAKIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29u
c3QgVVJMJiB1cmwpCkBAIC0yMTIsMTMgKzIxMiwxMyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJs
KQogICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKIAogICAgIC8vIENoZWNrIHRoZSBkYXRhYmFzZS4gTG9vayBmb3IgYWxsIGNhY2hl
IGdyb3VwcyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00g
Q2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENh
Y2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiX3MpOwor
ICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBp
bnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
SVRFX1JPVykgewotICAgICAgICBVUkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgxKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBVUkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpOwogCiAgICAgICAgIGlmIChtX2NhY2hlc0luTWVt
b3J5LmNvbnRhaW5zKG1hbmlmZXN0VVJMLnN0cmluZygpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMjI4LDcgKzIyOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAKICAgICAgICAg
Ly8gV2UgZm91bmQgYSBjYWNoZSBncm91cCB0aGF0IG1hdGNoZXMuIE5vdyBjaGVjayBpZiB0aGUg
bmV3ZXN0IGNhY2hlIGhhcyBhIHJlc291cmNlIHdpdGgKICAgICAgICAgLy8gYSBtYXRjaGluZyBV
UkwuCi0gICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgbmV3ZXN0
Q2FjaGVJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0
KDIpKTsKICAgICAgICAgYXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKICAg
ICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQwLDcgKzI0MCw3
IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hl
R3JvdXBGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5p
ZmVzdFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3Jh
Z2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkp
OwogICAgICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgbV9jYWNoZXNJbk1lbW9yeS5zZXQoZ3JvdXAubWFuaWZlc3RVUkwoKS5zdHJpbmco
KSwgJmdyb3VwKTsKIApAQCAtMjc5LDEzICsyNzksMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0
IFUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIC8vIENoZWNrIHRoZSBk
YXRhYmFzZS4gTG9vayBmb3IgYWxsIGNhY2hlIGdyb3VwcyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFu
aWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUg
SVMgTk9UIE5VTEwiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3
ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBVUkwgbWFuaWZl
c3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgd2hpbGUg
KChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBV
UkwgbWFuaWZlc3RVUkwgPSBVUkwoeyB9LCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpOwog
CiAgICAgICAgIGlmIChtX2NhY2hlc0luTWVtb3J5LmNvbnRhaW5zKG1hbmlmZXN0VVJMLnN0cmlu
ZygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjk2LDcgKzI5Niw3IEBAIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91
cEZvclVSTChjb25zdCBVCiAKICAgICAgICAgLy8gV2UgZm91bmQgYSBjYWNoZSBncm91cCB0aGF0
IG1hdGNoZXMuIE5vdyBjaGVjayBpZiB0aGUgbmV3ZXN0IGNhY2hlIGhhcyBhIHJlc291cmNlIHdp
dGgKICAgICAgICAgLy8gYSBtYXRjaGluZyBmYWxsYmFjayBuYW1lc3BhY2UuCi0gICAgICAgIHVu
c2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsKICAgICAgICAg
YXV0byBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKIAogICAgICAgICBVUkwgZmFs
bGJhY2tVUkw7CkBAIC0zMDgsNyArMzA4LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFUKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8mIGdyb3VwID0gKm5ldyBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAoKnRoaXMsIG1hbmlmZXN0VVJMKTsKLSAgICAgICAgZ3JvdXAuc2V0U3Rv
cmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkp
KTsKKyAgICAgICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0
ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiAgICAgICAgIGdyb3VwLnNldE5ld2VzdENhY2hl
KGNhY2hlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0
KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5nKCksICZncm91cCk7CkBAIC00MTYsMTcgKzQxNiwx
NyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdp
bihjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZwogICAgIC8vIElmIGFuIE9yaWdpbiByZWNvcmQg
ZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgQ09VTlQgd2lsbCBiZSAwIGFuZCBxdW90YSB3aWxsIGJl
IDAuCiAgICAgLy8gVXNpbmcgdGhlIGNvdW50IHRvIGRldGVybWluZSBpZiBhIHJlY29yZCBleGlz
dGVkIG9yIG5vdCBpcyBhIHNhZmUgd2F5IHRvIGRldGVybWluZQogICAgIC8vIGlmIGEgcXVvdGEg
b2YgMCBpcyByZWFsLCBmcm9tIHRoZSByZWNvcmQsIG9yIGZyb20gbnVsbC4KLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90
YSBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVChxdW90YSksIHF1b3RhIEZST00gT3JpZ2lucyBXSEVS
RSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRl
bnRpZmllcigpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOwor
ICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgIC8vIFJldHVybiB0aGUg
cXVvdGEsIG9yIGlmIGl0IHdhcyBudWxsIHRoZSBkZWZhdWx0LgogICAgIGlmIChyZXN1bHQgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBib29sIHdhc05vUmVjb3JkID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDApID09IDA7Ci0gICAgICAgIHF1b3RhID0gd2FzTm9SZWNvcmQgPyBtX2RlZmF1
bHRPcmlnaW5RdW90YSA6IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAgYm9v
bCB3YXNOb1JlY29yZCA9ICFzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOworICAgICAgICBx
dW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQtPmdl
dENvbHVtbkludDY0KDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ0MCwx
OSArNDQwLDE5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdl
Rm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYKIAogICAgIC8vIElmIGFuIE9yaWdp
bnMgcmVjb3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIFNVTSB3aWxsIGJlIG51bGwsCiAgICAg
Ly8gd2hpY2ggd2lsbCBiZWNvbWUgMCwgYXMgZXhwZWN0ZWQsIHdoZW4gY29udmVydGluZyB0byBh
IG51bWJlci4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgU1VNKENhY2hlcy5zaXplKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIgIEZST00gQ2FjaGVHcm91cHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4g
PSBPcmlnaW5zLm9yaWdpbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgSU5ORVIgSk9JTiBDYWNoZXMgT04gQ2FjaGVHcm91cHMuaWQgPSBDYWNoZXMuY2FjaGVH
cm91cCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgV0hFUkUg
T3JpZ2lucy5vcmlnaW49PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBPcmlnaW5zIE9OIENh
Y2hlR3JvdXBzLm9yaWdpbiA9IE9yaWdpbnMub3JpZ2luIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBDYWNoZXMgT04gQ2FjaGVH
cm91cHMuaWQgPSBDYWNoZXMuY2FjaGVHcm91cCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3MpOworICAg
IGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogCiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHVzYWdlID0gc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICB1c2FnZSA9IHN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50NjQoMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNDcwLDQw
ICs0NzAsNDAgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUmVtYWlu
aW5nU2l6ZUZvck9yaWdpbkV4Y2x1ZGluZ0NhY2hlKGNvbnMKIAogICAgIC8vIFJlbWFpbmluZyBz
aXplID0gdG90YWwgb3JpZ2luIHF1b3RhIC0gc2l6ZSBvZiBhbGwgY2FjaGVzIHdpdGggb3JpZ2lu
IGV4Y2x1ZGluZyB0aGUgcHJvdmlkZWQgY2FjaGUuCiAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUg
bnVtYmVyIG9mIGNhY2hlcyBzbyB3ZSBjYW4gdGVsbCBpZiB0aGUgcmVzdWx0IHdhcyBhIGNhbGN1
bGF0aW9uIG9yIG5vdC4KLSAgICBjb25zdCBjaGFyKiBxdWVyeTsKICAgICBpbnQ2NF90IGV4Y2x1
ZGluZ0NhY2hlSWRlbnRpZmllciA9IGNhY2hlID8gY2FjaGUtPnN0b3JhZ2VJRCgpIDogMDsKLSAg
ICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDApIHsKLSAgICAgICAgcXVlcnkgPSAi
U0VMRUNUIENPVU5UKENhY2hlcy5zaXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6
ZSkiCi0gICAgICAgICAgICAgICAgIiAgRlJPTSBDYWNoZUdyb3VwcyIKLSAgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9y
aWdpbiIKLSAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBz
LmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5z
Lm9yaWdpbj0/IgotICAgICAgICAgICAgICAgICIgICBBTkQgQ2FjaGVzLmlkIT0/IjsKLSAgICB9
IGVsc2UgewotICAgICAgICBxdWVyeSA9ICJTRUxFQ1QgQ09VTlQoQ2FjaGVzLnNpemUpLCBPcmln
aW5zLnF1b3RhIC0gU1VNKENhY2hlcy5zaXplKSIKLSAgICAgICAgICAgICAgICAiICBGUk9NIENh
Y2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBPcmlnaW5zIE9OIENhY2hl
R3JvdXBzLm9yaWdpbiA9IE9yaWdpbnMub3JpZ2luIgotICAgICAgICAgICAgICAgICIgSU5ORVIg
Sk9JTiBDYWNoZXMgT04gQ2FjaGVHcm91cHMuaWQgPSBDYWNoZXMuY2FjaGVHcm91cCIKLSAgICAg
ICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iOwotICAgIH0KLQotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgcXVlcnkpOwotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHF1ZXJ5ID0gW2V4Y2x1ZGluZ0Nh
Y2hlSWRlbnRpZmllcl0oKSB7CisgICAgICAgIGlmIChleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKENhY2hlcy5zaXplKSwgT3JpZ2lu
cy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAgICAgICIgIEZST00g
Q2FjaGVHcm91cHMiCisgICAgICAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBPcmlnaW5zIE9O
IENhY2hlR3JvdXBzLm9yaWdpbiA9IE9yaWdpbnMub3JpZ2luIgorICAgICAgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3Jv
dXAiCisgICAgICAgICAgICAgICAgICAgICIgV0hFUkUgT3JpZ2lucy5vcmlnaW49PyIKKyAgICAg
ICAgICAgICAgICAgICAgIiAgIEFORCBDYWNoZXMuaWQhPT8iX3M7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuICJTRUxFQ1QgQ09VTlQoQ2FjaGVzLnNpemUpLCBPcmlnaW5zLnF1b3RhIC0gU1VN
KENhY2hlcy5zaXplKSIKKyAgICAgICAgICAgICAgICIgIEZST00gQ2FjaGVHcm91cHMiCisgICAg
ICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBP
cmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAgICAgICIgSU5ORVIgSk9JTiBDYWNoZXMgT04gQ2Fj
aGVHcm91cHMuaWQgPSBDYWNoZXMuY2FjaGVHcm91cCIKKyAgICAgICAgICAgICAgICIgV0hFUkUg
T3JpZ2lucy5vcmlnaW49PyJfczsKKyAgICB9KCk7CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogICAgIGlmIChleGNsdWRpbmdD
YWNoZUlkZW50aWZpZXIgIT0gMCkKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBleGNs
dWRpbmdDYWNoZUlkZW50aWZpZXIpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgp
OworICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBleGNsdWRpbmdDYWNoZUlkZW50aWZp
ZXIpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgIC8vIElmIHRo
ZSBjb3VudCB3YXMgMCB0aGF0IHRoZW4gd2UgaGF2ZSB0byBxdWVyeSB0aGUgb3JpZ2luIHRhYmxl
IGRpcmVjdGx5CiAgICAgLy8gZm9yIGl0cyBxdW90YS4gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgdGhl
IGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgIGludDY0X3QgbnVtYmVyT2ZDYWNoZXMgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgIGludDY0X3QgbnVtYmVyT2ZDYWNoZXMgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOwogICAgICAgICBpZiAobnVtYmVyT2ZDYWNoZXMgPT0gMCkKICAgICAgICAgICAgIGNh
bGN1bGF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgcmVtYWluaW5nU2l6ZSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlbWFpbmluZ1NpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MSk7CisgICAgICAgICAgICByZW1haW5pbmdTaXplID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC01MjIsMTQgKzUyMiwxNCBA
QCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdp
bihjb25zdCBTZWN1cml0eU9yaWdpbiogbwogICAgIGlmICghZW5zdXJlT3JpZ2luUmVjb3JkKG9y
aWdpbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRh
dGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBPcmlnaW5zIFNFVCBxdW90YT0/IFdIRVJF
IG9yaWdpbj0/Iik7Ci0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gdXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAg
aWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVwZGF0
ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVvdGEpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5k
VGV4dCgyLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgdXBkYXRl
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+Ymlu
ZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgcmV0
dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3RhdGVtZW50KTsKKyAgICByZXR1cm4gZXhlY3V0
ZVN0YXRlbWVudCh1cGRhdGVTdGF0ZW1lbnQudmFsdWUoKSk7CiB9CiAKIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYgc3FsKQpAQCAt
NTU0LDcgKzU1NCw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVt
YVZlcnNpb24oKQogewogICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKTsKIAotICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50
KG1fZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAg
IGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJB
R01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAgaW50IHZlcnNpb24gPSB2ZXJzaW9uU3RhdGVtZW50
ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICBpZiAodmVyc2lv
biA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTU3MCwxMSArNTcxLDEx
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQog
ICAgIGludCB1bnVzZWROdW1CeXRlcyA9IHNucHJpbnRmKHVzZXJWZXJzaW9uU1FMLCBzaXplb2Yo
dXNlclZlcnNpb25TUUwpLCAiUFJBR01BIHVzZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24p
OwogICAgIEFTU0VSVF9VTlVTRUQodW51c2VkTnVtQnl0ZXMsIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKHVzZXJWZXJzaW9uU1FMKSkgPj0gdW51c2VkTnVtQnl0ZXMpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCB1c2VyVmVyc2lvblNRTCk7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHVzZXJWZXJzaW9uU1FMKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVt
ZW50KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKTsKICAgICBzZXRE
YXRhYmFzZVZlcnNpb24uY29tbWl0KCk7CiB9CiAgICAgCkBAIC02NTIsOCArNjUzLDcgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1l
bnQmIHN0YXRlbWVudCkKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgYm9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJBcHBsaWNh
dGlvbiBDYWNoZSBTdG9yYWdlOiBmYWlsZWQgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVy
cm9yIFwiJXNcIiIsIAotICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgp
LmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIExPR19FUlJPUigi
QXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBl
cnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAKICAgICByZXR1
cm4gcmVzdWx0OwogfSAgICAKQEAgLTY3MCwxNSArNjcwLDE1IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEdyb3VwU3Rv
cmFnZUlECiAgICAgLy8gYSB3YXkgdG8gcmVwYWlyIGl0LgogICAgIGRlbGV0ZUNhY2hlR3JvdXBS
ZWNvcmQoZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVHcm91cHMgKG1hbmlm
ZXN0SG9zdEhhc2gsIG1hbmlmZXN0VVJMLCBvcmlnaW4pIFZBTFVFUyAoPywgPywgPykiKTsKLSAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlR3JvdXBz
IChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVzdFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8sID8p
Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
c3RhdGVtZW50LmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkp
OwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBncm91cC0+bWFuaWZlc3RVUkwoKS5zdHJpbmco
KSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDMsIGdyb3VwLT5vcmlnaW4oKS5kYXRhKCkuZGF0
YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDEsIHVybEhvc3RI
YXNoKGdyb3VwLT5tYW5pZmVzdFVSTCgpKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBn
cm91cC0+bWFuaWZlc3RVUkwoKS5zdHJpbmcoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgz
LCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2ln
bmVkIGdyb3VwU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFz
dEluc2VydFJvd0lEKCkpOwpAQCAtNjk4LDE0ICs2OTgsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFn
ZUlESm8KICAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpICE9IDApOwogICAg
IEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUp
IFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIENhY2hlcyAoY2FjaGVHcm91cCwgc2l6ZSkgVkFMVUVTICg/LCA/KSJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpKTsKLSAgICBzdGF0ZW1l
bnQuYmluZEludDY0KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOworICAgIHN0
YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAg
c3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGUtPmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKSk7
CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgdW5zaWduZWQgY2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9kYXRhYmFzZS5sYXN0SW5zZXJ0Um93SUQoKSk7CkBAIC03MjUsMjYgKzcyNSwyOCBAQCBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwg
UmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNvbnN0IFZlY3RvcjxVUkw+JiBvbmxpbmVBbGxvd2xp
c3QgPSBjYWNoZS0+b25saW5lQWxsb3dsaXN0KCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8m
IGFsbG93bGlzdFVSTCA6IG9ubGluZUFsbG93bGlzdCkgewotICAgICAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVXaGl0ZWxpc3RV
UkxzICh1cmwsIGNhY2hlKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
cHJlcGFyZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkg
VkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IGFsbG93bGlzdFVSTC5zdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CiAKLSAgICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQpKQorICAgICAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICAvLyBTdG9yZSBvbmxpbmUgYWxsb3dsaXN0IHdpbGRjYXJkIGZsYWcuCiAgICAg
ewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQg
SU5UTyBDYWNoZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyAod2lsZGNhcmQsIGNhY2hlKSBWQUxV
RVMgKD8sID8pIik7Ci0gICAgICAgIHN0YXRlbWVudC5wcmVwYXJlKCk7CisgICAgICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNo
ZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cyAod2lsZGNhcmQsIGNhY2hlKSBWQUxVRVMgKD8sID8p
Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+YWxsb3dzQWxsTmV0d29y
a1JlcXVlc3RzKCkpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlU3RvcmFn
ZUlEKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5l
dHdvcmtSZXF1ZXN0cygpKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVT
dG9yYWdlSUQpOwogCi0gICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQor
ICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTc1MiwxNCArNzU0LDE1IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hl
LCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgY29uc3QgRmFsbGJhY2tVUkxWZWN0b3ImIGZhbGxi
YWNrVVJMcyA9IGNhY2hlLT5mYWxsYmFja1VSTHMoKTsKICAgICB7CiAgICAgICAgIGZvciAoYXV0
byYgZmFsbGJhY2tVUkwgOiBmYWxsYmFja1VSTHMpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFt
ZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUpIFZBTFVFUyAoPywgPywgPykiKTsKLSAgICAgICAg
ICAgIHN0YXRlbWVudC5wcmVwYXJlKCk7CisgICAgICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gRmFsbGJhY2tVUkxzIChuYW1l
c3BhY2UsIGZhbGxiYWNrVVJMLCBjYWNoZSkgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgICAg
ICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBmYWxsYmFja1VSTC5maXJzdC5zdHJpbmco
KSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZmFsbGJhY2tVUkwuc2Vjb25k
LnN0cmluZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMywgY2FjaGVTdG9y
YWdlSUQpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBmYWxsYmFja1VSTC5m
aXJzdC5zdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGZhbGxi
YWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2
NCgzLCBjYWNoZVN0b3JhZ2VJRCk7CiAKLSAgICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQpKQorICAgICAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9CkBAIC03ODEsMTQgKzc4NCwxNCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FM
aXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hl
UmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGRhdGFT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGRhdGFTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VE
YXRhIChkYXRhLCBwYXRoKSBWQUxVRVMgKD8sID8pIl9zKTsKKyAgICBpZiAoIWRhdGFTdGF0ZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKIAogICAgIFN0cmluZyBmdWxsUGF0aDsK
ICAgICBpZiAoIXJlc291cmNlLT5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICBkYXRhU3RhdGVt
ZW50LmJpbmRUZXh0KDIsIEZpbGVTeXN0ZW06OnBhdGhGaWxlTmFtZShyZXNvdXJjZS0+cGF0aCgp
KSk7CisgICAgICAgIGRhdGFTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIEZpbGVTeXN0ZW06OnBhdGhG
aWxlTmFtZShyZXNvdXJjZS0+cGF0aCgpKSk7CiAgICAgZWxzZSBpZiAoc2hvdWxkU3RvcmVSZXNv
dXJjZUFzRmxhdEZpbGUocmVzb3VyY2UpKSB7CiAgICAgICAgIC8vIEZpcnN0LCBjaGVjayB0byBz
ZWUgaWYgY3JlYXRpbmcgdGhlIGZsYXQgZmlsZSB3b3VsZCB2aW9sYXRlIHRoZSBtYXhpbXVtIHRv
dGFsIHF1b3RhLiBXZSBkb24ndCBuZWVkCiAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBwZXItb3Jp
Z2luIHF1b3RhIGhlcmUsIGFzIGl0IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4gc3RvcmVOZXdlc3RD
YWNoZSgpLgpAQCAtODEzLDEzICs4MTYsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAg
ICAgICAgCiAgICAgICAgIGZ1bGxQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKICAgICAgICAgcmVzb3VyY2UtPnNldFBh
dGgoZnVsbFBhdGgpOwotICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOwor
ICAgICAgICBkYXRhU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBwYXRoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAocmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpCi0gICAgICAgICAgICBkYXRhU3Rh
dGVtZW50LmJpbmRCbG9iKDEsIHJlc291cmNlLT5kYXRhKCkuZGF0YSgpLCByZXNvdXJjZS0+ZGF0
YSgpLnNpemUoKSk7CisgICAgICAgICAgICBkYXRhU3RhdGVtZW50LT5iaW5kQmxvYigxLCByZXNv
dXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoIWRhdGFTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICgh
ZGF0YVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAgICAvLyBDbGVhbiB1cCB0
aGUgZmlsZSB3aGljaCB3ZSBtYXkgaGF2ZSB3cml0dGVuIHRvOgogICAgICAgICBpZiAoIWZ1bGxQ
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZnVsbFBh
dGgpOwpAQCAtODQzLDM2ICs4NDYsMzYgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAK
ICAgICBTdHJpbmcgaGVhZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgcmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIENhY2hlUmVzb3VyY2VzICh1cmwsIHN0YXR1c0NvZGUsIHJlc3BvbnNlVVJMLCBoZWFkZXJz
LCBkYXRhLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/
LCA/LCA/KSIpOwotICAgIGlmIChyZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGF1dG8gcmVzb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VzICh1cmwsIHN0YXR1c0NvZGUsIHJlc3Bv
bnNlVVJMLCBoZWFkZXJzLCBkYXRhLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSkgVkFMVUVT
ICg/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRoZSBzYW1lIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSBhcmUgdXNlZCBpbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUo
KQogICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBhbiBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2Ugb2JqZWN0LiBJZgogICAgIC8vIHlvdSBjaGFuZ2UgdGhlIGNvZGUg
YmVsb3csIHBsZWFzZSBhbHNvIGNoYW5nZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUo
KS4KLSAgICByZXNvdXJjZVN0YXRlbWVudC5iaW5kVGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3Ry
aW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+cmVz
cG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVudC5iaW5kVGV4
dCgzLCByZXNvdXJjZS0+cmVzcG9uc2UoKS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgcmVzb3VyY2VT
dGF0ZW1lbnQuYmluZFRleHQoNCwgaGVhZGVycyk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmlu
ZEludDY0KDUsIGRhdGFJZCk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoNiwgcmVz
b3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmlu
ZFRleHQoNywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKLQotICAg
IGlmICghZXhlY3V0ZVN0YXRlbWVudChyZXNvdXJjZVN0YXRlbWVudCkpCisgICAgcmVzb3VyY2VT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7CisgICAgcmVz
b3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3Rh
dHVzQ29kZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoMywgcmVzb3VyY2Ut
PnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5k
VGV4dCg0LCBoZWFkZXJzKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZEludDY0KDUsIGRh
dGFJZCk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNw
b25zZSgpLm1pbWVUeXBlKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg3LCBy
ZXNvdXJjZS0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCkpOworCisgICAgaWYgKCFleGVj
dXRlU3RhdGVtZW50KHJlc291cmNlU3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICB1bnNpZ25lZCByZXNvdXJjZUlkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwogICAgIAogICAgIC8vIEZpbmFsbHksIGlu
c2VydCB0aGUgY2FjaGUgZW50cnkKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZW50cnlTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291
cmNlKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKGVudHJ5U3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBlbnRyeVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVFbnRyaWVzIChjYWNoZSwgdHlwZSwgcmVz
b3VyY2UpIFZBTFVFUyAoPywgPywgPykiX3MpOworICAgIGlmICghZW50cnlTdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQo
MSwgY2FjaGVTdG9yYWdlSUQpOwotICAgIGVudHJ5U3RhdGVtZW50LmJpbmRJbnQ2NCgyLCByZXNv
dXJjZS0+dHlwZSgpKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMywgcmVzb3VyY2VJ
ZCk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNoZVN0b3JhZ2VJRCk7Cisg
ICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCByZXNvdXJjZS0+dHlwZSgpKTsKKyAgICBl
bnRyeVN0YXRlbWVudC0+YmluZEludDY0KDMsIHJlc291cmNlSWQpOwogICAgIAotICAgIGlmICgh
ZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVt
ZW50KGVudHJ5U3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gRGlkIHdlIHN1Y2Nlc3NmdWxseSB3cml0ZSB0aGUgcmVzb3VyY2UgZGF0YSB0byBh
IGZpbGU/IElmIHNvLApAQCAtODkzLDE0ICs4OTYsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291
cmMKICAgICBBU1NFUlQocmVzb3VyY2UtPnN0b3JhZ2VJRCgpKTsKIAogICAgIC8vIEZpcnN0LCBp
bnNlcnQgdGhlIGRhdGEKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZW50cnlTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlVQREFURSBDYWNoZUVudHJpZXMgU0VUIHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Iik7
Ci0gICAgaWYgKGVudHJ5U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBlbnRyeVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENh
Y2hlRW50cmllcyBTRVQgdHlwZT0/IFdIRVJFIHJlc291cmNlPT8iX3MpOworICAgIGlmICghZW50
cnlTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVudHJ5U3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+dHlwZSgpKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5k
SW50NjQoMiwgcmVzb3VyY2UtPnN0b3JhZ2VJRCgpKTsKKyAgICBlbnRyeVN0YXRlbWVudC0+Ymlu
ZEludDY0KDEsIHJlc291cmNlLT50eXBlKCkpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50
NjQoMiwgcmVzb3VyY2UtPnN0b3JhZ2VJRCgpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVt
ZW50KGVudHJ5U3RhdGVtZW50KTsKKyAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0
YXRlbWVudC52YWx1ZSgpKTsKIH0KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSog
Y2FjaGUpCkBAIC05MjYsMTQgKzkyOSwxNCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdAogICAg
IH0KIAogICAgIC8vIEEgcmVzb3VyY2Ugd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS4gVXBkYXRlIHRo
ZSB0b3RhbCBkYXRhIHNpemUgZm9yIHRoZSBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2l6
ZVVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXpl
Kz8gV0hFUkUgaWQ9PyIpOwotICAgIGlmIChzaXplVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzaXplVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQ2FjaGVzIFNFVCBzaXplPXNpemUrPyBXSEVSRSBpZD0/
Il9zKTsKKyAgICBpZiAoIXNpemVVcGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHJlc291cmNlLT5lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCkpOwotICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQuYmluZEludDY0
KDIsIGNhY2hlLT5zdG9yYWdlSUQoKSk7CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC0+YmluZElu
dDY0KDEsIHJlc291cmNlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOworICAgIHNpemVVcGRh
dGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOwogCi0gICAgaWYg
KCFleGVjdXRlU3RhdGVtZW50KHNpemVVcGRhdGVTdGF0ZW1lbnQpKQorICAgIGlmICghZXhlY3V0
ZVN0YXRlbWVudChzaXplVXBkYXRlU3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmNvbW1pdCgpOwpAQCAt
OTQzLDEzICs5NDYsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmVuc3VyZU9yaWdpblJlY29yZChjb25zdCBTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQogewogICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3JpZ2luU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxV
RVMgKD8sID8pIik7Ci0gICAgaWYgKGluc2VydE9yaWdpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gaW5zZXJ0T3JpZ2luU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxV
RVMgKD8sID8pIl9zKTsKKyAgICBpZiAoIWluc2VydE9yaWdpblN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbi0+ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBpbnNlcnRPcmlnaW5TdGF0
ZW1lbnQuYmluZEludDY0KDIsIG1fZGVmYXVsdE9yaWdpblF1b3RhKTsKLSAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoaW5zZXJ0T3JpZ2luU3RhdGVtZW50KSkKKyAgICBpbnNlcnRPcmlnaW5TdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICBpbnNlcnRPcmlnaW5TdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRPcmlnaW5R
dW90YSk7CisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRlbWVudC52
YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MDI2LDE2ICsxMDI5LDE2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3
ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwJiBncm91cCwgQXBwCiAgICAgCiAgICAgLy8g
VXBkYXRlIHRoZSBuZXdlc3QgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZUdyb3VwcyBTRVQgbmV3
ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlVQREFURSBDYWNoZUdyb3VwcyBTRVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/Il9z
KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBmYWlsdXJlUmVhc29uID0gRGlza09y
T3BlcmF0aW9uRmFpbHVyZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAg
ICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwLm5ld2VzdENhY2hlKCktPnN0b3JhZ2VJRCgp
KTsKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgpKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7
CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgZ3JvdXAuc3RvcmFnZUlEKCkpOwogICAgIAot
ICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKSB7CisgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkgewogICAgICAgICBmYWlsdXJlUmVhc29uID0g
RGlza09yT3BlcmF0aW9uRmFpbHVyZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAg
LTEwOTMsMzQgKzEwOTYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25z
dCBTdHJpbmcmIGhlYWRlcnMsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVk
IHN0b3JhZ2VJRCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50
KG1fZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1Qg
dXJsLCBzdGF0dXNDb2RlLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVy
cywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENh
Y2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNv
dXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlk
PUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hlPT8iKTsKLSAgICBp
ZiAoY2FjaGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gY2Fj
aGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxF
Q1QgdXJsLCBzdGF0dXNDb2RlLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVh
ZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9N
IENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5y
ZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCisgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVz
b3VyY2VEYXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hF
UkUgQ2FjaGVFbnRyaWVzLmNhY2hlPT8iX3MpOworICAgIGlmICghY2FjaGVTdGF0ZW1lbnQpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBjYWNoZSBzdGF0ZW1lbnQsIGVy
cm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0
b3JhZ2VJRCk7CisgICAgY2FjaGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwog
CiAgICAgYXV0byBjYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpOwogCiAgICAgU3Ry
aW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG1fY2FjaGVEaXJlY3RvcnksIG1fZmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKTsKIAogICAg
IGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBjYWNoZVN0YXRlbWVudC5zdGVwKCkp
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpOworICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQtPnN0
ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBVUkwgdXJsKHsgfSwgY2FjaGVTdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICAKLSAgICAgICAgaW50IGh0dHBTdGF0dXND
b2RlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpOworICAgICAgICBpbnQgaHR0cFN0
YXR1c0NvZGUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpOwogCi0gICAgICAgIHVu
c2lnbmVkIHR5cGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FjaGVTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMikpOworICAgICAgICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAKICAgICAgICAgVmVjdG9y
PGNoYXI+IGJsb2I7Ci0gICAgICAgIGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3Rv
cig2LCBibG9iKTsKKyAgICAgICAgY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3Rv
cig2LCBibG9iKTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFdURk1vdmUoYmxvYikpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5nIHBhdGggPSBj
YWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDcpOworICAgICAgICBTdHJpbmcgcGF0aCA9IGNh
Y2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDcpOwogICAgICAgICBsb25nIGxvbmcgc2l6ZSA9
IDA7CiAgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHNpemUgPSBkYXRh
LT5zaXplKCk7CkBAIC0xMTI5LDEzICsxMTMyLDEzIEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
PiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkK
ICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIHNpemUpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDMpOwotICAgICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hl
U3RhdGVtZW50LmdldENvbHVtblRleHQoNCk7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGNh
Y2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDMpOworICAgICAgICBTdHJpbmcgdGV4dEVuY29k
aW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDQpOwogICAgICAgICAKICAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBzaXplLCB0ZXh0
RW5jb2RpbmdOYW1lKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cFN0
YXR1c0NvZGUpOwogCi0gICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCg1KTsKKyAgICAgICAgU3RyaW5nIGhlYWRlcnMgPSBjYWNoZVN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCg1KTsKICAgICAgICAgcGFyc2VIZWFkZXJzKGhlYWRlcnMsIHJlc3BvbnNl
KTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gcmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBXVEZNb3ZlKGRhdGEpLCBwYXRoKTsK
QEAgLTExNTUsMTQgKzExNTgsMTQgQEAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogICAgIH0KIAog
ICAgIC8vIExvYWQgdGhlIG9ubGluZSBhbGxvd2xpc3QKLSAgICBTUUxpdGVTdGF0ZW1lbnQgYWxs
b3dsaXN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxp
c3RVUkxzIFdIRVJFIGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0U3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBhbGxvd2xpc3RTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB1cmwgRlJPTSBDYWNoZVdoaXRlbGlzdFVSTHMg
V0hFUkUgY2FjaGU9PyJfcyk7CisgICAgaWYgKCFhbGxvd2xpc3RTdGF0ZW1lbnQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGFsbG93bGlzdFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKKyAgICBhbGxvd2xpc3RTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQp
OwogICAgIAogICAgIFZlY3RvcjxVUkw+IGFsbG93bGlzdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9
IGFsbG93bGlzdFN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpCi0gICAgICAgIGFsbG93
bGlzdC5hcHBlbmQoVVJMKHsgfSwgYWxsb3dsaXN0U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGFsbG93bGlzdFN0YXRlbWVudC0+c3RlcCgpKSA9PSBT
UUxJVEVfUk9XKQorICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0sIGFsbG93bGlzdFN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVf
RE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBjYWNoZSBvbmxpbmUgYWxs
b3dsaXN0LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTEx
NzAsMjkgKzExNzMsMjkgQEAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogICAgIGNhY2hlLT5zZXRP
bmxpbmVBbGxvd2xpc3QoYWxsb3dsaXN0KTsKIAogICAgIC8vIExvYWQgb25saW5lIGFsbG93bGlz
dCB3aWxkY2FyZCBmbGFnLgotICAgIFNRTGl0ZVN0YXRlbWVudCBhbGxvd2xpc3RXaWxkY2FyZFN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHdpbGRjYXJkIEZST00gQ2FjaGVBbGxvd3NBbGxO
ZXR3b3JrUmVxdWVzdHMgV0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChhbGxvd2xpc3RXaWxkY2Fy
ZFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gYWxsb3dsaXN0V2ls
ZGNhcmRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB3aWxk
Y2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzIFdIRVJFIGNhY2hlPT8iX3Mp
OworICAgIGlmICghYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9y
YWdlSUQpOworICAgIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKICAgICAKLSAgICByZXN1bHQgPSBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC5z
dGVwKCk7CisgICAgcmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFnLCBlcnJvciBcIiVz
XCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKIAotICAgIGNhY2hlLT5zZXRBbGxvd3NB
bGxOZXR3b3JrUmVxdWVzdHMoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoMCkpOworICAgIGNhY2hlLT5zZXRBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoYWxsb3dsaXN0
V2lsZGNhcmRTdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKTsKIAotICAgIGlmIChhbGxvd2xp
c3RXaWxkY2FyZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgaWYgKGFsbG93
bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExP
R19FUlJPUigiVG9vIG1hbnkgcm93cyBmb3Igb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBmbGFn
Iik7CiAKICAgICAvLyBMb2FkIGZhbGxiYWNrIFVSTHMuCi0gICAgU1FMaXRlU3RhdGVtZW50IGZh
bGxiYWNrU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZXNwYWNlLCBmYWxsYmFja1VS
TCBGUk9NIEZhbGxiYWNrVVJMcyBXSEVSRSBjYWNoZT0/Iik7Ci0gICAgaWYgKGZhbGxiYWNrU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBmYWxsYmFja1N0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJh
Y2tVUkwgRlJPTSBGYWxsYmFja1VSTHMgV0hFUkUgY2FjaGU9PyJfcyk7CisgICAgaWYgKCFmYWxs
YmFja1N0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZmFsbGJhY2tTdGF0
ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgZmFsbGJhY2tTdGF0ZW1lbnQtPmJp
bmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogICAgIAogICAgIEZhbGxiYWNrVVJMVmVjdG9yIGZhbGxi
YWNrVVJMczsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IGZhbGxiYWNrU3RhdGVtZW50LnN0ZXAoKSkg
PT0gU1FMSVRFX1JPVykgCi0gICAgICAgIGZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIoVVJMKHsgfSwgZmFsbGJhY2tTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSksIFVSTCh7IH0s
IGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpKSk7CisgICAgd2hpbGUgKChyZXN1
bHQgPSBmYWxsYmFja1N0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBm
YWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDApKSwgVVJMKHsgfSwgZmFsbGJhY2tTdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMSkpKSk7CiAKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQogICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGZhbGxiYWNrIFVSTHMsIGVycm9yIFwiJXNcIiIs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwpAQCAtMTIxOSwyMyArMTIyMiwyMyBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUp
CiAgICAgQVNTRVJUKGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CiAKICAgICAvLyBBbGwg
YXNzb2NpYXRlZCBkYXRhIHdpbGwgYmUgZGVsZXRlZCBieSBkYXRhYmFzZSB0cmlnZ2Vycy4KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNo
ZXMgV0hFUkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVM
RVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpOwotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50LnZhbHVlKCkpOwogCiAgICAgY2FjaGUtPmNsZWFyU3RvcmFnZUlEKCk7CiAK
ICAgICBpZiAoY2FjaGUtPmdyb3VwKCktPm5ld2VzdENhY2hlKCkgPT0gY2FjaGUpIHsKICAgICAg
ICAgLy8gQ3VycmVudGx5LCB0aGVyZSBhcmUgbm8gdHJpZ2dlcnMgb24gdGhlIGNhY2hlIGdyb3Vw
LCB3aGljaCBpcyB3aHkgdGhlIGNhY2hlIGhhZCB0byBiZSByZW1vdmVkIHNlcGFyYXRlbHkgYWJv
dmUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBncm91cFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
REVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgaWQ9PyIpOwotICAgICAgICBpZiAoZ3JvdXBT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBncm91cFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91
cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAgICAgIGlmICghZ3JvdXBTdGF0ZW1lbnQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBncm91cFN0YXRlbWVudC5iaW5kSW50NjQo
MSwgY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpKTsKLSAgICAgICAgZXhlY3V0ZVN0YXRlbWVu
dChncm91cFN0YXRlbWVudCk7CisgICAgICAgIGdyb3VwU3RhdGVtZW50LT5iaW5kSW50NjQoMSwg
Y2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpKTsKKyAgICAgICAgZXhlY3V0ZVN0YXRlbWVudChn
cm91cFN0YXRlbWVudC52YWx1ZSgpKTsKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJT
dG9yYWdlSUQoKTsKICAgICB9CkBAIC0xMzE2LDE0ICsxMzE5LDEzIEBAIE9wdGlvbmFsPFZlY3Rv
cjxVUkw+PiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKICAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0VVJMcyhtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0
VVJMIEZST00gQ2FjaGVHcm91cHMiKTsKLQotICAgIGlmIChzZWxlY3RVUkxzLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzZWxlY3RVUkxzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgbWFuaWZlc3RVUkwgRlJPTSBDYWNoZUdyb3VwcyJfcyk7CisgICAgaWYg
KCFzZWxlY3RVUkxzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9y
PFVSTD4gdXJsczsKLSAgICB3aGlsZSAoc2VsZWN0VVJMcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgdXJscy5hcHBlbmQoVVJMKHsgfSwgc2VsZWN0VVJMcy5nZXRDb2x1bW5UZXh0KDAp
KSk7CisgICAgd2hpbGUgKHNlbGVjdFVSTHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAg
ICB1cmxzLmFwcGVuZChVUkwoeyB9LCBzZWxlY3RVUkxzLT5nZXRDb2x1bW5UZXh0KDApKSk7CiAK
ICAgICByZXR1cm4gdXJsczsKIH0KQEAgLTEzMzEsMzAgKzEzMzMsMzAgQEAgT3B0aW9uYWw8VmVj
dG9yPFVSTD4+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMoKQogYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cFJlY29yZChjb25zdCBTdHJp
bmcmIG1hbmlmZXN0VVJMKQogewogICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhh
c1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaWRTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG1hbmlmZXN0
VVJMPT8iKTsKLSAgICBpZiAoaWRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGlkU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
aWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Il9zKTsKKyAgICBpZiAoIWlk
U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZFN0YXRlbWVudC5iaW5k
VGV4dCgxLCBtYW5pZmVzdFVSTCk7CisgICAgaWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG1hbmlm
ZXN0VVJMKTsKIAotICAgIGludCByZXN1bHQgPSBpZFN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50
IHJlc3VsdCA9IGlkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVf
Uk9XKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQ2NF90IGdyb3VwSWQgPSBpZFN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICBpbnQ2NF90IGdyb3VwSWQgPSBpZFN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlcyBXSEVSRSBjYWNoZUdyb3VwPT8i
KTsKLSAgICBpZiAoY2FjaGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBh
dXRvIGNhY2hlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUg
RlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3RhdGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ3JvdXBT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8i
KTsKLSAgICBpZiAoZ3JvdXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBh
dXRvIGdyb3VwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUg
RlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Il9zKTsKKyAgICBpZiAoIWdyb3VwU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjYWNoZVN0YXRlbWVudC5iaW5kSW50NjQo
MSwgZ3JvdXBJZCk7Ci0gICAgZXhlY3V0ZVN0YXRlbWVudChjYWNoZVN0YXRlbWVudCk7Ci0gICAg
Z3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwotICAgIGV4ZWN1dGVTdGF0ZW1l
bnQoZ3JvdXBTdGF0ZW1lbnQpOworICAgIGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3Jv
dXBJZCk7CisgICAgZXhlY3V0ZVN0YXRlbWVudChjYWNoZVN0YXRlbWVudC52YWx1ZSgpKTsKKyAg
ICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTE0MDksMjAgKzE0MTEsMjAgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tG
b3JEZWxldGVkUmVzb3VyY2VzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2VsZWN0IG9u
bHkgdGhlIHBhdGhzIGluIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0aGF0IGRvIG5vdCBhbHNvIGFw
cGVhciBpbiBDYWNoZVJlc291cmNlRGF0YToKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0
aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCAiCisgICAg
YXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERl
bGV0ZWRDYWNoZVJlc291cmNlcy5wYXRoICIKICAgICAgICAgIkZST00gRGVsZXRlZENhY2hlUmVz
b3VyY2VzICIKICAgICAgICAgIkxFRlQgSk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCiAgICAgICAg
ICJPTiBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBhdGgg
IgotICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBD
YWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIik7CisgICAgICAgICJXSEVSRSAoU0VMRUNU
IERlbGV0ZWRDYWNoZVJlc291cmNlcy5wYXRoID09IENhY2hlUmVzb3VyY2VEYXRhLnBhdGgpIElT
IE5VTEwiX3MpOwogICAgIAotICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgIGlmICghc2VsZWN0UGF0aHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBp
ZiAoc2VsZWN0UGF0aHMuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKHNlbGVjdFBhdGhz
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGRvIHsK
LSAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQYXRocy5nZXRDb2x1bW5UZXh0KDApOworICAg
ICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBhdGhzLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBA
IC0xNDM1LDcgKzE0MzcsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0Zv
ckRlbGV0ZWRSZXNvdXJjZXMoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKLSAgICB9IHdoaWxlIChzZWxl
Y3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVyk7CisgICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKTsKICAgICAKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiREVM
RVRFIEZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzIik7CiB9CkBAIC0xNDQ2LDE3ICsxNDQ4LDE2
IEBAIGxvbmcgbG9uZyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSgp
CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRo
IEZST00gQ2FjaGVSZXNvdXJjZURhdGEgV0hFUkUgcGF0aCBOT1QgTlVMTCIpOwotCi0gICAgaWYg
KHNlbGVjdFBhdGhzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHNlbGVjdFBh
dGhzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIENhY2hl
UmVzb3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiX3MpOworICAgIGlmICghc2VsZWN0UGF0
aHMpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBmbGF0IGZpbGUgY2FjaGUg
cmVzb3VyY2UgZGF0YSwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGxvbmcgbG9uZyB0b3RhbFNpemUgPSAw
OwogICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFt
ZSk7Ci0gICAgd2hpbGUgKHNlbGVjdFBhdGhzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICB3aGls
ZSAoc2VsZWN0UGF0aHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBw
YXRoID0gc2VsZWN0UGF0aHMtPmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyBmdWxs
UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVj
dG9yeSwgcGF0aCk7CiAgICAgICAgIGxvbmcgbG9uZyBwYXRoU2l6ZSA9IDA7CiAgICAgICAgIGlm
ICghRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoZnVsbFBhdGgsIHBhdGhTaXplKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmlu
ZGV4IGY4ZWM5Y2Y0N2Q0YzFmYjAzOGZmNTc3NjNjMTJhZGJiODc5NTIwZDMuLjJiZjM5MTJiZDRi
NzE3MjIzYjQwY2M0OWMxNjZjMWM5OTA1NTI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTgxLDggKzE4MSw2
IEBAIGJvb2wgQ29va2llSmFyREI6Om9wZW5EYXRhYmFzZSgpCiB2b2lkIENvb2tpZUphckRCOjpj
bG9zZURhdGFiYXNlKCkKIHsKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRlbWVudCA6IG1fc3RhdGVtZW50cykKLSAgICAgICAgICAg
IHN0YXRlbWVudC52YWx1ZS5nZXQoKS0+ZmluYWxpemUoKTsKICAgICAgICAgbV9zdGF0ZW1lbnRz
LmNsZWFyKCk7CiAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKICAgICB9CkBAIC0xOTMsNyAr
MTkxLDggQEAgdm9pZCBDb29raWVKYXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYg
KGlzT25NZW1vcnkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHZlcnNpb24gPSBTUUxp
dGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5J
bnQoMCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVt
YVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAtMjczLDI1ICsyNzIsMjUgQEAgYm9vbCBD
b29raWVKYXJEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2Uu
dGFibGVFeGlzdHMoIkNvb2tpZSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgaW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7
Ci0gICAgaWYgKGludGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBp
bnRlZ3JpdHkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVj
azsiX3MpOworICAgIGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGV4ZWN1dGUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7Cisg
ICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29k
ZSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2No
ZWNrIHN0ZXAgcmV0dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7Cisg
ICAgaW50IGNvbHVtbnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVt
bnMgIT0gMSkgewogICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9y
bWluZyBpbnRlZ3JpdHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5n
ZXRDb2x1bW5UZXh0KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRD
b2x1bW5UZXh0KDApOwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBM
T0dfRVJST1IoIkNvb2tpZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCBy
ZXN1bHRUZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTM4NiwyMCArMzg1LDE2IEBAIE9wdGlvbmFs
PFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0CiAKICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFp
biB7IHJlcXVlc3RVcmwgfTsKIAotICAgIGNvbnN0IFN0cmluZyBzcWwgPQotICAgICAgICAiU0VM
RUNUIG5hbWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUs
IHNlc3Npb24gRlJPTSBDb29raWUgV0hFUkUgIlwKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhw
aXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSBXSEVSRSAiXAogICAg
ICAgICAiKE5PVCAoKHNlc3Npb24gPSAwKSBBTkQgKGV4cGlyZXMgPCA/KSkpIgogICAgICAgICAi
QU5EIChodHRwb25seSA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIGh0dHBvbmx5KSkgIlwKICAg
ICAgICAgIkFORCAoc2VjdXJlID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2VjdXJlKSkgIlwK
ICAgICAgICAgIkFORCAoc2Vzc2lvbiA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlc3Npb24p
KSAiXAogICAgICAgICAiQU5EICgoZG9tYWluID0gPykgT1IgKGRvbWFpbiBHTE9CID8pKSAiXAot
ICAgICAgICAiT1JERVIgQlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIjsKLQotICAg
IGF1dG8gcHN0bXQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3Fs
KTsKKyAgICAgICAgIk9SREVSIEJZIGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCJfcyk7
CiAgICAgaWYgKCFwc3RtdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBz
dG10LT5wcmVwYXJlKCk7CiAgICAgcHN0bXQtPmJpbmRJbnQ2NCgxLCBXYWxsVGltZTo6bm93KCku
c2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKSk7CiAgICAgcHN0bXQtPmJpbmRJbnQo
MiwgaHR0cE9ubHkgPyAqaHR0cE9ubHkgOiAtMSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMywgc2Vj
dXJlID8gKnNlY3VyZSA6IC0xKTsKQEAgLTQxMSw5ICs0MDYsNiBAQCBPcHRpb25hbDxWZWN0b3I8
Q29va2llPj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdAogICAgIGVsc2UKICAgICAgICAgcHN0bXQtPmJpbmRUZXh0KDYsIFN0cmluZygiKi4i
KSArIHJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKIAotICAgIGlmICghcHN0bXQpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwog
CiAgICAgd2hpbGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewpAQCAtNDUzLDcgKzQ0
NSw2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2ll
cyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0g
Y29va2llU2Vzc2lvbjsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsK
ICAgICB9Ci0gICAgcHN0bXQtPmZpbmFsaXplKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0K
QEAgLTQ2MywxMSArNDU0LDExIEBAIFZlY3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxD
b29raWVzKCkKICAgICBWZWN0b3I8Q29va2llPiByZXN1bHQ7CiAgICAgaWYgKCFpc0VuYWJsZWQo
KSB8fCAhbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBj
b25zdCBTdHJpbmcgc3FsID0gIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBp
cmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIl9zOwotICAgIGF1dG8g
cHN0bXQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKwor
ICAgIGF1dG8gcHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1l
LCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9u
IEZST00gQ29va2llIl9zKTsKICAgICBpZiAoIXBzdG10KQogICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIHBzdG10LT5wcmVwYXJlKCk7CisKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgIENvb2tpZSBjb29raWU7CiAgICAgICAgIGNvb2tpZS5uYW1l
ID0gcHN0bXQtPmdldENvbHVtblRleHQoMCk7CkBAIC00ODIsNyArNDczLDYgQEAgVmVjdG9yPENv
b2tpZT4gQ29va2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgICAgICBjb29raWUuc2Vzc2lv
biA9IChwc3RtdC0+Z2V0Q29sdW1uSW50KDcpID09IDEpOwogICAgICAgICByZXN1bHQuYXBwZW5k
KFdURk1vdmUoY29va2llKSk7CiAgICAgfQotICAgIHBzdG10LT5maW5hbGl6ZSgpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3MSwxNiArNTYxLDE1IEBAIGJvb2wgQ29va2llSmFyREI6
OnNldENvb2tpZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmCiAKIEhhc2hTZXQ8U3RyaW5nPiBDb29raWVKYXJEQjo6YWxsRG9tYWlucygpCiB7Ci0g
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBTRUxFQ1RfQUxMX0RPTUFJ
TlNfU1FMKTsKLSAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOworICAg
IGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgSGFzaFNldDxTdHJp
bmc+IGRvbWFpbnM7Ci0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICBhdXRvIGRvbWFpbiA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAg
IHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8g
ZG9tYWluID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBkb21haW5zLmFk
ZChkb21haW4pOwogICAgIH0KLQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgIHJldHVy
biBkb21haW5zOwogfQogCkBAIC02MzcsMTAgKzYyNiw5IEBAIGJvb2wgQ29va2llSmFyREI6OmRl
bGV0ZUFsbENvb2tpZXMoKQogCiB2b2lkIENvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVt
ZW50KGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1
ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRl
bWVudC0+cHJlcGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09L
KTsKLSAgICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgV1RGTW92ZShzdGF0ZW1lbnQpKTsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAg
ICBBU1NFUlQoc3RhdGVtZW50KTsKKyAgICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgc3RhdGVtZW50
LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCkpOwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tp
ZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCAr
NjQxLDEzIEBAIFNRTGl0ZVN0YXRlbWVudCYgQ29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgc3FsKQogCiBib29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0
IFN0cmluZyYgc3FsKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAg
c3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVS
ZXR1cm5Db2RlKHN0YXRlbWVudC5lcnJvcigpKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBp
bnQgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNv
ZGUocmV0KSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9y
OiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckRCLmgKaW5kZXggN2MwZWE0N2VjZTRmZjBkNDcyY2U1OTVjOTFl
YTFjZmE5MGIyNWNhNy4uNDFlZDk0NDdjNDA2OGY1YzA2ODkxZDgyNTFjNWM5YzFmMDc2YjM2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckRCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckRCLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZlcmlmeVNjaGVtYVZl
cnNpb24oKTsKICAgICB2b2lkIGRlbGV0ZUFsbFRhYmxlcygpOwogCi0gICAgdm9pZCBjcmVhdGVQ
cmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY3JlYXRlUHJlcGFyZVN0
YXRlbWVudChBU0NJSUxpdGVyYWwpOwogICAgIFNRTGl0ZVN0YXRlbWVudCYgcHJlcGFyZWRTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApp
bmRleCBjMjM5YjQ0MjBiMzI1YjAwNjRjNGY2YWI2OWIxYjgxYjdhMGFkN2JmLi4zMDc1ODhiOGI2
YmNkNDJlMmM4MjEwNmRlNmU2MWUzOGIzZTA2YzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVh
a3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBTUUxp
dGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBPcGVuTW9kZSBvcGVuTW9k
ZSkKIAogICAgIHsKICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50
ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudCgqdGhp
cywgIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykuZXhlY3V0ZUNvbW1hbmQoKSkKKyAg
ICAgICAgaWYgKCFleGVjdXRlQ29tbWFuZCgiUFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7Il9z
KSkKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQg
dGVtcF9zdG9yZSB0byBtZW1vcnkiKTsKICAgICB9CiAKQEAgLTE5NywxMCArMTk3LDEwIEBAIHZv
aWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpvdXJuYWxNb2RlKCkKIHsKICAgICBtX3VzZVdBTCA9
IHRydWU7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgd2FsU3RhdGVtZW50KCp0aGlz
LCAiUFJBR01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKLSAgICAgICAgaWYgKHdhbFN0YXRlbWVu
dC5wcmVwYXJlQW5kU3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byB3YWxTdGF0
ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3MpOwor
ICAgICAgICBpZiAod2FsU3RhdGVtZW50ICYmIHdhbFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBTdHJpbmcgbW9kZSA9IHdhbFN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxT
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ3YWwiKSkKICAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoImpvdXJuYWxfbW9kZSBvZiBkYXRhYmFzZSBzaG91bGQgYmUgJ1dBTCcsIGJ1dCBpcyAnJXMn
IiwgbW9kZS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgpAQCAtMjEwLDkgKzIxMCw5IEBAIHZvaWQg
U1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpvdXJuYWxNb2RlKCkKIAogICAgIHsKICAgICAgICAgU1FM
aXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwot
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2hlY2twb2ludFN0YXRlbWVudCgqdGhpcywgIlBSQUdN
QSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSkiX3MpOwotICAgICAgICBpZiAoY2hlY2twb2ludFN0
YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIGlm
IChjaGVja3BvaW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSkKKyAgICAgICAgYXV0byBjaGVj
a3BvaW50U3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHdhbF9jaGVja3BvaW50
KFRSVU5DQVRFKSJfcyk7CisgICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVtZW50ICYmIGNoZWNr
cG9pbnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBpZiAo
Y2hlY2twb2ludFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKQogICAgICAgICAgICAgICAgIExP
RyhTUUxEYXRhYmFzZSwgIlNRTGl0ZSBkYXRhYmFzZSBjaGVja3BvaW50IGlzIGJsb2NrZWQiKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBm
YWlsZWQgdG8gY2hlY2twb2ludDogJXMiLCBsYXN0RXJyb3JNc2coKSk7CkBAIC0yNzIsOCArMjcy
LDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6bWF4aW11bVNpemUoKQogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1
dGhvcml6ZXIoZmFsc2UpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlz
LCAiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKLSAgICAgICAgbWF4UGFnZUNvdW50ID0gc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBh
cmVTdGF0ZW1lbnQoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCJfcyk7CisgICAgICAgIG1heFBhZ2VD
b3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwogICAg
ICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMjkzLDkgKzI5Myw4IEBA
IHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldE1heGltdW1TaXplKGludDY0X3Qgc2l6ZSkKICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICBlbmFibGVBdXRob3JpemVy
KGZhbHNlKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsIG1ha2VTdHJp
bmcoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOwotICAgIHN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiUFJB
R01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50KSk7CisgICAgaWYgKCFzdGF0
ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gc2V0IG1heGltdW0gc2l6ZSBvZiBkYXRhYmFzZSB0byAlbGxpIGJ5dGVz
Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzaXplKSk7CiAKICAgICBlbmFibGVBdXRob3JpemVy
KHRydWUpOwpAQCAtMzEwLDggKzMwOSw4IEBAIGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUo
KQogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAg
ZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7Ci0gICAgICAgIG1fcGFn
ZVNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgICAgICBhdXRvIHN0YXRlbWVu
dCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBwYWdlX3NpemUiX3MpOworICAgICAgICBtX3Bh
Z2VTaXplID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwogICAg
ICAgICAKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CkBAIC0zMjcsOCAr
MzI2LDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSgpCiAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRo
b3JpemVyKGZhbHNlKTsKICAgICAgICAgLy8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFkZGVk
IGluIFNRTGl0ZSAzLjQuMS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhp
cywgIlBSQUdNQSBmcmVlbGlzdF9jb3VudCJfcyk7Ci0gICAgICAgIGZyZWVsaXN0Q291bnQgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiUFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKKyAgICAgICAgZnJlZWxp
c3RDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwog
ICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAtMzQyLDggKzM0MSw4
IEBAIGludDY0X3QgU1FMaXRlRGF0YWJhc2U6OnRvdGFsU2l6ZSgpCiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9y
aXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQ
UkFHTUEgcGFnZV9jb3VudCJfcyk7Ci0gICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgcGFnZV9jb3VudCJfcyk7CisgICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVudCA/
IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwogICAgICAgICBlbmFibGVBdXRob3Jp
emVyKHRydWUpOwogICAgIH0KIApAQCAtMzcxLDE0ICszNzAsMjIgQEAgdm9pZCBTUUxpdGVEYXRh
YmFzZTo6c2V0QnVzeUhhbmRsZXIoaW50KCpoYW5kbGVyKSh2b2lkKiwgaW50KSkKICAgICAgICAg
TE9HKFNRTERhdGFiYXNlLCAiQnVzeSBoYW5kbGVyIHNldCBvbiBub24tb3BlbiBkYXRhYmFzZSIp
OwogfQogCi1ib29sIFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcm
IHNxbCkKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYg
cXVlcnkpCiB7Ci0gICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5leGVjdXRl
Q29tbWFuZCgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVyeSk7
CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7Cit9
CisKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCBxdWVy
eSkKK3sKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAg
IHJldHVybiBzdGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogfQogCiBi
b29sIFNRTGl0ZURhdGFiYXNlOjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJpbmcm
IHNxbCkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWwpLnJldHVybnNB
dExlYXN0T25lUmVzdWx0KCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KHNxbCk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPnJldHVybnNBdExlYXN0
T25lUmVzdWx0KCk7CiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKGNvbnN0
IFN0cmluZyYgdGFibGVuYW1lKQpAQCAtMzg2LDE4ICszOTMsMTUgQEAgYm9vbCBTUUxpdGVEYXRh
YmFzZTo6dGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJiB0YWJsZW5hbWUpCiAgICAgaWYgKCFpc09w
ZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIHN0YXRlbWVudCA9ICJT
RUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5h
bWUgPSAnIiArIHRhYmxlbmFtZSArICInOyI7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCp0
aGlzLCBzdGF0ZW1lbnQpOwotICAgIHNxbC5wcmVwYXJlKCk7Ci0gICAgcmV0dXJuIHNxbC5zdGVw
KCkgPT0gU1FMSVRFX1JPVzsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQg
bmFtZSA9ICciICsgdGFibGVuYW1lICsgIic7Il9zKTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYm
IHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIHZvaWQgU1FMaXRlRGF0YWJh
c2U6OmNsZWFyQWxsVGFibGVzKCkKIHsKLSAgICBTdHJpbmcgcXVlcnkgPSAiU0VMRUNUIG5hbWUg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiX3M7CiAgICAgVmVjdG9yPFN0
cmluZz4gdGFibGVzOwotICAgIGlmICghU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBxdWVyeSkucmV0
dXJuVGV4dFJlc3VsdHMoMCwgdGFibGVzKSkgeworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3Rh
YmxlJzsiX3MpOworICAgIGlmICghc3RhdGVtZW50IHx8ICFzdGF0ZW1lbnQtPnJldHVyblRleHRS
ZXN1bHRzKDAsIHRhYmxlcykpIHsKICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiVW5hYmxlIHRv
IHJldHJpZXZlIGxpc3Qgb2YgdGFibGVzIGZyb20gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTU4MywxMCArNTg3LDEwIEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OmlzQXV0
b0NvbW1pdE9uKCkgY29uc3QKIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dHVybk9uSW5jcmVtZW50
YWxBdXRvVmFjdXVtKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAi
UFJBR01BIGF1dG9fdmFjdXVtIl9zKTsKLSAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDApOworICAgIGludCBhdXRvVmFjdXVtTW9kZSA9IDA7CisgICAgaWYg
KGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGF1dG9fdmFjdXVtIl9z
KSkKKyAgICAgICAgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsK
ICAgICBpbnQgZXJyb3IgPSBsYXN0RXJyb3IoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsK
IAogICAgIC8vIENoZWNrIGlmIHdlIGdvdCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IHRo
ZSB2YWx1ZSBvZiB0aGUgYXV0b192YWN1dW0gZmxhZy4KICAgICAvLyBJZiB3ZSBnb3QgYSBTUUxJ
VEVfQlVTWSBlcnJvciwgdGhlbiB0aGVyZSdzIHByb2JhYmx5IGFub3RoZXIgdHJhbnNhY3Rpb24g
aW4KQEAgLTY0Myw0ICs2NDcsNzIgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6cmVsZWFzZU1lbW9y
eSgpCiAgICAgc3FsaXRlM19kYl9yZWxlYXNlX21lbW9yeShtX2RiKTsKIH0KIAorc3RhdGljIEV4
cGVjdGVkPHNxbGl0ZTNfc3RtdCosIGludD4gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudChT
UUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHF1ZXJ5LCBzaXplX3QgcXVlcnlM
ZW5ndGgpCit7CisgICAgTG9ja0hvbGRlciBkYXRhYmFzZUxvY2soZGF0YWJhc2UuZGF0YWJhc2VN
dXRleCgpKTsKKyAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVy
eSk7CisKKyAgICAvLyBQYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpbmNsdWRpbmcgdGhl
IG51bGwgY2hhcmFjdGVyIHRvIHNxbGl0ZTNfcHJlcGFyZV92MjsKKyAgICAvLyB0aGlzIGxldHMg
U1FMaXRlIGF2b2lkIGFuIGV4dHJhIHN0cmluZyBjb3B5LgorICAgIHNpemVfdCBsZW5ndGhJbmNs
dWRpbmdOdWxsQ2hhcmFjdGVyID0gcXVlcnlMZW5ndGggKyAxOworCisgICAgc3FsaXRlM19zdG10
KiBzdGF0ZW1lbnQgeyBudWxscHRyIH07CisgICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7
CisgICAgaW50IGVycm9yID0gc3FsaXRlM19wcmVwYXJlX3YyKGRhdGFiYXNlLnNxbGl0ZTNIYW5k
bGUoKSwgcXVlcnksIGxlbmd0aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIsICZzdGF0ZW1lbnQsICZ0
YWlsKTsKKyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKQorICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJzcWxpdGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5
LCBzcWxpdGUzX2Vycm1zZyhkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKKworICAgIGlmICh0
YWlsICYmICp0YWlsKQorICAgICAgICBlcnJvciA9IFNRTElURV9FUlJPUjsKKworICAgIGlmIChl
cnJvciAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgc3FsaXRlM19maW5hbGl6ZShzdGF0ZW1lbnQp
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3IpOworICAgIH0KKworICAgIHJl
dHVybiBzdGF0ZW1lbnQ7Cit9CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxp
dGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQor
eworICAgIENTdHJpbmcgcXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4
KCk7CisgICAgYXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50
KCp0aGlzLCBxdWVyeS5kYXRhKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRl
bWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURh
dGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtw
dWJsaWN9cyIsIHF1ZXJ5LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChz
cWxTdGF0ZW1lbnQuZXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQg
eyAqdGhpcywgc3FsU3RhdGVtZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3Rh
dGVtZW50LCBpbnQ+IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJh
bCBxdWVyeSkKK3sKKyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVT
dGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAg
IGlmICghc3FsU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFi
YXNlLCAiU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJl
IHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0
dXJuIFNRTGl0ZVN0YXRlbWVudCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQor
CitFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFz
ZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAg
ICBDU3RyaW5nIHF1ZXJ5ID0gcXVlcnlTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOwor
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhp
cywgcXVlcnkuZGF0YSgpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFz
ZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1
YmxpY31zIiwgcXVlcnkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNx
bFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVT
dGF0ZW1lbnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUo
KSkpOworfQorCitFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxp
dGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQorewor
ICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhp
cywgcXVlcnkuY2hhcmFjdGVycygpLCBxdWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0
ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVE
YXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVu
dCAle3B1YmxpY31zIiwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1
ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0
ZW1lbnQudmFsdWUoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBm
MGQ2NjBiNzA4NTIwZmE2M2E5OTgwMjhlNTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5
MzQyMTNlN2NkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjgsOCArMjgsMTAgQEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVk
ZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTYxLDYgKzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgdXBkYXRlTGFzdENoYW5nZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExl
YXN0T25lUmVzdWx0KGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgdGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgYm9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8
U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVy
eSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHBy
ZXBhcmVTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBF
eHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxV
bmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJ
SUxpdGVyYWwgcXVlcnkpOworCiAgICAgLy8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9w
ZXJhdGlvbi4gVGhpcyBpcyB0aHJlYWQgc2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGlu
dGVycnVwdCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuY3BwCmluZGV4IGRlYThmZmY4YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTgu
LjQ4ZjlhZWUyZDcxZDkxZmI0NTcwMjIyZDRlNWIwNzg4YTBiZTE1ZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDg3ICs0MSw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6
U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitT
UUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0
ZTNfc3RtdCogc3RhdGVtZW50KQogICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnko
c3FsKQotICAgICwgbV9zdGF0ZW1lbnQoMCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkK
IHsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRl
U3RhdGVtZW50KCkKK1NRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRl
bWVudCYmIG90aGVyKQorICAgIDogbV9kYXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwg
bV9zdGF0ZW1lbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7
Ci0gICAgZmluYWxpemUoKTsKIH0KIAotaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitT
UUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1By
ZXBhcmVkKTsKLQotICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJh
c2VNdXRleCgpKTsKLQotICAgIENTdHJpbmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFj
ZSgpLnV0ZjgoKTsKLSAgICAKLSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0g
JXMiLCBxdWVyeS5kYXRhKCkpOwotCi0gICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJp
bmcgaW5jbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0g
ICAgLy8gdGhpcyBsZXRzIFNRTGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBz
aXplX3QgbGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsK
LQotICAgIGNvbnN0IGNoYXIqIHRhaWwgPSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0
ZTNfcHJlcGFyZV92MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBs
ZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAg
IGlmIChlcnJvciAhPSBTUUxJVEVfT0spCi0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0
ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBz
cWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRh
aWwgJiYgKnRhaWwpCi0gICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBtX2lzUHJlcGFyZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZXJyb3I7CisgICAgc3FsaXRlM19maW5hbGl6ZShtX3N0YXRlbWVudCk7CiB9
CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnN0ZXAoKQogewogICAgIExvY2tIb2xkZXIgZGF0YWJh
c2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKIAotICAgIGlmICghbV9zdGF0ZW1l
bnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0KICAgICAvLyBUaGUgZGF0YWJhc2UgbmVl
ZHMgdG8gdXBkYXRlIGl0cyBsYXN0IGNoYW5nZXMgY291bnQgYmVmb3JlIGVhY2ggc3RhdGVtZW50
CiAgICAgLy8gaW4gb3JkZXIgdG8gY29tcHV0ZSBwcm9wZXJseSB0aGUgbGFzdENoYW5nZXMoKSBy
ZXR1cm4gdmFsdWUuCiAgICAgbV9kYXRhYmFzZS51cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBzdGVwIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCku
ZGF0YSgpKTsKICAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3N0ZXAobV9zdGF0ZW1lbnQpOwotICAg
IGlmIChlcnJvciAhPSBTUUxJVEVfRE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxuUXVlcnkgLSAl
c1xuRXJyb3IgLSAlcyIsIAotICAgICAgICAgICAgZXJyb3IsIG1fcXVlcnkuYXNjaWkoKS5kYXRh
KCksIHNxbGl0ZTNfZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0gICAgfQor
ICAgIGlmIChlcnJvciAhPSBTUUxJVEVfRE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKQorICAg
ICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxpdGUzX3N0ZXAgZmFpbGVkICglaSlcbkVycm9yIC0g
JXMiLCBlcnJvciwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsK
IAogICAgIHJldHVybiBlcnJvcjsKIH0KLSAgICAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6OmZpbmFs
aXplKCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGZhbHNlOwot
I2VuZGlmCi0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsK
LSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBmaW5hbGl6ZSAtICVzIiwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHNxbGl0ZTNfZmluYWxpemUobV9zdGF0ZW1l
bnQpOwotICAgIG1fc3RhdGVtZW50ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBpbnQg
U1FMaXRlU3RhdGVtZW50OjpyZXNldCgpIAogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwot
ICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9H
KFNRTERhdGFiYXNlLCAiU1FMIC0gcmVzZXQgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkp
OwogICAgIGludCBzdGF0dXMgPSBzcWxpdGUzX3Jlc2V0KG1fc3RhdGVtZW50KTsKICAgICBzcWxp
dGUzX2NsZWFyX2JpbmRpbmdzKG1fc3RhdGVtZW50KTsKICAgICByZXR1cm4gc3RhdHVzOwpAQCAt
MTI5LDQyICs4MywyMSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpyZXNldCgpCiAKIGJvb2wgU1FM
aXRlU3RhdGVtZW50OjpleGVjdXRlQ29tbWFuZCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAm
JiBwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNT
RVJUKG1faXNQcmVwYXJlZCk7Ci0gICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICBmaW5hbGl6ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFs
aXplKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9O
RTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KCkK
IHsKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGl6ZSgpOwotICAgIHJldHVybiB0cnVlOwotCisgICAg
cmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfUk9XOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50Ojpi
aW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKQogewotICAgIEFT
U0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKICAg
ICBBU1NFUlQoYmxvYiB8fCAhc2l6ZSk7CiAgICAgQVNTRVJUKHNpemUgPj0gMCk7CiAKLSAgICBp
ZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FMSVRFX0VSUk9SOwotCiAgICAgcmV0
dXJuIHNxbGl0ZTNfYmluZF9ibG9iKG1fc3RhdGVtZW50LCBpbmRleCwgYmxvYiwgc2l6ZSwgU1FM
SVRFX1RSQU5TSUVOVCk7CiB9CiAKQEAgLTE4NSw3ICsxMTgsNiBAQCBpbnQgU1FMaXRlU3RhdGVt
ZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0
ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0g
ICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkp
OwogCkBAIC0yMDQsNyArMTM2LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJ
bnQoaW50IGluZGV4LCBpbnQgaW50ZWdlcikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsK
ICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAKQEAgLTIxMyw3ICsxNDQsNiBAQCBp
bnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiAKIGlu
dCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikK
IHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291
bnQoKSk7CiAKQEAgLTIyMiw3ICsxNTIsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50
NjQoaW50IGluZGV4LCBpbnQ2NF90IGludGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJp
bmREb3VibGUoaW50IGluZGV4LCBkb3VibGUgbnVtYmVyKQogewotICAgIEFTU0VSVChtX2lzUHJl
cGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjMxLDcgKzE2
MCw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3VibGUg
bnVtYmVyKQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kTnVsbChpbnQgaW5kZXgpCiB7Ci0g
ICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkp
OwogCkBAIC0yNDksMjYgKzE3NywxOSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVmFsdWUo
aW50IGluZGV4LCBjb25zdCBTUUxWYWx1ZSYgdmFsdWUpCiAKIHVuc2lnbmVkIFNRTGl0ZVN0YXRl
bWVudDo6YmluZFBhcmFtZXRlckNvdW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBh
cmVkKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gc3FsaXRlM19iaW5kX3BhcmFtZXRlcl9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKIGludCBT
UUxpdGVTdGF0ZW1lbnQ6OmNvbHVtbkNvdW50KCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVk
KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
c3FsaXRlM19kYXRhX2NvdW50KG1fc3RhdGVtZW50KTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0ZW1l
bnQ6OmlzQ29sdW1uTnVsbChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAg
aWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRF
X1JPVykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVw
cGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTI3OCwxOSArMTk5LDE0IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50
IGNvbCkKIGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbkRlY2xhcmVkQXNCbG9iKGludCBj
b2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KSB7Ci0g
ICAgICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3Ry
aW5nVmlldyhzcWxpdGUzX2NvbHVtbl9kZWNsdHlwZShtX3N0YXRlbWVudCwgY29sKSksICJibG9i
Iik7CiB9CiAKIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkK
IHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAg
IGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FM
SVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlmIChjb2x1bW5Db3VudCgp
IDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNxbGl0ZTNfY29sdW1uX25hbWUxNihtX3N0YXRl
bWVudCwgY29sKSkpOwpAQCAtMjk5LDkgKzIxNSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6
OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIFNRTFZhbHVlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29s
dW1uVmFsdWUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9z
dGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygp
ICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBp
ZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0z
MzAsOSArMjQ1LDggQEAgU1FMVmFsdWUgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5WYWx1ZShp
bnQgY29sKQogU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQog
ewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAg
aWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkg
PD0gY29sKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fdGV4dDE2KG1fc3RhdGVt
ZW50LCBjb2wpKSwgc3FsaXRlM19jb2x1bW5fYnl0ZXMxNihtX3N0YXRlbWVudCwgY29sKSAvIHNp
emVvZihVQ2hhcikpOwpAQCAtMzQxLDkgKzI1NSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6
OmdldENvbHVtblRleHQoaW50IGNvbCkKIGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVt
bkRvdWJsZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0
YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAg
ICAgICAgICAgIHJldHVybiAwLjA7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBz
dGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1u
Q291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNf
Y29sdW1uX2RvdWJsZShtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM1Miw5ICsyNjUsOCBAQCBkb3Vi
bGUgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0g
U1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0
ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAg
IGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IHNxbGl0ZTNfY29sdW1uX2ludChtX3N0YXRlbWVudCwgY29sKTsKQEAgLTM2Myw5ICsyNzUsOCBA
QCBpbnQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5JbnQoaW50IGNvbCkKIGludDY0X3QgU1FM
aXRlU3RhdGVtZW50OjpnZXRDb2x1bW5JbnQ2NChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wg
Pj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVw
KCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3Rh
cnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAw
OwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
cmV0dXJuIHNxbGl0ZTNfY29sdW1uX2ludDY0KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzc1LDcg
KzI4Niw3IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmluZyhp
bnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50
ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoIWhhc1N0YXJ0ZWRT
dGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA4LDcgQEAg
dm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0
b3I8Y2hhcj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFt
X3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAo
IWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAg
IHJlc3VsdC5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDIzLDcgKzMzNCw3
IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNvbCwg
VmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAg
IGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykgewog
ICAgICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ1MSwx
OSArMzYyLDE2IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyhpbnQg
Y29sLCBWZWN0b3I8U3RyaW5nPiYgdikKIAogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0
YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElU
RV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmco
KSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykK
ICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9
IHRydWU7CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9y
IHJlYWRpbmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0
dXJuVGV4dFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5h
bGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc5LDE2IEBAIGJv
b2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+
JiB2KQogewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAg
ZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQo
KTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQo
Z2V0Q29sdW1uSW50KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9k
YXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBm
YWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZy
b20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
TE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzOiBFcnJv
ciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC00OTEsMTkgKzM5NiwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6
cmV0dXJuSW50NjRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ2NF90PiYgdikKIHsKICAgICB2
LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0g
ICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoaGFzU3RhcnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGls
ZSAoc3RlcCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludDY0
KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAg
ICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2Ug
cXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHM6IEVycm9yIHJlYWRpbmcg
cmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTUxMSwyNSArNDEzLDIyIEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3Vi
bGVSZXN1bHRzKGludCBjb2wsIFZlY3Rvcjxkb3VibGU+JiB2KQogewogICAgIHYuY2xlYXIoKTsK
IAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJl
cGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNT
dGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkg
PT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uRG91YmxlKGNvbCkpOwog
ICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNR
TERhdGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMi
LCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FM
aXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMi
KTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29s
IFNRTGl0ZVN0YXRlbWVudDo6aXNFeHBpcmVkKCkKK2Jvb2wgU1FMaXRlU3RhdGVtZW50OjpoYXNT
dGFydGVkU3RlcHBpbmcoKQogewotICAgIHJldHVybiAhbV9zdGF0ZW1lbnQ7CisgICAgcmV0dXJu
IHNxbGl0ZTNfc3RtdF9idXN5KG1fc3RhdGVtZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmlu
ZGV4IGE3YWNkZTVjZmM1YjJkMzU2MmIxZmI1MWZkNmE3MWJkOTVjY2U0MDguLjYzNTEyYmI2ZWI0
OWE2ZWUxOWU3MWYxYzY3YjFmZThmMjlmNjVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU1FMaXRlU3RhdGVtZW50IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTUUxpdGVTdGF0ZW1lbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2Um
LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsK
ICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcHJlcGFyZSgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJp
bmcmKTsKQEAgLTUwLDIzICs0OSwxOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgYmluZFBhcmFtZXRlckNvdW50KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBp
bnQgc3RlcCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIGludCBmaW5hbGl6ZSgpOwogICAgIFdFQkNP
UkVfRVhQT1JUIGludCByZXNldCgpOwogICAgIAotICAgIGludCBwcmVwYXJlQW5kU3RlcCgpIHsg
aWYgKGludCBlcnJvciA9IHByZXBhcmUoKSkgcmV0dXJuIGVycm9yOyByZXR1cm4gc3RlcCgpOyB9
Ci0gICAgCi0gICAgLy8gcHJlcGFyZXMsIHN0ZXBzLCBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4K
KyAgICAvLyBzdGVwcyBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KICAgICAvLyByZXR1cm5zIHRy
dWUgaWYgYWxsIDMgc3RlcHMgc3VjY2VlZCB3aXRoIHN0ZXAoKSByZXR1cm5pbmcgU1FMSVRFX0RP
TkUKICAgICAvLyByZXR1cm5zIGZhbHNlIG90aGVyd2lzZSAgCiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBleGVjdXRlQ29tbWFuZCgpOwogICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVwcywgYW5k
IGZpbmFsaXplcy4gIAorICAgIC8vIHN0ZXBzLCBhbmQgZmluYWxpemVzLgogICAgIC8vIHJldHVy
bnMgdHJ1ZSBpcyBzdGVwKCkgcmV0dXJucyBTUUxJVEVfUk9XCiAgICAgLy8gcmV0dXJucyBmYWxz
ZSBvdGhlcndpc2UKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KCk7CiAKLSAgICBi
b29sIGlzRXhwaXJlZCgpOwotCiAgICAgLy8gUmV0dXJucyAtMSBvbiBsYXN0LXN0ZXAgZmFpbGlu
Zy4gIE90aGVyd2lzZSwgcmV0dXJucyBudW1iZXIgb2Ygcm93cwogICAgIC8vIHJldHVybmVkIGlu
IHRoZSBsYXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwpAQCAtOTAsMTUgKzg0LDE1
IEBAIHB1YmxpYzoKIAogICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1f
ZGF0YWJhc2U7IH0KICAgICAKLSAgICBjb25zdCBTdHJpbmcmIHF1ZXJ5KCkgY29uc3QgeyByZXR1
cm4gbV9xdWVyeTsgfQotICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU1FMaXRlRGF0
YWJhc2U7CisgICAgU1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiwgc3FsaXRlM19zdG10
Kik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHByZXBhcmVkIHN0YXRlbWVudCBoYXMg
YmVlbiBzdGVwcGVkIGF0IGxlYXN0IG9uY2UgdXNpbmcgc3RlcCgpIGJ1dCBoYXMgbmVpdGhlciBy
dW4gdG8gY29tcGxldGlvbiAocmV0dXJuZWQgU1FMSVRFX0RPTkUgZnJvbSBzdGVwKCkpIG5vciBi
ZWVuIHJlc2V0KCkuCisgICAgYm9vbCBoYXNTdGFydGVkU3RlcHBpbmcoKTsKKwogICAgIFNRTGl0
ZURhdGFiYXNlJiBtX2RhdGFiYXNlOwotICAgIFN0cmluZyBtX3F1ZXJ5OwogICAgIHNxbGl0ZTNf
c3RtdCogbV9zdGF0ZW1lbnQ7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNQcmVw
YXJlZCB7IGZhbHNlIH07Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCmlu
ZGV4IGY5YzI0YjhlZDU3MTgyZWE1Nzg4N2EwMDMwN2VkOGRiOGEzZDBmZmQuLmExOTM5YWFkMWIw
Yzg2ZjAzNWRhMDA5MjVmZmVjZjE3OWQ5NjdkYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcApAQCAtMTMwLDI1ICsxMzAsMjUgQEAg
Ym9vbCBTZWFyY2hQb3B1cE1lbnVEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAo
IW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIlNlYXJjaCIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVp
Y2tfY2hlY2s7Iik7Ci0gICAgaWYgKGludGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBpbnRlZ3JpdHkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdN
QSBxdWlja19jaGVjazsiX3MpOworICAgIGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0
eS5zdGVwKCk7CisgICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBp
ZiAocmVzdWx0Q29kZSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdy
aXR5IHF1aWNrX2NoZWNrIHN0ZXAgcmV0dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVt
bkNvdW50KCk7CisgICAgaW50IGNvbHVtbnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAg
ICAgaWYgKGNvbHVtbnMgIT0gMSkgewogICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNv
bHVtbnMgcGVyZm9ybWluZyBpbnRlZ3JpdHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9
IGludGVncml0eS5nZXRDb2x1bW5UZXh0KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50
ZWdyaXR5LT5nZXRDb2x1bW5UZXh0KDApOwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikg
ewogICAgICAgICBMT0dfRVJST1IoIlNlYXJjaCBhdXRvc2F2ZSBkYXRhYmFzZSBpbnRlZ3JpdHkg
Y2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1bHRUZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTIyNCwx
NyArMjI0LDE5IEBAIGJvb2wgU2VhcmNoUG9wdXBNZW51REI6Om9wZW5EYXRhYmFzZSgpCiAKIHZv
aWQgU2VhcmNoUG9wdXBNZW51REI6OmNsb3NlRGF0YWJhc2UoKQogewotICAgIGlmIChtX2RhdGFi
YXNlLmlzT3BlbigpKSB7Ci0gICAgICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVu
dC0+ZmluYWxpemUoKTsKLSAgICAgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50LT5maW5h
bGl6ZSgpOwotICAgICAgICBtX3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+Zmlu
YWxpemUoKTsKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgIH0KKyAgICBpZiAoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9hZFNlYXJjaFRl
cm1zRm9yTmFtZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3Rh
dGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVu
dCA9IG51bGxwdHI7CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwogfQogCiB2b2lkIFNlYXJjaFBv
cHVwTWVudURCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKLSAgICBpbnQgdmVyc2lvbiA9IFNR
TGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVt
bkludCgwKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQg
PyBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2No
ZW1hVmVyc2lvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzEsMjMgKzI3MywyNSBAQCB2b2lk
IFNlYXJjaFBvcHVwTWVudURCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKIAog
aW50IFNlYXJjaFBvcHVwTWVudURCOjpleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3Fs
LCBib29sIGlnbm9yZUVycm9yKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7
Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAg
ICBjaGVja1NRTGl0ZVJldHVybkNvZGUoc3RhdGVtZW50LmVycm9yKCkpOworICAgICAgICByZXR1
cm4gc3RhdGVtZW50LmVycm9yKCk7CisgICAgfQogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2Rl
KHJldCk7CisgICAgaW50IHJldCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXQgIT0g
U1FMSVRFX09LICYmIHJldCAhPSBTUUxJVEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAh
aWdub3JlRXJyb3IpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJy
b3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LQogICAgIHJldHVybiByZXQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+
IFNlYXJjaFBvcHVwTWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHNxbCkKK3N0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVwTWVudURC
OjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudChBU0NJSUxpdGVyYWwgc3FsKQogewotICAgIGF1dG8g
c3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7
Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJlcGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQo
cmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICByZXR1cm4gc3RhdGVtZW50OworICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFT
U0VSVChzdGF0ZW1lbnQpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gc3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1
cE1lbnVEQi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURC
LmgKaW5kZXggYTI1NWNmNDI2ZTdhN2I5NGU3NmNjODQ2NWFkZjE4MjQ0YmNmZTYzNi4uZjkxM2Y0
M2VhNWQwYTRmNzQzMWE3OTJiMTY4MzgwZDc5ZDcyYTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKICAgICBpbnQgZXhlY3V0ZVNp
bXBsZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvciA9IGZhbHNlKTsKICAg
ICB2b2lkIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0dWFsKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiBjcmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJp
bmcmIHNxbCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gY3JlYXRlUHJl
cGFyZWRTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHNxbCk7CiAKICAgICBTdHJpbmcgbV9kYXRhYmFz
ZUZpbGVuYW1lOwogICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuY3BwCmluZGV4IDg5MmMzZjQ5ZTkwMTRhMzVmZTkyOTg0ZWY5YTI5MDRhN2JkZWQ1
NjAuLmIwYzcxNjFhODA2YTg2OGVjNGZmNDQ3NjUzYmI4NTNmYzA5Njg0NWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0
cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC0yODUsMTEgKzI4NSwxMSBAQCBTdHJpbmcgUmVnaXN0cmF0
aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKICAgICBTdHJpbmcgY3VycmVu
dFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0
aW5nIHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1f
ZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nUmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQotICAgICAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iOworICAgICAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAg
IGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iX3M7CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAg
ICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKQEAgLTMwMSw3ICszMDEsNyBA
QCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkK
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAgICAgICAgcmV0
dXJuICJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJl
Y29yZHMgdGFibGUuIjsKIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENv
bHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7
CkBAIC00MjcsMTggKzQyNywxOCBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hD
aGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX2RhdGFiYXNlKTsKICAgICB0cmFuc2FjdGlvbi5i
ZWdpbigpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJf
cyk7Ci0gICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNl
cnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBS
ZWNvcmRzIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykiX3MpOwor
ICAgIGlmICghaW5zZXJ0U3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNl
cnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc3RvcmUgcmVnaXN0
cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBhdXRvJiBzY3JpcHRTdG9yYWdlID0gdGhpcy0+c2NyaXB0U3Rv
cmFnZSgpOwogICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogcmVtb3ZlZFJlZ2lzdHJhdGlv
bnMpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIFJlY29yZHMgV0hFUkUga2V5ID0gPyIpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCByZWdpc3RyYXRpb24u
dG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLT5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8i
X3MpOworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgZGVsZXRl
U3RhdGVtZW50LT5iaW5kVGV4dCgxLCByZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRlbGV0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAi
RmFpbGVkIHRvIHJlbW92ZSByZWdpc3RyYXRpb24gZGF0YSBmcm9tIHJlY29yZHMgdGFibGUgKCVp
KSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNDU3LDE5ICs0
NTcsMTkgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBW
ZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5j
ZTo6RW5jb2RlciBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyOwogICAgICAgICBjZXJ0aWZpY2F0ZUlu
Zm9FbmNvZGVyIDw8IGRhdGEuY2VydGlmaWNhdGVJbmZvOwogCi0gICAgICAgIGlmIChzcWwuYmlu
ZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2Nv
cGVVUkwucHJvdG9jb2xIb3N0QW5kUG9ydCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHNxbC5iaW5kVGV4dCgzLCBkYXRhLnJlZ2lzdHJhdGlvbi5zY29wZVVSTC5wYXRoKCkudG9TdHJp
bmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoNCwgZGF0YS5y
ZWdpc3RyYXRpb24ua2V5LnRvcE9yaWdpbigpLmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kRG91YmxlKDUsIGRhdGEucmVnaXN0cmF0aW9u
Lmxhc3RVcGRhdGVUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhk
YXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3FsLmJpbmRUZXh0KDcsIGRhdGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0
YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEJsb2Io
OSwgY3NwRW5jb2Rlci5idWZmZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigxMSwgc2NyaXB0UmVz
b3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVy
U2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigxMiwgY2Vy
dGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBpZiAoaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkYXRh
LnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2Nv
cGVVUkwucHJvdG9jb2xIb3N0QW5kUG9ydCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoMywgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwu
cGF0aCgpLnRvU3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kVGV4dCg0LCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0
YWJhc2VJZGVudGlmaWVyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3Rh
dGVtZW50LT5iaW5kRG91YmxlKDUsIGRhdGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBp
bnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5y
ZWdpc3RyYXRpb24udXBkYXRlVmlhQ2FjaGUpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3
b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCks
IGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZFRleHQoMTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0
UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVm
ZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZEJsb2IoMTIsIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRl
SW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlv
biBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CkBAIC01MDIsMjYgKzUwMiwyNiBAQCBTdHJpbmcgUmVnaXN0cmF0aW9u
RGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
CiAgICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpp
bXBvcnRSZWNvcmRzOiIpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJT
RUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgYXV0byBzcWwgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgKiBGUk9NIFJlY29yZHM7Il9zKTsKKyAgICBpZiAoIXNxbCkKICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWdpc3Ry
YXRpb25zIGZyb20gcmVjb3JkcyB0YWJsZSAoIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksICIp
IC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwogCi0gICAgaW50IHJlc3VsdCA9IHNx
bC5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogCi0gICAgZm9yICg7IHJl
c3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1bHQgPSBzcWwuc3RlcCgpKSB7CisgICAgZm9yICg7IHJl
c3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1bHQgPSBzcWwtPnN0ZXAoKSkgewogICAgICAgICBSRUxF
QVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29y
ZHM6IEltcG9ydGluZyBhIHJlZ2lzdHJhdGlvbiBmcm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAg
ICBhdXRvIGtleSA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtl
eShzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsg
VVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0KDEpIH07Ci0gICAgICAgIGF1dG8gc2NvcGVQYXRoID0g
c3FsLmdldENvbHVtblRleHQoMik7CisgICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbktleTo6ZnJvbURhdGFiYXNlS2V5KHNxbC0+Z2V0Q29sdW1uVGV4dCgwKSk7Cisg
ICAgICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCgx
KSB9OworICAgICAgICBhdXRvIHNjb3BlUGF0aCA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgyKTsKICAg
ICAgICAgYXV0byBzY29wZVVSTCA9IFVSTCB7IG9yaWdpblVSTCwgc2NvcGVQYXRoIH07Ci0gICAg
ICAgIGF1dG8gdG9wT3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVu
dGlmaWVyKHNxbC5nZXRDb2x1bW5UZXh0KDMpKTsKLSAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hl
Y2tUaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHNxbC5nZXRDb2x1bW5Eb3VibGUoNCkp
OwotICAgICAgICBhdXRvIHVwZGF0ZVZpYUNhY2hlID0gc3RyaW5nVG9VcGRhdGVWaWFDYWNoZShz
cWwuZ2V0Q29sdW1uVGV4dCg1KSk7Ci0gICAgICAgIGF1dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJM
KCksIHNxbC5nZXRDb2x1bW5UZXh0KDYpIH07Ci0gICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0
cmluZ1RvV29ya2VyVHlwZShzcWwuZ2V0Q29sdW1uVGV4dCg3KSk7CisgICAgICAgIGF1dG8gdG9w
T3JpZ2luID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC0+
Z2V0Q29sdW1uVGV4dCgzKSk7CisgICAgICAgIGF1dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdh
bGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzcWwtPmdldENvbHVtbkRvdWJsZSg0KSk7CisgICAgICAg
IGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBzdHJpbmdUb1VwZGF0ZVZpYUNhY2hlKHNxbC0+Z2V0Q29s
dW1uVGV4dCg1KSk7CisgICAgICAgIGF1dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC0+
Z2V0Q29sdW1uVGV4dCg2KSB9OworICAgICAgICBhdXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dv
cmtlclR5cGUoc3FsLT5nZXRDb2x1bW5UZXh0KDcpKTsKIAogICAgICAgICBWZWN0b3I8dWludDhf
dD4gY29udGVudFNlY3VyaXR5UG9saWN5RGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JB
c1ZlY3Rvcig4LCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRD
b2x1bW5CbG9iQXNWZWN0b3IoOCwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YSk7CiAgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xp
Y3lEYXRhLmRhdGEoKSwgY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5zaXplKCkpOwogICAgICAg
ICBPcHRpb25hbDxDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRT
ZWN1cml0eVBvbGljeTsKICAgICAgICAgaWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6
ZSgpKSB7CkBAIC01MzIsMTAgKzUzMiwxMCBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmltcG9ydFJlY29yZHMoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgYXV0
byByZWZlcnJlclBvbGljeSA9IHNxbC5nZXRDb2x1bW5UZXh0KDkpOworICAgICAgICBhdXRvIHJl
ZmVycmVyUG9saWN5ID0gc3FsLT5nZXRDb2x1bW5UZXh0KDkpOwogCiAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBzY3JpcHRSZXNvdXJjZU1hcERhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9i
QXNWZWN0b3IoMTAsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29s
dW1uQmxvYkFzVmVjdG9yKDEwLCBzY3JpcHRSZXNvdXJjZU1hcERhdGEpOwogICAgICAgICBIYXNo
TWFwPFVSTCwgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0
UmVzb3VyY2VNYXA7CiAKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRS
ZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0UmVzb3VyY2VNYXBEYXRhLmRhdGEoKSwgc2NyaXB0UmVz
b3VyY2VNYXBEYXRhLnNpemUoKSk7CkBAIC01NTAsNyArNTUwLDcgQEAgU3RyaW5nIFJlZ2lzdHJh
dGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBjZXJ0aWZpY2F0ZUluZm9EYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxv
YkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0ZUluZm9EYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1
bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRpZmljYXRlSW5mb0RhdGEpOwogICAgICAgICBPcHRpb25h
bDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5mbzsKIAogICAgICAgICBXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyIGNlcnRpZmljYXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0
YS5kYXRhKCksIGNlcnRpZmljYXRlSW5mb0RhdGEuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IGUyYzc3MTVh
MzE1NmEwZmY2OTYyYWRlZjNkOWZmYWE2MGIxZTA3NmIuLmE4YWVkNzMxNjUxNTVlMGNmMWYyYmQz
NjJiMTFlODlmOWIyZGUyOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIGNvbnN0ZXhwciBh
dXRvIHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNFeGlzdHNRdWVyeSA9ICJTRUxFQ1Qg
RVhJU1RTIChTRUxFCiBjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNzRXhpc3RzUXVlcnkgPSAi
U0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURv
bWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/IEFORCB0b3BMZXZlbERvbWFpbklEID0gKFNFTEVDVCBk
b21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8p
KSJfczsKIAogLy8gVVBEQVRFIFF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBoYWRVc2VySW50
ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9ID8gIgorY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiX3MKICAgICAiV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwog
Y29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29u
c3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7CkBAIC0xMjcsOCArMTI3LDggQEAgY29uc3RleHByIGF1dG8gaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXIK
IGNvbnN0ZXhwciBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIGlz
R3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIGZp
bmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0
YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyI7Ci1jb25zdGV4cHIgYXV0byBnZXRNb3N0UmVjZW50bHlV
cGRhdGVkVGltZXN0YW1wUXVlcnkgPSAiU0VMRUNUIE1BWChsYXN0VXBkYXRlZCkgRlJPTSAoU0VM
RUNUIGxhc3RVcGRhdGVkIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBz
dWJGcmFtZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCitjb25zdGV4cHIg
YXV0byBnZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIg
YXV0byBnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wUXVlcnkgPSAiU0VMRUNUIE1BWChs
YXN0VXBkYXRlZCkgRlJPTSAoU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21h
aW5JRCA9ID8iX3MKICAgICAiVU5JT04gQUxMIFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyBhbmQgZnJvbURvbWFp
bklEID0gPyIKICAgICAiVU5JT04gQUxMIFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gYW5k
IHRvcEZyYW1lRG9tYWluSUQgPSA/IgogICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVk
IEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFp
bklEID0gPyBhbmQgdG9Eb21haW5JRCA9ID8pIl9zOwpAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgpCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgc2V0QnVzeVRpbWVvdXQobV9kYXRhYmFzZSwgIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1
MDAwIik7Ci0gICAgaWYgKHNldEJ1c3lUaW1lb3V0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwg
c2V0QnVzeVRpbWVvdXQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBhdXRvIHNldEJ1c3lU
aW1lb3V0ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYnVzeV90aW1lb3V0
ID0gNTAwMCJfcyk7CisgICAgaWYgKCFzZXRCdXN5VGltZW91dCB8fCBzZXRCdXN5VGltZW91dC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEJ1c3lUaW1l
b3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTQwMSwyMiArNDAxLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgpCiBPcHRpb25hbDxWZWN0
b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBtaXNzaW5nVGFi
bGVzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAx
IGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgYW5kIHRibF9uYW1lPT8iKTsK
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIDEgZnJvbSBzcWxp
dGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgdGJsX25hbWU9PyJfcyk7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxl
c0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVk
VGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5i
aW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQotICAg
ICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEgc2NoZW1hIGlzIG1pc3NpbmcgdGFibGU6
ICVzIiwgdGhpcywgdGFibGUuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICAgbWlzc2luZ1Rh
Ymxlcy5hcHBlbmQoU3RyaW5nKHRhYmxlKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50
LnJlc2V0KCk7CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiAgICAgaWYgKG1p
c3NpbmdUYWJsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAt
NDI2LDggKzQyNiw4IEBAIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFiCiAKIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgZW5hYmxlRm9yZWlnbktleXMobV9kYXRhYmFzZSwgIlBSQUdNQSBmb3Jl
aWduX2tleXMgPSBPTiIpOwotICAgIGlmIChlbmFibGVGb3JlaWduS2V5cy5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LIHx8IGVuYWJsZUZvcmVpZ25LZXlzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7CisgICAgaWYgKCFlbmFibGVGb3JlaWduS2V5
cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC00MzYsMzEg
KzQzNiwzMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFi
bGVGb3JlaWduS2V5cygpCiAKIFRhYmxlQW5kSW5kZXhQYWlyIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGdldFRhYmxlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ3RhYmxlJyIpKTsKLSAgICBp
ZiAoZ2V0VGFibGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8g
Z2V0VGFibGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmlu
ZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxl
TmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUnIikpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1l
bnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgdGFibGUs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChnZXRUYWJsZVN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgIGlmIChnZXRUYWJsZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmll
cyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi0gICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIFN0cmluZyBjcmVhdGVUYWJsZVF1ZXJ5ID0gZ2V0
VGFibGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
Z2V0SW5kZXhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUg
PSAnaW5kZXgnIikpOwotICAgIGlmIChnZXRJbmRleFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgYXV0byBnZXRJbmRleFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICdpbmRleCciKSk7CisgICAg
aWYgKCFnZXRJbmRleFN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3
b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRh
YmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBp
bmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBPcHRpb25hbDxTdHJp
bmc+IGluZGV4OwotICAgIGlmIChnZXRJbmRleFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpOworICAgIGlmIChnZXRJbmRleFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgYXV0byByYXdJbmRleCA9IFN0cmluZyhnZXRJbmRleFN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgICAgIGlmICghcmF3SW5kZXguaXNFbXB0eSgp
KQogICAgICAgICAgICAgaW5kZXggPSByYXdJbmRleDsKICAgICB9CkBAIC00ODAsMjAgKzQ4MCwy
MCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaAogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcygpCiB7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMgVW5hYmxlIHRvIHByZXBhcmUg
c3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNvdW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4
ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVz
IiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDApIDwgZXhwZWN0ZWRJbmRleENvdW50KQorICAgIGlmIChzdGF0ZW1l
bnQtPmdldENvbHVtbkludCgwKSA8IGV4cGVjdGVkSW5kZXhDb3VudCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTQsOCArNTU0LDggQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lm
TmVjZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5k
ZXhRdWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAgIGF1dG8gcXVlcnkgPSBtYWtlU3RyaW5nKCJB
TFRFUiBUQUJMRSAiLCB0YWJsZSwgIiBSRU5BTUUgVE8gXyIsIHRhYmxlKTsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IGFsdGVyVGFibGUobV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAo
YWx0ZXJUYWJsZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGFsdGVyVGFibGUuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gYWx0ZXJUYWJsZSA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmICghYWx0ZXJUYWJsZSB8fCBhbHRlclRh
YmxlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwg
ZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NTcwLDE2ICs1NzAsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYg
dGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAg
IGF1dG8gcXVlcnkgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVRdWVyeSh0YWJsZSk7Ci0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBtaWdyYXRlVGFibGVEYXRhKG1fZGF0YWJhc2UsIHF1ZXJ5
KTsKLSAgICAgICAgaWYgKG1pZ3JhdGVUYWJsZURhdGEucHJlcGFyZSgpICE9IFNRTElURV9PSyB8
fCBtaWdyYXRlVGFibGVEYXRhLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRv
IG1pZ3JhdGVUYWJsZURhdGEgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwor
ICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0YS0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3Jr
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFU
b05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBtaWdyYXRlIHNjaGVtYSwgZXJyb3IgbWVz
c2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgYXV0byBkcm9wUXVlcnkgPSBtYWtlU3RyaW5nKCJEUk9QIFRBQkxFIF8iLCB0YWJs
ZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBkcm9wVGFibGVRdWVyeShtX2RhdGFiYXNlLCBk
cm9wUXVlcnkpOwotICAgICAgICBpZiAoZHJvcFRhYmxlUXVlcnkucHJlcGFyZSgpICE9IFNRTElU
RV9PSyB8fCBkcm9wVGFibGVRdWVyeS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
YXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChkcm9wUXVl
cnkpOworICAgICAgICBpZiAoIWRyb3BUYWJsZVF1ZXJ5IHx8IGRyb3BUYWJsZVF1ZXJ5LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0
YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywg
ZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NTk3LDE3ICs1OTcsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKIAogVmVjdG9yPFN0cmluZz4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbHVtbnNGb3JUYWJsZShjb25z
dCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIiki
KSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFr
ZVN0cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwgdGFibGVOYW1lLCAiKSIpKTsKIAotICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVu
dCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gY29sdW1uczsKLSAgICB3aGls
ZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gbmFtZSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29s
dW1uVGV4dCgxKTsKICAgICAgICAgY29sdW1ucy5hcHBlbmQobmFtZSk7CiAgICAgfQogCkBAIC02
MjIsMTggKzYyMiwxOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogICAgICAgICBpZiAoZXhp
c3RpbmdDb2x1bW5zLmNvbnRhaW5zKGNvbHVtbikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFr
ZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIEFERCBDT0xVTU4gIiwgY29sdW1u
KSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
ICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3Ry
aW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBt
aXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAoc3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBh
ZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKICAg
ICB9CiB9CiAKQEAgLTY0OCwxMyArNjQ4LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zSWZOZWNlc3NhcnkoKQogCiB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0
cmluZyYmIHRhYmxlTmFtZSwgRXhpc3RpbmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1l
LCBFeHBlY3RlZENvbHVtbk5hbWUmJiBleHBlY3RlZENvbHVtbk5hbWUpCiB7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8g
IiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQobWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIFJFTkFNRSBDT0xV
TU4gIiwgZXhpc3RpbmdDb2x1bW5OYW1lLCAiIFRPICIsIGV4cGVjdGVkQ29sdW1uTmFtZSkpOwor
ICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29s
dW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4g
aW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgZXJyb3IgZXhlY3V0
aW5nIHN0YXRlbWVudCB0byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzEyLDE1
ICs3MTIsMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3Bl
bkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsK
ICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIE9ic2Vy
dmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9u
YW1lPSdPYnNlcnZlZERvbWFpbnMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dGJsX25hbWU9J09ic2VydmVkRG9tYWlucyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JzZXJ2ZWREb21haW5zIHRhYmxlLiIpOwogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBPYnNlcnZlZERvbWFpbnMgdGFibGUgYXQgYWxs
LCBvciB0aGVyZSBpcyBhbiBlcnJvciBleGVjdXRpbmcgdGhlIGZldGNoLCBkZWxldGUgdGhlIGZp
bGUuCi0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRo
ZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwogICAgICAgICAgICAgY2xvc2UoKTsKICAgICAg
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CkBA
IC03MjgsNyArNzI4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAg
LTc0OCwxNSArNzQ4LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCiAgICAgbWlncmF0ZURhdGFUb05l
d1RhYmxlc0lmTmVjZXNzYXJ5KCk7CiB9CiAKLVNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0CitTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0ZXJhbCBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcp
IGNvbnN0CiB7CiAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAg
ICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJv
ciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAo
IXN0YXRlbWVudE9yRXJyb3IpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjolcyBmYWlsZWQg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5H
LCB0aGlzLCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OwogICAgICAgICB9CisgICAgICAg
IHN0YXRlbWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
KyAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4g
U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KQEAg
LTEwMDQsOSArMTAwNiw4IEBAIE9wdGlvbmFsPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNj
b3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9t
U3RyaW5nUXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlu
SURGcm9tU3RyaW5nIGZhaWxlZC4gU3RhdGVtZW50OiAlcy4gRXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBzY29wZWRTdGF0ZW1lbnQtPnF1ZXJ5KCkudXRmOCgpLmRh
dGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNR
TElURV9PSykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURG
cm9tU3RyaW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTAzOSwyMyAr
MTA0MCwyMyBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVu
c3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZQogCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0
IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9t
YWluTGlzdCwgdW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2Vy
dFJlbGF0aW9uc2hpcFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKHN0YXRlbWVudCwg
ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBp
bnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
bWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3Qp
LCAiICk7IikpOwogICAgIAotICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1l
bnQuYmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFpbnNlcnRS
ZWxhdGlvbnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVt
ZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KICAgICAKICAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKLSAg
ICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC5iaW5kRG91YmxlKDIsIFdhbGxU
aW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewor
ICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIFdh
bGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykg
ewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMjI5LDE3ICsxMjMwLDE3IEBA
IFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0CiAKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIGNv
bnN0IGF1dG8gcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIgPSB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsID8gIiUi
IDogIjEiOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzb3J0ZWRTdGF0aXN0aWNzKG1fZGF0YWJhc2Us
IG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwot
ICAgIGlmIChzb3J0ZWRTdGF0aXN0aWNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc29ydGVkU3RhdGlzdGljcy5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFt
ZXRlcikKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5kVGV4dCgyLCAiJSIpICE9IFNR
TElURV9PSykgeworICAgIGF1dG8gc29ydGVkU3RhdGlzdGljcyA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0
aW5nKCkpKTsKKyAgICBpZiAoIXNvcnRlZFN0YXRpc3RpY3MKKyAgICAgICAgfHwgc29ydGVkU3Rh
dGlzdGljcy0+YmluZFRleHQoMSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCisgICAg
ICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdl
OiAlIiBQVUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFM
aXN0OwogICAgIH0KLSAgICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy5n
ZXRDb2x1bW5JbnQoMSkpKSB7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9
IHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChzb3J0ZWRTdGF0
aXN0aWNzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoaGFzQmVlblRoaXJk
UGFydHkoc29ydGVkU3RhdGlzdGljcy0+Z2V0Q29sdW1uSW50KDEpKSkgeworICAgICAgICAgICAg
YXV0byB0aGlyZFBhcnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQo
MCk7CiAgICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW4gPSBSZWdpc3RyYWJsZURvbWFp
bjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGdldERvbWFpblN0
cmluZ0Zyb21Eb21haW5JRCh0aGlyZFBhcnR5RG9tYWluSUQpKTsKICAgICAgICAgICAgIHRoaXJk
UGFydHlEYXRhTGlzdC5hcHBlbmQoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGly
ZFBhcnR5RGF0YSB7IHRoaXJkUGFydHlEb21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lm
aWNGaXJzdFBhcnR5RG9tYWlucyh0aGlyZFBhcnR5RG9tYWluSUQsIHRoaXJkUGFydHlEb21haW4p
IH0pOwogICAgICAgICB9CkBAIC0xMjY1LDkgKzEyNjYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9t
YWlucwogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jk
c1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJp
bmcoZG9tYWlucyksICIpIikpOwotICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsg
MSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMp
LCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBA
IC0xMjg1LDMxICsxMjg1LDMwIEBAIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zCiAgICAgKytudW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZp
ZWREb21haW5zOwotICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJh
c2UsICJTRUxFQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBm
cm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9t
YWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBP
YnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFN1YnJlc291
cmNlcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRTdWJyZXNvdXJjZXMu
YmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmlu
ZFN1YnJlc291cmNlcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWRE
b21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21h
aW5JRCBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlz
UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKCFmaW5kU3VicmVzb3VyY2VzIHx8IGZpbmRTdWJy
ZXNvdXJjZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZh
bGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9S
T1cpIHsKLSAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1
bW5JbnQoMCk7CisgICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmdldENv
bHVtbkludCgwKTsKICAgICAgICAgYXV0byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRp
cmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJl
c3VsdC5zZWNvbmQpCiAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChu
ZXdEb21haW5JRCk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMo
bV9kYXRhYmFzZSwgIlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFp
bklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZl
ZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRUb3BGcmFtZXMuYmluZEludCgxLCBw
cmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5O
RVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5J
RCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICgh
ZmluZFRvcEZyYW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1h
cnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRU
b1RoaXNEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5k
VG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5J
RCA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChmaW5kVG9wRnJh
bWVzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBm
aW5kVG9wRnJhbWVzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0
ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAg
ICAgICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlm
aWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluSUQpOwpAQCAtMTM0MSwyMSArMTM0MCwyMCBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJ
Zkhhc1JlZGlyZWN0ZWRUb1ByZXZhbAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgRElTVElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFp
bklEIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlu
cyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwot
ICAgIGlmIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVf
T0spIHsKLSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2Vy
dChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0
byBzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNv
dXJjZURvbWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2Vy
dmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9
IDEiX3MpOworICAgIGlmIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAg
IHdoaWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNl
UmVkaXJlY3RTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBE
SVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmICh0b3BGcmFtZVJl
ZGlyZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUg
KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
ICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVt
ZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMu
aXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCkg
eworICAgICAgICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BG
cmFtZVJlZGlyZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBtYXJrUHJldmFsZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+
OjppdGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVU
b1JlZGlyZWN0LmVuZCgpKSksICIpIikpOwotICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWls
ZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2
YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkp
KSwgIikiKSk7CisgICAgaWYgKCFtYXJrUHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxl
bnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxl
bnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTEzNjYsMTIgKzEzNjQsMTIgQEAgSGFzaE1hcDx1bnNpZ25l
ZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXMKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8
dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IHJlc3VsdHM7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChub3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsK
LSAgICAgICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbklu
dCgwKSk7Ci0gICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
Zyhub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0g
ICAgICAgICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENv
bHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpMb3cKKyAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0
cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVy
eVByZXZhbGVudCA9IDAiX3MpOworICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3Rh
dGVtZW50KSB7CisgICAgICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQt
PmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
IHZhbHVlKHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJs
ZURvbWFpblN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1
bW5UZXh0KDEpKQorICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdwogICAgICAgICAgICAgICAgICwgMCwgMCwgMCwg
MCB9KTsKICAgICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICB9CkBA
IC0xMzg2LDQzICsxMzg0LDQzIEBAIEhhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAKICAgICBhdXRv
IGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFi
YXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJh
bWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZ
IHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGls
ZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3Vi
cmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Cisg
ICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAg
ICAgd2hpbGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZp
bmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQtPnZhbHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkg
RlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWlu
SUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9t
YWluSUQiKSk7Ci0gICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkp
OworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJj
ZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVz
dCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5J
RCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3ViZnJhbWVEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7Ci0gICAg
aWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkg
PT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0
b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUg
c3ViZnJhbWVEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkg
c3ViZnJhbWVEb21haW5JRCIpKTsKKyAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBp
ZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1
ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbklu
dCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQs
IENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBz
b3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291
cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0
YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOwor
ICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwg
Q09VTlQodG9Eb21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNv
dXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3Vy
Y2VEb21haW5JRCIpKTsKKyAgICBpZiAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50KSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJl
c3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ5LDEwICsxNTQ3LDEw
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsICJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNj
ZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSAr
IDEgV0hFUkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKGluY3JlbWVudFN0b3JhZ2VBY2Nlc3Mu
cHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNz
LmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
YXV0byBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFn
ZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWluY3JlbWVu
dFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+YmluZElu
dCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5j
cmVtZW50U3RvcmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CkBAIC0xNjQ2LDkgKzE2NDQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFp
bnMgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMp
OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRm
YXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmlu
Zyhkb21haW5zKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2
ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJ
TiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE3NzYsMTAgKzE3NzMsMTAgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRl
bWVudCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnQgV0hFUkUgc291cmNlRG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNh
bWVTaXRlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNv
dXJjZURvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2Ft
ZVNpdGUKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50
KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3Zl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTgzMiwx
MCArMTgyOSwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZQogICAgIH0KICAgICBzZXRVc2Vy
SW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBy
ZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92
ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVT
dG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJF
IGRvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisgICAgICAg
IHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQp
ICE9IFNRTElURV9PSworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xOTE4LDkgKzE5MTUsOCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQo
U3RkU2V0PHVuc2lnbmVkPgogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hF
UkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVu
c2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIp
KTsKLSAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlz
UHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0
b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21h
aW5zLmVuZCgpKSksICIpIikpOworICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8
IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFp
bGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjMwMSwxNiArMjI5NywxNSBAQCBDb29raWVBY2Nlc3MgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJj
ZQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50
ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FM
SVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkg
IT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29r
aWVBY2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX1JPVzsKLSAgICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkg
JiYgISFzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOwotICAgIGJvb2wgaGFkVXNlckludGVyYWN0
aW9uID0gIWhhc05vRW50cnkgJiYgc3RhdGVtZW50LmdldENvbHVtbkludCgxKSA/IHRydWUgOiBm
YWxzZTsKKyAgICBib29sIGhhc05vRW50cnkgPSBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XOworICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApOworICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50
cnkgJiYgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CiAKICAgICBp
ZiAoIWFyZUFsbFRoaXJkUGFydHlDb29raWVzQmxvY2tlZFVuZGVyKHRvcEZyYW1lRG9tYWluKSAm
JiAhaXNQcmV2YWxlbnQpCiAgICAgICAgIHJldHVybiBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29r
aWVQb2xpY3k7CkBAIC0yMzMzLDE0ICsyMzI4LDE0IEBAIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93biBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRT
CiAKICAgICBhdXRvIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsK
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VO
VCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5J
RCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsIHJlcXVl
c3RpbmdEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50
KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nl
c3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9t
YWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgcmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAg
ICByZXR1cm4gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKIAotICAgIHJldHVybiAh
IXN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246
OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CisgICAgcmV0dXJuICEhc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Olll
cyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CiB9CiAKIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNU
b0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNvbnN0CkBAIC0yMzQ4LDEyICsyMzQzLDEyIEBA
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFp
biBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDAiX3MpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJl
dmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMCJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdl
dENvbHVtblRleHQoMCkpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNjMs
MTIgKzIzNTgsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXQKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0
cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFO
RCBoYWRVc2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAg
IGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGls
ZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVu
ZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWlu
U3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAg
LTIzNzgsMTIgKzIzNzMsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW4KICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVz
dWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
cmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVy
YWN0aW9uID0gMSJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlcklu
dGVyYWN0aW9uID0gMSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAg
IHJldHVybiByZXN1bHRzOwogfQpAQCAtMjM5MywxMyArMjM4OCwxMiBAQCBIYXNoTWFwPFRvcEZy
YW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1h
cDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIHN1YkZyYW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdp
c3RyYWJsZURvbWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRv
cExldmVsRG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRv
bWFpbklEKSBhcyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50
b3BMZXZlbERvbWFpbklEOyJfcyk7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNU
IG8ucmVnaXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5J
RCBhcyB0b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9J
TiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklE
ID0gcy5kb21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5J
RCA9IHoudG9wTGV2ZWxEb21haW5JRDsiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAg
ICByZXR1cm4gcmVzdWx0czsKIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQo
MSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9t
YWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENy
ZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMjQ0NSwxOSArMjQzOSwxOCBAQCBW
ZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAogICAgIFZlY3RvcjxEb21haW5EYXRhPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21h
aW4sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdy
YW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50
T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9NIE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVD
VCBzb3VyY2VEb21haW5JRCwgQ09VTlQoKikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZy
b20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dCBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9t
YWluSUQiX3MpOwotCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
ZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNv
dW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5j
ZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHog
T04gei5zb3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5n
KHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQotICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJv
bVJhd1NlY29uZHMoc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSgyKSkKLSAgICAgICAgICAgICwg
c3RhdGVtZW50LmdldENvbHVtbkludCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoNSkgPyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNikpCisgICAgd2hpbGUg
KHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBl
bmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCisg
ICAgICAgICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0
cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAg
ICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUo
MikpCisgICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZh
bHNlCisgICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZh
bHNlCisgICAgICAgICAgICAsIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZh
bHNlCisgICAgICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENv
bHVtbkludCg2KSkKICAgICAgICAgfSk7CiAgICAgfQogICAgIApAQCAtMjQ3MywxMSArMjQ2Niwx
MSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5k
ZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJgogCiAgICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1
aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRv
bWFpbklEc1RvQ2xlYXIuYmVnaW4oKSwgZG9tYWluSURzVG9DbGVhci5lbmQoKSkpOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAg
V0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8g
Y2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0g
MCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmICghY2xl
YXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlm
IChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRo
ZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTI2MTcsMjMgKzI2MTAsMjEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAg
IHNpemVfdCBjb3VudExlZnRUb1BydW5lID0gY291bnQgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRy
aWVzRG93blRvOwogICAgIEFTU0VSVChjb3VudExlZnRUb1BydW5lKTsKIAotICAgIFNRTGl0ZVN0
YXRlbWVudCByZWNvcmRzVG9QcnVuZShtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQs
IGxhc3RTZWVuIExJTUlUID8iKTsKLSAgICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCByZWNvcmRzVG9QcnVuZS5iaW5kSW50KDEsIGNvdW50TGVm
dFRvUHJ1bmUpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcmVjb3Jkc1RvUHJ1bmUgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBPUkRFUiBCWSBoYWRVc2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBM
SU1JVCA/Il9zKTsKKyAgICBpZiAoIXJlY29yZHNUb1BydW5lIHx8IHJlY29yZHNUb1BydW5lLT5i
aW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gZW50cmllc1RvUHJ1bmU7Ci0gICAgd2hpbGUgKHJlY29yZHNU
b1BydW5lLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBl
bmQocmVjb3Jkc1RvUHJ1bmUuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB3aGlsZSAocmVjb3Jkc1Rv
UHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBl
bmQocmVjb3Jkc1RvUHJ1bmUtPmdldENvbHVtbkludCgwKSk7CiAKICAgICBhdXRvIGxpc3RUb1By
dW5lID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVy
YXRvcj4oZW50cmllc1RvUHJ1bmUuYmVnaW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBwcnVuZUNvbW1hbmQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygi
REVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9Q
cnVuZSwgIikiKSk7Ci0gICAgaWYgKHBydW5lQ29tbWFuZC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IHBydW5lQ29tbWFuZC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBh
dXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5n
KCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RU
b1BydW5lLCAiKSIpKTsKKyAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNywzNSArMjcw
OCwzMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cgogCiBib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppc0NvcnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIHN1YmZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YkZyYW1lVW5kZXJUb3BGcmFt
ZUNvdW50KG1fZGF0YWJhc2UsIGNvdW50U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOwotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNl
LCBjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CisgICAgYXV0byBzdWJGcmFtZVVuZGVyVG9wRnJh
bWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YmZyYW1lVW5kZXJU
b3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
UXVlcnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVy
eSk7CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BG
cmFtZUNvdW50IHx8ICFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJ
bnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRv
cEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lQ291bnQuYmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbiku
dmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZUNvdW50LmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQo
MSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMiwgZG9tYWluSUQodG9w
RnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgIGlmIChzdWJGcmFtZVVu
ZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFs
dWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50
LT5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwg
ZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BG
cmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8tPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZh
bHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLT5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3Rh
dGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAot
ICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRF
X1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQorICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9
IFNRTElURV9ST1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8tPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgcmV0dXJuIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0g
MSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAm
JiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldENvbHVtbkludCgwKSA9PSAxKTsKKyAg
ICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0g
MSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEg
JiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Z2V0Q29sdW1uSW50KDApID09IDEpOwog
fQogCiBzdGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNv
bnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKQEAgLTI4MTIsMjcgKzI4MDEsMjYgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGlj
TGlzdChTdHJpbmdCdWlsZGVyJgogICAgIGlmIChxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7
CisgICAgYXV0byBkYXRhID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKICAg
ICAKLSAgICBpZiAoZGF0YS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRhdGEu
YmluZEludCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bUhvc3QoZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFkYXRhIHx8
IGRhdGEtPmJpbmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENy
ZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVt
ZW50IGZhaWxlZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlm
IChkYXRhLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChkYXRhLT5zdGVwKCkgIT0gU1FM
SVRFX1JPVykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiICAgICIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKHRhYmxlTmFtZSk7CiAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI6XG4iKTsKICAgICAKLSAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0
cmluZ0Zyb21Eb21haW5JRChkYXRhLmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byByZXN1bHQg
PSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAg
ICBhcHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKICAgICAKLSAgICB3aGlsZSAoZGF0
YS5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJp
bmdGcm9tRG9tYWluSUQoZGF0YS5nZXRDb2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChkYXRhLT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdG
cm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgYXBwZW5kTmV4dEVu
dHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAgICAgfQogfQpAQCAtMjk0NiwyOCArMjkzNCwyNiBAQCBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0lu
RGF0YWJhc2UoaW50IGRvbWFpbklEKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
ICogRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1v
bnRoRGF5IERFU0MgTElNSVQgMTsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGlu
Z0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1J
VCAxIE9GRlNFVCA/OyJfcyk7CisgICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVy
YXRpbmdEYXRlczsiX3MpOworICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0
aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJ
TUlUIDE7Il9zKTsKKyAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMg
T1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZG
U0VUID87Il9zKTsKIAotICAgIGlmIChjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0
YXRlbWVudCB8fCBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0
aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRv
IHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBtX29wZXJhdGluZ0Rh
dGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsK
IAotICAgIGlmIChnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fbW9zdFJlY2VudE9w
ZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMikpOworICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRp
bmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwog
Ci0gICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgIGlmICghZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQ
YXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIGR1cmluZyB0
aGUgY2FsbCB0byBwcmVwYXJlKCkgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcgIi4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI5NzYsMjYgKzI5NjIsMjYg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0
aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKICAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpCiAgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRp
bmdEYXRlID0gV1RGOjpudWxsb3B0OwogICAgIGVsc2UgewotICAgICAgICBpZiAoZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hv
cnQgLSAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dT
aG9ydCAtIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0
byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdE
YXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5n
RGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgICAgICBtX3Nob3J0V2lu
ZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgyKSk7CiAgICAgfQogCiAgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9w
ZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpCiAgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGlu
Z0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQucmVzZXQoKTsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVX
aW5kb3dTdGF0ZW1lbnQuYmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVw
KCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9
IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1u
SW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSks
IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAg
fQogfQogCkBAIC0zMDExLDIxICsyOTk3LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAK
ICAgICBpbnQgcm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0Rh
dGVzV2luZG93TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250
aCwgbW9udGhEYXkgTElNSVQgPzsiX3MpOwotICAgICAgICBpZiAoZGVsZXRlTGVhc3RSZWNlbnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEsIHJv
d3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
YXV0byBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHll
YXIsIG1vbnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlTGVh
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVMZWFz
dFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2Fy
eSBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0Rh
dGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYg
KGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgdG9kYXkueWVh
cigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC5iaW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNl
cnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3Bl
cmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsK
KyAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIs
IHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2Rh
eUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
ZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KQEAgLTMwNjksMTYgKzMwNTUsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QKICAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKICAgICAgICAgYXV0byBkYXRlVG9J
bnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNv
bmRzKGRheXNBZ29JblNlY29uZHMpKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRP
IE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJf
cyk7Ci0gICAgICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQu
YmluZEludCgxLCBkYXRlVG9JbnNlcnQueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgyLCBkYXRlVG9JbnNlcnQu
bW9udGgoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3Bl
cmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsK
KyAgICAgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8
fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55
ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC0+YmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIGRh
dGVUb0luc2VydC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNG
b3JUZXN0aW5nIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQotICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAg
IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdXBk
YXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CkBAIC0zMjAxLDM2ICszMTg3LDM2IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlj
a01lYXN1cmVtZW50KFByaXZhdGVDCiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNl
cnRpbmcgYW4gYXR0cmlidXRlZCBwcml2YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8g
dGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVwb3J0IHRpbWVzLgogICAgICAgICBBU1NFUlQo
c291cmNlRWFybGllc3RUaW1lVG9TZW5kICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1l
VG9TZW5kICE9IC0xKTsKIAotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVy
eSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRl
c3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDUsIHByaW9y
aXR5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDYs
IGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNywgc291
cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kVGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxl
VG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8g
c291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxMCwgc291
cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVS
TCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50
LmJpbmREb3VibGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0
QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgICAgICBpZiAoIXN0
YXRlbWVudAorICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRh
LnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQo
MiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5p
ZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNCwgYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPmJpbmRJbnQoNSwgcHJpb3JpdHkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3Rh
dGVtZW50LT5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kRG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVU
b2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmlu
ZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOSwg
c291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVC
YXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZFRleHQoMTAsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlu
a2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJs
aWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBpbnNlcnRBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRV
bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQo
MSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50
LmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlE
KCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBh
dHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDUsIHNvdXJjZVVubGlu
a2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0
eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDYs
IHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJl
QmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxl
VG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9u
RGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQo
MywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50
LT5iaW5kVGV4dCg1LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9r
ZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IHN0YXRlbWVudC0+YmluZFRleHQoNiwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmth
YmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlT
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CkBAIC0zNDM1LDE0ICszNDIxLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVT
CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRUb1N0cmluZygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHByaXZhdGVD
bGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyhtX2RhdGFiYXNlLCAiU0VMRUNUIChTRUxFQ1QgQ09V
TlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwg
KFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkg
YXMgY250MiJfcyk7Ci0gICAgaWYgKHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cy5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnREYXRhRXhpc3RzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVD
VCBDT1VOVCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBj
bnQxLCAoU0VMRUNUIENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50KSBhcyBjbnQyIl9zKTsKKyAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4
aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRv
U3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFz
dXJlbWVudERhdGFFeGlzdHMuZ2V0Q29sdW1uSW50KDEpKQorICAgIGlmICghcHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnREYXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01l
YXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0Q29sdW1uSW50KDEpKQogICAgICAgICByZXR1cm4gIlxu
Tm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgZGF0YS5cbiJfczsKIAogICAgIGF1
dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1f
YWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1l
bnQsIGFsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25zUXVl
cnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKQEAgLTM1NzMsMTEgKzM1
NTksMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJT
ZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUMKICAgICBpZiAoZGVzdGluYXRpb25FYXJs
aWVzdFRpbWVUb1NlbmQgfHwgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hF
UkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/
Il9zKTsKLSAgICBpZiAoY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMSwgKnNv
dXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRl
ZFN0YXRlbWVudC5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAg
ICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9t
YWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9u
IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9CkBAIC0zNTg3LDE4ICszNTczLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRzCiB7CiAgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFf
aDsKIAotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBTUUxp
dGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyIpOwotICAgIGF1dG8g
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBT
RVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiKTsKKyAgICBhdXRvIGVh
cmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJs
aWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9ID8iX3MpOworICAgIGF1dG8gZWFybGllc3RUaW1lVG9T
ZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
VVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1l
VG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQuYmluZEludCgxLCBleHBpcmVkVGlt
ZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50Cisg
ICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEs
IGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGlu
ZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
Ci0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RU
aW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rl
c3RpbmF0aW9uU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaAppbmRleCA3NDExYmQ1ZDBiYWZmN2U0ZmRhNThiMmNjYjU2
NmNlNDhmMmYwYjMxLi5hMWUzNTE1MzQ0NmM1N2ZkMzg4NTlhNmRjZjg2MjRiMDE2MDMwOTdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
aApAQCAtMTc1LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtaXNzaW5nUmVmZXJlbmNl
VG9PYnNlcnZlZERvbWFpbnMoKTsKICAgICB2b2lkIG1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5l
Y2Vzc2FyeSgpOwogICAgIHZvaWQgZGVzdHJveVN0YXRlbWVudHMoKTsKLSAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBz
Y29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4m
LCBBU0NJSUxpdGVyYWwsIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNTdG9y
YWdlQWNjZXNzKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBj
b25zdDsKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBh
cnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZp
Y0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggNTIzMjMzZDE4YjA0MDAz
ZWYzMGQzMzYzMmNmZTYyZjAyZjI3YTM0OC4uM2E2NWZjY2VmMTg5ZjA3Yzg5MTY1YTljNjIyN2E1
Y2FkMTQwNzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBAIC0zOCw3ICsz
OCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1z
dGF0aWMgY29uc3QgY2hhciBnZXRJdGVtc1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNUIGtleSwgdmFs
dWUgRlJPTSBJdGVtVGFibGUiOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1
ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07CiAKIFJl
ZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShTdHJp
bmcmJiBkYXRhYmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKQEAgLTk5LDEwICs5
OSwxMCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVk
ZWQoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIGF1dG8gcXVlcnkg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJs
ZSBMSU1JVCAxIl9zKTsKIAogICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwg
aXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5p
c0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1
bW5EZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVh
dGUgYSBuZXcgdGFibGUgd2l0aCB0aGUgcmlnaHQgdHlwZSwgY29weSBhbGwgdGhlIGRhdGEgb3Zl
ciB0byBpdCBhbmQgdGhlbiByZXBsYWNlIHRoZSBuZXcgdGFibGUgd2l0aCB0aGUgb2xkIHRhYmxl
LgpAQCAtMzAyLDE5ICszMDIsMTggQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJh
c2VJc0VtcHR5KCkgY29uc3QKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAi
U0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgIGlmICghcXVl
cnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3Mg
aW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX1JPVykgeworICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJv
d3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gIXF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICByZXR1
cm4gIXF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6Om9wZW5JZkV4aXN0aW5nKCkKQEAgLTMzMCwxNCArMzI5LDE1IEBAIHZvaWQgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKICAgICAgICAgc2NvcGVkU3RhdGVtZW50KG1f
Z2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOwogfQogCi1TUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50
KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmlu
ZyYgcXVlcnkpIGNvbnN0CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1l
bnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3QKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOwot
ICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJv
ciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAo
IXN0YXRlbWVudE9yRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgeyB9OworICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3Bl
bigpKTsKICAgICB9CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsg
c3RhdGVtZW50LmdldCgpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGI3
ZWYwMzRkMmE4NmMyNGJkMDRkZjc5NDMxN2NhYmFmYzAzZTc0NmMuLjM5OGRhN2RjZmIyOGRkMzBk
MmU2MGE1MTRkZGU5YjE5ZDU1MzYyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBA
IC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVk
ZWQoKTsKICAgICBib29sIGRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCi0gICAgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29u
c3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3Rh
dGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlM
aXRlcmFsIHF1ZXJ5KSBjb25zdDsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKICAgICBt
dXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcAppbmRleCAzMzk2MDJh
NDlmMTE0M2Q5ZmZlNDYzMDVhYjFhZDk5YTY4NzRjYjYzLi42NTA4ODZlZTU2NjE2MjBiODgzMGE2
MzUwNmI5N2YzNDQwZDdmNzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL0ljb25EYXRhYmFzZS5jcHAKQEAgLTY2LDcgKzY2LDggQEAgSWNvbkRhdGFiYXNlOjpJ
Y29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNlV3JpdGUgYWxsb3dE
YXRhYmFzZVcKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8g
ZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0gU1FMaXRlU3RhdGVtZW50KG1fZGIsICJTRUxFQ1QgdmFs
dWUgRlJPTSBJY29uRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdWZXJzaW9uJzsiKS5nZXRDb2x1
bW5JbnQoMCk7CisgICAgICAgIGF1dG8gdmVyc2lvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAn
VmVyc2lvbic7Il9zKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSB2ZXJz
aW9uU3RhdGVtZW50ID8gdmVyc2lvblN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAg
ICAgICAgaWYgKGRhdGFiYXNlVmVyc2lvbk51bWJlciA+IGN1cnJlbnREYXRhYmFzZVZlcnNpb24p
IHsKICAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJEYXRhYmFzZSB2ZXJzaW9uIG51bWJl
ciAlZCBpcyBncmVhdGVyIHRoYW4gb3VyIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgJWQgLSBjbG9z
aW5nIHRoZSBkYXRhYmFzZSB0byBwcmV2ZW50IG92ZXJ3cml0aW5nIG5ld2VyIHZlcnNpb25zIiwK
ICAgICAgICAgICAgICAgICBkYXRhYmFzZVZlcnNpb25OdW1iZXIsIGN1cnJlbnREYXRhYmFzZVZl
cnNpb24pOwpAQCAtODQsNyArODUsNyBAQCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25z
dCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gUmVkdWNlIHNxbGl0ZSBSQU0gY2FjaGUgc2l6ZSBmcm9tIGRlZmF1
bHQgMjAwMCBwYWdlcyAofjEuNWtCIHBlciBwYWdlKS4gM01CIG9mIGNhY2hlIGZvciBpY29uIGRh
dGFiYXNlIGlzIG92ZXJraWxsLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgIlBSQUdN
QSBjYWNoZV9zaXplID0gMjAwOyIpLmV4ZWN1dGVDb21tYW5kKCk7CisgICAgICAgIG1fZGIuZXhl
Y3V0ZUNvbW1hbmQoIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyJfcyk7CiAKICAgICAgICAgaWYg
KGFsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6OlllcykgewogICAgICAg
ICAgICAgbV9wcnVuZVRpbWVyID0gbWFrZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxJY29uRGF0YWJh
c2U+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZJY29uRGF0YWJhc2U6OnBydW5lVGltZXJG
aXJlZCk7CkBAIC0xNzUsMTcgKzE3NiwxNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cG9wdWxhdGVQ
YWdlVVJMVG9JY29uVVJMTWFwKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGltcG9y
dFF1ZXJ5ID0gbWFrZVN0cmluZygiU0VMRUNUIFBhZ2VVUkwudXJsLCBJY29uSW5mby51cmwsIElj
b25JbmZvLnN0YW1wIEZST00gUGFnZVVSTCBJTk5FUiBKT0lOIEljb25JbmZvIE9OIFBhZ2VVUkwu
aWNvbklEPUljb25JbmZvLmljb25JRCBXSEVSRSBJY29uSW5mby5zdGFtcCA+ICIsIGZsb29yKChX
YWxsVGltZTo6bm93KCkgLSBub3RVc2VkSWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnNlY29uZHMoKSksICc7Jyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIs
IGltcG9ydFF1ZXJ5KTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gcXVlcnkgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoaW1wb3J0UXVlcnkpOworICAg
IGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBpY29u
IHVybCBpbXBvcnQgcXVlcnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
cmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGF1dG8gcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsK
ICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9wYWdlVVJMVG9JY29uVVJMTWFwTG9jayk7CiAg
ICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIG1fcGFnZVVSTFRvSWNv
blVSTE1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uVGV4dCgx
KSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgbV9wYWdlVVJMVG9J
Y29uVVJMTWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnktPmdldENvbHVtblRl
eHQoMSkpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAgIHN0
YXJ0UHJ1bmVUaW1lcigpOwpAQCAtMjE0LDEyICsyMTUsMTIgQEAgdm9pZCBJY29uRGF0YWJhc2U6
OnBydW5lVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYg
KCFtX3BydW5lSWNvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5m
byBXSEVSRSBzdGFtcCA8PSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1l
bnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBwcnVuZUljb25zU3Rh
dGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkluZm8g
V0hFUkUgc3RhbXAgPD0gKD8pOyJfcyk7CisgICAgICAgIGlmICghcHJ1bmVJY29uc1N0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHBydW5lSWNv
bnMgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBudWxscHRy
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcHJ1bmVJY29uc1N0
YXRlbWVudCA9IHBydW5lSWNvbnNTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
ICAgICB9CiAKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZmxv
b3IoKFdhbGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpKSkgIT0gU1FMSVRFX09LKSB7CkBAIC0yMzAsOCArMjMxLDgg
QEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYik7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBp
ZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAg
ICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgaWNvbklE
IE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiKTsKLSAgICAgICAgbV9kYi5l
eGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChT
RUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyIpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21t
YW5kKCJERUxFVEUgRlJPTSBJY29uRGF0YSBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNv
bklEIEZST00gSWNvbkluZm8pOyJfcyk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRF
TEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9N
IEljb25JbmZvKTsiX3MpOwogICAgIH0KICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnJlc2V0
KCk7CiAKQEAgLTI4NSwxMiArMjg2LDEyIEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFz
ZTo6aWNvbklERm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGJvb2wmIGV4CiAgICAg
QVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25JREZvckljb25VUkxTdGF0
ZW1lbnQpIHsKLSAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1
ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5m
by5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiKTsKLSAgICAg
ICAgaWYgKG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIGljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBtX2RiLnByZXBh
cmVIZWFwU3RhdGVtZW50KCJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBG
Uk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KTsiX3MpOworICAgICAgICBpZiAo
IWljb25JREZvckljb25VUkxTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJl
cGFyaW5nIHN0YXRlbWVudCBpY29uSURGb3JJY29uVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAg
bV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3Rh
dGVtZW50ID0gaWNvbklERm9ySWNvblVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0
cigpOwogICAgIH0KIAogICAgIGlmIChtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDEsIGljb25VUkwpICE9IFNRTElURV9PSykgewpAQCAtMzE1LDEyICszMTYsMTIgQEAgYm9v
bCBJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwoaW50NjRfdCBpY29uSUQsIGNvbnN0
IFN0cmluZyYgcGFnZVVSTCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxs
b3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3NldEljb25JREZvclBhZ2VVUkxT
dGF0ZW1lbnQpIHsKLSAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbWFr
ZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmws
IGljb25JRCkgVkFMVUVTICgoPyksID8pOyIpOwotICAgICAgICBpZiAobV9zZXRJY29uSURGb3JQ
YWdlVVJMU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8g
c2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIFBhZ2VVUkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Il9zKTsK
KyAgICAgICAgaWYgKCFzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgc2V0SWNvbklERm9yUGFnZVVSTCBmYWls
ZWQiKTsKLSAgICAgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG51bGxw
dHI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbV9zZXRJ
Y29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC52
YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3NldEljb25JREZv
clBhZ2VVUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHBhZ2VVUkwpICE9IFNRTElURV9PSwpAQCAt
MzQyLDEyICszNDMsMTIgQEAgVmVjdG9yPGNoYXI+IEljb25EYXRhYmFzZTo6aWNvbkRhdGEoaW50
NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2lj
b25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5p
cXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNv
bkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9pY29u
RGF0YVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGlj
b25EYXRhU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIEljb25E
YXRhLmRhdGEgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsK
KyAgICAgICAgaWYgKCFpY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJQcmVwYXJpbmcgc3RhdGVtZW50IGljb25EYXRhIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9p
Y29uRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAg
ICAgICB9CisgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBpY29uRGF0YVN0YXRlbWVudC52
YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2ljb25EYXRhU3Rh
dGVtZW50LT5iaW5kSW50NjQoMSwgaWNvbklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTM3MCwyMCAr
MzcxLDIwIEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6YWRkSWNvbihjb25zdCBT
dHJpbmcmIGljb25VUkwsIGNvbnN0IFZlY3RvcjxjaGFyCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRh
YmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9hZGRJ
Y29uU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXAp
IFZBTFVFUyAoPywgMCk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBhZGRJY29uU3RhdGVtZW50ID0gbV9k
Yi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXAp
IFZBTFVFUyAoPywgMCk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uU3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgYWRkSWNvbiBmYWlsZWQi
KTsKLSAgICAgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvblN0YXRl
bWVudCA9IGFkZEljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9
CiAgICAgaWYgKCFtX2FkZEljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvbkRh
dGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJ
TlRPIEljb25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVFUyAoPywgPyk7Iik7Ci0gICAgICAgIGlm
IChtX2FkZEljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIGF1dG8gYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50
KCJJTlNFUlQgSU5UTyBJY29uRGF0YSAoaWNvbklELCBkYXRhKSBWQUxVRVMgKD8sID8pOyJfcyk7
CisgICAgICAgIGlmICghYWRkSWNvbkRhdGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19F
UlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBhZGRJY29uRGF0YSBmYWlsZWQiKTsKLSAgICAgICAg
ICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgfQorICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50
ID0gYWRkSWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9
CiAKICAgICBpZiAobV9hZGRJY29uU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBT
UUxJVEVfT0spIHsKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjp1cGRh
dGVJY29uVGltZXN0YW1wKGludDY0X3QgaWNvbklELCBpbnQ2NF90IHRpbWVzdGFtcCkKICAgICBB
U1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwog
CiAgICAgaWYgKCFtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV91
cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGIsICJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyIp
OwotICAgICAgICBpZiAobV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVu
dCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAg
PSA/IFdIRVJFIGljb25JRCA9ID87Il9zKTsKKyAgICAgICAgaWYgKCF1cGRhdGVJY29uVGltZXN0
YW1wU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1l
bnQgdXBkYXRlSWNvblRpbWVzdGFtcCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fdXBkYXRlSWNv
blRpbWVzdGFtcFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gdXBkYXRlSWNv
blRpbWVzdGFtcFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAog
ICAgIGlmIChtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB0aW1l
c3RhbXApICE9IFNRTElURV9PSyB8fCBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJp
bmRJbnQ2NCgyLCBpY29uSUQpICE9IFNRTElURV9PSykgewpAQCAtNDM3LDI4ICs0MzgsMjggQEAg
dm9pZCBJY29uRGF0YWJhc2U6OmRlbGV0ZUljb24oaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJU
KG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAg
IGlmICghbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxl
dGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYiwgIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Iik7
Ci0gICAgICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRl
bWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hF
UkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVQYWdlVVJM
c0Zvckljb25TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0
YXRlbWVudCBkZWxldGVQYWdlVVJMc0Zvckljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2Rl
bGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQg
PSBkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIo
KTsKICAgICB9CiAgICAgaWYgKCFtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAg
IG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYiwgIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsi
KTsKLSAgICAgICAgaWYgKG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIu
cHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRh
Lmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZUljb25EYXRhU3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNv
biBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxs
cHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fZGVsZXRlSWNv
bkRhdGFTdGF0ZW1lbnQgPSBkZWxldGVJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNvblN0YXRlbWVudCkgewotICAg
ICAgICBtX2RlbGV0ZUljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4o
bV9kYiwgIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLmljb25JRCA9ICg/KTsi
KTsKLSAgICAgICAgaWYgKG1fZGVsZXRlSWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZUljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVI
ZWFwU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby5pY29uSUQg
PSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVJY29uU3RhdGVtZW50KSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsK
LSAgICAgICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gZGVs
ZXRlSWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAg
IGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25J
RCkgIT0gU1FMSVRFX09LCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuY3BwCmluZGV4IGNlNWMyOWJhYTU4MDVjYTQyZjQ4ZWYwNTBiODMyZDBjZDVjY2Ux
MWMuLmNhZTA4MmYxM2RjZDM2OGM0ODE5NWJlMzExZjIwYTViNjY0NDhmYWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0yNzgsOSAr
Mjc4LDkgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAg
ICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFs
dWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAgICAgICAgIC8vIHRoaXMgcXVlcnkgaXNu
J3QgZXZlciBleGVjdXRlZC4KLSAgICAgICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Js
b2IoMCkpCisgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxv
YigwKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyNiw4ICszMjYsOCBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXks
IHZhbHVlIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFxdWVyeSkgewog
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUg
Zm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTMzNSwxMCArMzM1LDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3Jt
SW1wb3J0KCkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7CiAKLSAgICBp
bnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgp
OwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpdGVtTWFwLnNl
dChxdWVyeS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkp
OwotICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGl0ZW1NYXAuc2V0KHF1
ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsK
KyAgICAgICAgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ET05FKSB7CkBAIC00MTIsMjcgKzQxMiwyNyBAQCB2b2lkIFN0b3JhZ2VBcmVh
U3luYzo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBpdGVtcwogCiAgICAgLy8gSWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFy
IGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBpbi4KICAgICBpZiAo
Y2xlYXJJdGVtcykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGNsZWFyID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAoIWNsZWFyKSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVu
dCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgp
OworICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXItPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xl
YXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAo
PywgPykiKTsKLSAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIGluc2VydCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSXRl
bVRhYmxlIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0KSB7CiAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0
ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVt
VGFibGUgV0hFUkUga2V5PT8iKTsKLSAgICBpZiAocmVtb3ZlLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBhdXRvIHJlbW92ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVM
RVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zKTsKKyAgICBpZiAoIXJlbW92ZSkgewog
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBj
YW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDQzLDIxICs0NDMsMjEgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMo
Ym9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwg
ZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNl
cnQ7CisgICAgICAgIGF1dG8mIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDog
aW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgICAgICBx
dWVyeS0+YmluZFRleHQoMSwgaXQtPmtleSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBh
cmd1bWVudCBpcyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFz
IHRoZSB2YWx1ZS4KICAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOworICAgICAgICAgICAgcXVlcnktPmJpbmRC
bG9iKDIsIGl0LT52YWx1ZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsK
KyAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0
ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBxdWVyeS5yZXNldCgpOworICAg
ICAgICBxdWVyeS0+cmVzZXQoKTsKICAgICB9CiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9
CkBAIC00OTksMzEgKzQ5OSwzMyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlE
YXRhYmFzZSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGlu
IEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGF1dG8gY291bnQgPSBbJl0geworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAg
ICAgICBpZiAoIXF1ZXJ5KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3Vu
dCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSBxdWVy
eS0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGlu
IEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICB9CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1
bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBj
b3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsK
KyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5nZXRDb2x1bW5JbnQoMCk7CisgICAgfSgpOworICAgIGlm
IChjb3VudCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGludCBjb3VudCA9IHF1ZXJ5
LmdldENvbHVtbkludCgwKTsKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIHF1ZXJ5LmZpbmFs
aXplKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgaWYgKFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRD
b3B5KCldIHsKLSAgICAgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0
ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1l
ID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZp
ZXIpOwotICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmls
ZW5hbWUpKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRh
YmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICB9CisgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJ
ZGVudGlmaWVyID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAg
ICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZp
ZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VG
aWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6
ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0Zjgo
KS5kYXRhKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9T
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAKaW5kZXggODM2MDQ3MWJlM2U0MTdhYTUwNzY1ZDlhNjljZDY0YTFl
NzZiYmJiZC4uYTllYWIzYzhiZTg1NzNjNDZiYjgyZjI3NzRmNTI2MzBlYTA3N2E0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBAIC0xODks
OCArMTg5LDggQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZp
ZXJzKCkKICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKICAgICAgICAgICAgIFNR
TGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsK
IAotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsK
KyAgICAgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQpAQCAtMTk5LDggKzE5OSw4IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6
OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0TXV0
ZXgpOwotICAgICAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgICAgICB3
aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAg
ICAgICAgICAgICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
Lmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMzE2LDE2ICszMTYsMTYgQEAgdm9p
ZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyLCBjb25zdAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIAotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MiwgZGF0YWJhc2VGaWxlKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50
aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKICAgICAK
LSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKKyAgICBpZiAoc3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIu
YXNjaWkoKS5kYXRhKCkpOwogCiAgICAgewpAQCAtNDA0LDIzICs0MDQsMjMgQEAgdm9pZCBTdG9y
YWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4sIHBhdGgg
RlJPTSBPcmlnaW5zIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpCisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdp
bihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDEpKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Ns
aWVudE11dGV4KTsKICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
NDQxLDEyICs0NDEsMTIgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdp
bnMoKQogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAgICAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5z
Iik7Ci0gICAgICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiREVMRVRFIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIGFsbCBvcmlnaW5zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBpZiAo
IWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVs
ZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdp
bj0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iX3MpOworICAgIGlmICghZGVsZXRl
U3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRp
b24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luSWRlbnRpZmllcik7Ci0gICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQo
KSkgeworICAgIGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7
CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9y
aWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtNjE0LDE3ICs2MTQsMTcgQEAgU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhG
b3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogCiAgICAgU1FMaXRlVHJh
bnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZS
T00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHBhdGhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49
PyJfcyk7CisgICAgaWYgKCFwYXRoU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2lu
SWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICB9Ci0gICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAg
ICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgcGF0aFN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0
ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQo
MCk7CisgICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiB9CiAgICAg
CiBsb25nIGxvbmcgU3RvcmFnZVRyYWNrZXI6OmRpc2tVc2FnZUZvck9yaWdpbihTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGY2N2U4ZGRiYTI5MjI3MDQ4MzNjNDY0NTgxNTM2MDgxOTk0OGJhZWQuLmQ2Y2Rk
YzFmY2U4YTBiZmE1YjBkZmQyY2U4NzQ1NzYyYzhmNzBhOTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNS0x
MyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAv
IE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJh
c2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMg
Y2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3Qu
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGRUb0RhdGFiYXNlc1RhYmxlKToKKwogMjAy
MS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFt
ZSBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUoKSB0byBGaWxlU3lzdGVtOjpwYXRoRmlsZU5h
bWUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L0RhdGFiYXNlVHJhY2tlclRlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQppbmRleCA2NjgyYmY0NTg2NjYxMTU1M2Yx
MGExN2U3MmE3MjllY2FhNjk1OGM0Li4yYzdmNDQ0ZThiYzhhZWI5MDZjMGJiOTBhNjliOTU1M2M3
MTgxMzE2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29j
b2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQpAQCAtNjYsMTIgKzY2LDEyIEBA
IHN0YXRpYyB2b2lkIGFkZFRvRGF0YWJhc2VzVGFibGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBh
dGgsIGNvbnN0IFNlY3VyaXR5T3JpZ2luCiAgICAgU1FMaXRlRGF0YWJhc2UgZGF0YWJhc2U7CiAg
ICAgZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGFk
ZERhdGFiYXNlU3RhdGVtZW50KGRhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmln
aW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7Ci0gICAgYWRkRGF0YWJhc2VTdGF0
ZW1lbnQucHJlcGFyZSgpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgbmV3RGF0YWJhc2VOYW1lKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5k
VGV4dCgzLCBuZXdEYXRhYmFzZVBhdGgpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCk7CisgICAgaWYgKGF1dG8gYWRkRGF0YWJhc2VTdGF0ZW1lbnQgPSBkYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwg
cGF0aCkgVkFMVUVTICg/LCA/LCA/KTsiX3MpKSB7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICBh
ZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMiwgbmV3RGF0YWJhc2VOYW1lKTsKKyAgICAg
ICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIG5ld0RhdGFiYXNlUGF0aCk7Cisg
ICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworICAgIH0KIAog
ICAgIGRhdGFiYXNlLmNsb3NlKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428630</attachid>
            <date>2021-05-14 09:46:16 -0700</date>
            <delta_ts>2021-05-14 10:08:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210514094615.patch</filename>
            <type>text/plain</type>
            <size>291827</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk2YjAzYzE0MTA2NTIzNjM5ZjMxMDFh
NTkzNTE3NzU3ZjYzZGY0NmMuLmVmNWM3ZWUzZDJmYjA4NmNjZjE4Yzc0M2M3YmExODBlOWUzNjZh
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMWZhYWJhODc5N2Jj
MGU2NThkZjU3YmJhNGY5OTg4NmE2ZjgwYTNjLi4yZDVjYmQwOTA1NzFjYWJiYTlhZmJhYmNkMGFi
MTJlN2Q3NTIzZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0
aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1p
emUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBU
aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2Ug
bmV2ZXIgaGF2ZSBhCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVu
ICJwcmVwYXJlZCIuIE9ubHkgdGhlIFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBj
b25zdHJ1Y3QgU1FMaXRlU3RhdGVtZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBh
c3MKKyAgICAgICAgICBhIFNRTGl0ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGlu
ZyB0aGUgU1FMaXRlU3RhdGVtZW50IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFO
RCBwcmVwYXJlIGEgU1FMaXRlU3RhdGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisg
ICAgICAgICAgU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEg
aGVhcCBvbmUuIFRoZXNlIGZ1bmN0aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+
IHR5cGUgc28gdGhleSB3aWxsIGVpdGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAg
U1FMaXRlU3RhdGVtZW50IG9yIGFuIHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAg
ICAgIC0gVGhlIHByZXBhcmUqU3RhdGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcg
YWxsb2NhdGlvbnMgaW4gbW9zdAorICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMg
dGFraW5nIGluIHRoZSBxdWVyeSBhcyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBm
aW5hbGl6ZSgpIGZ1bmN0aW9uIG9uIFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQg
b2JqZWN0cworICAgICAgICAgIGFyZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFNRTGl0ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlv
bnMuIFRoZSBTUUxpdGVTdGF0ZW1lbnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVt
ZW50CisgICAgICAgICAgc28gdXNlcnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0
ZW1lbnQgaWYgdGhleSBuZWVkIHRoZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBh
dCBhIGNlcnRhaW4gcG9pbnQgKGUuZy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAg
ICAgIC0gRHJvcCB0aGUgcHJlcGFyZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1l
bnQgbWVtYmVyIGZ1bmN0aW9ucyBub3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBh
cmUgYWx3YXlzIHByZXBhcmVkLgorICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5
IGFzIGEgU3RyaW5nIGRhdGEgbWVtYmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAg
ICAgICBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUg
cHJlcGFyZSBzdGVwIGFmdGVyIHRoZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtl
cyB0aGUgU1FMaXRlU3RhdGVtZW50IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6Y3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVu
c3VyZVZhbGlkQmxvYlRhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJ
bmRleFJlY29yZHNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5k
UG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9y
SURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZy
b21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRl
U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpyZXNldEFuZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVj
b3JkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFRleHRWYWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
cmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OmRhdGFiYXNlTmFtZXNOb0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnF1b3RhTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6c2V0UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFi
YXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNl
RmlsZUlmRW1wdHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhh
c2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVH
cm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmlu
Z1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVP
cmlnaW5SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlTmV3ZXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmxvYWRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjptYW5pZmVzdFVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphckRCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
REI6OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERv
bWFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZTo6dXNlV0FMSm91cm5hbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6
Om1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhp
bXVtU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZTo6Y2xlYXJBbGxUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2U6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
OjpwcmVwYXJlSGVhcFN0YXRlbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJl
dHVybnNBdExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dDo6YmluZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6YmluZE51bGwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpiaW5kUGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6
OmlzQ29sdW1uTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29s
dW1uRGVjbGFyZWRBc0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29s
dW1uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91Ymxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoUG9wdXBNZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6
CisKIDIwMjEtMDUtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW5hbWUgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoKSB0byBGaWxlU3lzdGVtOjpmaWxlU2l6
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IDZlZGRiMDM5NGRlOWRjOTc0NzQzYTliOGM2MmNhODQ5MDlkYTkzMGMu
LmRkZWIzMjEyOWY5MTk4M2JjZDQyYzEzZGFmZTQ3YWM4MmExOTJmMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzAgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24g
YW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNR
TGl0ZVN0YXRlbWVudCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVND
SUlMaXRlcmFscy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZElu
ZGV4UXVlcmllcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVD
b2x1bW5JblRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1l
bnQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0
eURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJz
aXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFp
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVB
Y2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9C
bG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2ll
c0ZvciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0
aGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3Vu
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJ
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNj
b3BlZFN0YXRlbWVudCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9J
Y29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRh
YmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9J
Y29uVVJMTWFwKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgor
ICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAg
ICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6
SWNvbkRhdGFiYXNlOjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1
cGRhdGVJY29uVGltZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxl
dGVJY29uKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgpIHRvIEZpbGVTeXN0ZW06
OmZpbGVTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggNTJlMmUyYjQ5ZjIzZGFiOTAwMThk
MGE4ZjdhMmNlNmU2NmM1NTJiYS4uMmFjMjc2NjliZGIxYmUwNmVjZmMxMDQ1NjNlZGYxZmYwNWRj
OTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMS0wNS0xMyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9w
dGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ug
bm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMgY2hh
bmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAgICog
U3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
U3luYzo6c3luYyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1w
dHlEYXRhYmFzZSk6CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhGb3JPcmlnaW4pOgor
CiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVuYW1lIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5c3RlbTo6ZmlsZVNpemUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmggYi9Tb3VyY2UvV1RGL3d0
Zi9VbmlxdWVSZWYuaAppbmRleCA0MTVhMjliNjYwY2ZlOWU4MzYwMGRhNjE5YzFlYzNlNzFjMGYz
Nzk3Li5jNGVlM2RjMTI4NzRmMTk4ZTFiZjQ1M2YyMzdhOTljZjQ3Njc2ZGU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVS
ZWYuaApAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9yZWYpOwog
ICAgIH0KIAorICAgIGV4cGxpY2l0IFVuaXF1ZVJlZihUJiBvdGhlcikKKyAgICAgICAgOiBtX3Jl
Zigmb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWYpOworICAgIH0KKwogICAgIFQm
IGdldCgpIHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsgfQogICAgIGNvbnN0IFQmIGdl
dCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsgfQogCkBAIC04MCwxMiAr
ODYsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8
VT4gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5pcXVlX3B0cjxVPik7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5kIGNsYXNzIFVuaXF1ZVJlZjsKIAotICAgIFVu
aXF1ZVJlZihUJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZigmb3RoZXIpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9yZWYpOwotICAgIH0KLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiBtX3JlZjsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOThkYjk4Y2M3M2Mx
YzA5ODc3NWYzMGI3YTRlYTM3OWRkZGVmZTRlMS4uOWFhYTBmZDUzZGVjZDFhZDZmODU1MDA2ZGM3
M2E1NzU0Zjc3MjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTI2
MywxMyArMjYzLDEzIEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlm
TmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJh
c2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0n
UmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29y
ZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJl
Y29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50
IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJl
IGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAg
ICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMjg2LDcgKzI4Niw3
IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNR
TGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsK
ICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTMzOCwx
MyArMzM4LDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JU
YWJsZXMoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQgdGFibGUuCi0gICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3Fs
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYlJlY29yZHMnIik7Ci0gICAg
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iUmVjb3JkcyciX3MpOwor
ICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYlJlY29yZHMg
dGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAg
ICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0
ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5v
IEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4KICAgICAgICAgaWYgKHNxbGl0
ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgxKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMSk7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNU
YWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFs
dGVybmF0ZSgpKSB7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKIAogICAgIHsKICAgICAgICAgLy8gRmV0Y2gg
dGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRhYmxlLgotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciX3MpOworICAgICAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0
ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iRmlsZXMg
dGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0
ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzkxLDcgKzM5MSw3IEBAIGJvb2wgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JG
aWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpKSB7CkBAIC00MjgsMTMgKzQyOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpCiAgICAgU3RyaW5nIGN1cnJl
bnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlz
dGluZyBpbmRleCByZWNvcmQgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVjb3JkcyB0YWJsZSBh
dCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CkBAIC00NTEsNyArNDUxLDcgQEAgYm9vbCBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0Vt
cHR5KCkpOwpAQCAtNTAzLDEzICs1MDMsMTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1h
OwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5k
ZXggcmVjb3JkIGluZGV4LgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgbmFtZT0nSW5kZXhS
ZWNvcmRzSW5kZXgnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVj
b3Jkc0luZGV4JyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzSW5kZXggaW5kZXggYXQgYWxsLCBj
cmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJ
VEVfRE9ORSkgewpAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsK
QEAgLTU2MSwxMyArNTYxLDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVW
YWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKIAogICAgIFN0cmluZyBjdXJyZW50U2NoZW1h
OwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwg
IlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc1Jl
Y29yZEluZGV4JyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29y
ZHNSZWNvcmRJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXguIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjFJbmRleFJlY29yZHNSZWNv
cmRJbmRleFNjaGVtYSkpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1h
LmlzRW1wdHkoKSk7CkBAIC02MjQsMjAgKzYyNCwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0
YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlh
bAogICAgIH0KIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVE
QiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24n
LCA/KTsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIElE
QkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiX3MpOworICAgICAg
ICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0
YVZlcnNpb24pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkYXRh
YmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAl
cyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQogICAgIH0KICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJh
c2VOYW1lJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJJ
TlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VOYW1lJywgPyk7Il9z
KTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgbV9p
ZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBpbnNlcnQgZGF0YWJhc2UgbmFtZSBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkp
IC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC02NDYsMTAgKzY0NiwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAg
IHsKICAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRlZmluZWQgdG8gYmUgYSB1aW42
NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3VwcG9ydCBuYXRpdmUgYmluZGlu
ZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgICAgLy8gVGhlcmVmb3JlIHdlJ2xsIHN0b3Jl
IHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNl
VmVyc2lvbicsID8pOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5U
TyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9uJywgPyk7Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgU3RyaW5nOjpu
dW1iZXIoMCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkZWZh
dWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
ICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjc0
LDE5ICs2NzQsMTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRlZD4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwKICAgICBTdHJpbmcgY3VycmVu
dFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIE9iamVjdFN0
b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxp
dGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYmpl
Y3RTdG9yZUluZm8nIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYmpl
Y3RTdG9yZUluZm8nIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGhlIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRD
b2x1bW5UZXh0KDApOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5
KCkpOwpAQCAtNzM5LDIyICs3MzksMjIgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1p
Z3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJT
RUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVu
dHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNV
bmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRleEluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5nIHN0YXRlbWVu
dCB0byBmZXRjaCByZWNvcmRzIGZyb20gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIGRhdGFi
YXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAg
ICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGlk
ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVj
dFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7CisgICAgICAgICAgICB1aW50
NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgICAgICBTdHJp
bmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpOwogICAgICAg
ICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVjdFN0b3JlSUQsIGlk
IH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOwot
ICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQpOwotICAg
ICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3RhdGVtZW50LmdldENvbHVtbkludCg1KTsKKyAg
ICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZm
ZXIpOworICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg0
KTsKKyAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDUpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNyZWF0
ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleEluZm8gVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFzcWwKQEAgLTc2OSw3ICs3Njks
NyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxlRm9y
SURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtODA0LDIyICs4MDQsMjIg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZv
cklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3QKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaW5kZXhJRCwgb2JqZWN0U3Rv
cmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBGUk9NIEluZGV4UmVjb3Jkczsi
X3MpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
aW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBG
Uk9NIEluZGV4UmVjb3JkczsiX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIGZldGNoIHJlY29y
ZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
KyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
RCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGlk
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9i
amVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDEpOwogICAgICAgICAgICAg
dWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVjdFN0b3JlSUQsIGlkIH0pOwog
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUJ1ZmZlcjsKLSAgICAgICAgICAgIHN0YXRl
bWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5QnVmZmVyKTsKKyAgICAgICAgICAgIHN0
YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleUJ1ZmZlcik7CiAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0
Q29sdW1uQmxvYkFzVmVjdG9yKDMsIHZhbHVlQnVmZmVyKTsKLSAgICAgICAgICAgIHVpbnQ2NF90
IHJlY29yZElEID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDQpOworICAgICAgICAgICAgc3Rh
dGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywgdmFsdWVCdWZmZXIpOworICAgICAgICAg
ICAgdWludDY0X3QgcmVjb3JkSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDQpOwogCiAg
ICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OlB1dFRlbXBJbmRleFJl
Y29yZCwgIklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBWQUxVRVMgKD8sID8sIENBU1Qo
PyBBUyBURVhUKSwgQ0FTVCg/IEFTIFRFWFQpLCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFz
cWwKQEAgLTgzMyw3ICs4MzMsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0
ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpA
QCAtOTg5LDEwICs5ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKIAogICAgIFN0cmlu
ZyBkYXRhYmFzZU5hbWU7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdE
YXRhYmFzZU5hbWUnOyIpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAg
ICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUg
RlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Il9zKTsKKyAg
ICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGRhdGFiYXNlTmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBkYXRhYmFzZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIGlmIChkYXRh
YmFzZU5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIGluZm8gZGF0YWJhc2UgKCclcycpIGRvZXMg
bm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lICgnJXMnKSIsIGRhdGFiYXNlTmFtZS51dGY4KCku
ZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMDAsMTAgKzEwMDAsMTAgQEAgc3RkOjp1bmlx
dWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhp
c3RpbmdEYXRhYmFzZUkKICAgICB9CiAgICAgdWludDY0X3QgZGF0YWJhc2VWZXJzaW9uOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3Mp
OwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgYXV0byBzcWwgPSBt
X3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFz
ZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAgICAgICAgaWYgKHNx
bC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgICAgIFN0
cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBhdXRv
IHBhcnNlZFZlcnNpb24gPSBwYXJzZUludGVnZXI8dWludDY0X3Q+KHN0cmluZ1ZlcnNpb24pOwog
ICAgICAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRGF0
YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBjbGVhbmx5IGNvbnZlcnQgdG8g
YW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0cmluZ1ZlcnNpb24udXRmOCgp
LmRhdGEoKSk7CkBAIC0xMDIxLDE3ICsxMDIxLDE3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRh
YmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJ
CiAgICAgYm9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gKHJlc3VsdC52YWx1ZSgpID09IElzU2No
ZW1hVXBncmFkZWQ6Olllcyk7CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJPTSBPYmpl
Y3RTdG9yZUluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVjdFN0b3JlSW5mbzsiX3MpOwor
ICAgICAgICBpZiAoIXNxbCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAg
IGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVw
KCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAg
dWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOwor
ICAgICAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgx
KTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAgICAg
ICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhCdWZmZXIpOworICAgICAgICAg
ICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0aEJ1ZmZlcik7CiAKICAgICAg
ICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3JlS2V5UGF0aDsKICAgICAgICAg
ICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIG9iamVj
dFN0b3JlS2V5UGF0aCkpIHsKQEAgLTEwMzksMTEgKzEwMzksMTEgQEAgc3RkOjp1bmlxdWVfcHRy
PElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdE
YXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3FsLmdldENvbHVtbkludCgzKTsK
KyAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC0+Z2V0Q29sdW1uSW50KDMpOwog
CiAgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoeyBvYmpl
Y3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUob2JqZWN0U3RvcmVLZXlQYXRoKSwg
YXV0b0luY3JlbWVudCB9KTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTA1NiwyMCArMTA1NiwyMCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RF
eGlzdGluZ0RhdGFiYXNlSQogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRf
dD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxJ
REJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQ
YXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3Nx
bGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQs
IGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7CisgICAg
ICAgIGlmICghc3FsKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4SW5mbyB0YWJsZS4iKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAg
ICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1aW50NjRf
dCBpbmRleElEID0gc3FsLmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgU3RyaW5nIGlu
ZGV4TmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAgICAgICAgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGluZGV4SUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIGlu
ZGV4TmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9i
amVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDIpOwogCiAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNW
ZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JB
c1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKIAogICAgICAgICAgICAgT3B0aW9uYWw8SURCS2V5
UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleVBh
dGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5kYXRhKCkp
LCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkgewpAQCAtMTA4MSw4ICsxMDgx
LDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzcWwuZ2V0
Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3FsLmdldENvbHVt
bkludCg1KTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3FsLT5nZXRDb2x1bW5JbnQoNCk7
CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBzcWwtPmdldENvbHVtbkludCg1KTsKIAog
ICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IGRhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJRCk7CiAgICAgICAgICAgICBpZiAoIW9iamVjdFN0
b3JlKSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAg
ICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5kZXhJbmZvKTsKICAgICAg
ICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJRCA/IGluZGV4SUQgOiBtYXhJ
bmRleElEOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTElURV9ET05FKSB7CkBAIC0xMTYyLDExICsxMTYyLDE1IEBAIE9wdGlvbmFsPElEQkRhdGFi
YXNlTmFtZUFuZFZlcnNpb24+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5k
VmVyc2lvCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU1FMaXRl
U3RhdGVtZW50IG5hbWVzcWwoZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFz
ZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Iik7Ci0gICAgYXV0byBkYXRhYmFzZU5h
bWUgPSBuYW1lc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0byBuYW1lc3FsID0gZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdI
RVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgaWYgKCFuYW1lc3FsKSB7CisgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IHRvIGdldCBkYXRhYmFz
ZSBuYW1lKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgYXV0byBk
YXRhYmFzZU5hbWUgPSBuYW1lc3FsLT5nZXRDb2x1bW5UZXh0KDApOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHZlcnNxbChkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5m
byBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgIFN0cmluZyBzdHJpbmdW
ZXJzaW9uID0gdmVyc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0byB2ZXJzcWwgPSBkYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8g
V0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAgICBTdHJpbmcgc3RyaW5nVmVy
c2lvbiA9IHZlcnNxbCA/IHZlcnNxbC0+Z2V0Q29sdW1uVGV4dCgwKSA6IFN0cmluZygpOwogICAg
IGF1dG8gZGF0YWJhc2VWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVpbnQ2NF90PihzdHJpbmdWZXJz
aW9uKTsKICAgICBpZiAoIWRhdGFiYXNlVmVyc2lvbikgewogICAgICAgICBMT0dfRVJST1IoIkRh
dGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9lcyBub3QgY2xlYW5seSBjb252ZXJ0IHRv
IGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNpb24iLCBzdHJpbmdWZXJzaW9uLnV0Zjgo
KS5kYXRhKCkpOwpAQCAtMTMxMCwxMCArMTMxNCwxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZv
KQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUoKSA9PSBJREJUcmFuc2FjdGlv
bk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5mb0Jl
Zm9yZVZlcnNpb25DaGFuZ2UgPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oKm1fZGF0YWJh
c2VJbmZvKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiVVBE
QVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJlIGtleSA9ICdEYXRhYmFzZVZl
cnNpb24nOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lv
bigpKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgi
VVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJlIGtleSA9ICdEYXRhYmFz
ZVZlcnNpb24nOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJp
bmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAg
ICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcg
ZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAt
MjM0Nyw0MyArMjM1MSwzMyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIGludDY0X3Qg
cmVjb3JkSUQgPSAwOwogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIGtleVJlc3VsdEJ1ZmZlciwg
dmFsdWVSZXN1bHRCdWZmZXI7CiAgICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgbG93ZXJPcGVuVXBwZXJPcGVuID0gIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJl
Y29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBB
TkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWQgPSAiU0VMRUNUIGtleSwgdmFs
dWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
OwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlck9wZW4g
PSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRF
WFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93
ZXJDbG9zZWRVcHBlckNsb3NlZCA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNv
cmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFO
RCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotCi0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5ID0gIlNFTEVDVCBr
ZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8g
QVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVwcGVyQ2xvc2VkS2V5T25seSA9
ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5
ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtl
eTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlck9w
ZW5LZXlPbmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQg
PSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkg
T1JERVIgQlkga2V5OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNs
b3NlZFVwcGVyQ2xvc2VkS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBv
YmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENB
U1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgICAgICBTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBzcWw7CiAKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNh
c2UgSURCR2V0UmVjb3JkRGF0YVR5cGU6OktleUFuZFZhbHVlOgogICAgICAgICAgICAgaWYgKGtl
eVJhbmdlLmxvd2VyT3BlbikgewogICAgICAgICAgICAgICAgIGlmIChrZXlSYW5nZS51cHBlck9w
ZW4pCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZh
bHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVuVXBwZXJPcGVuKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRz
TG93ZXJPcGVuVXBwZXJPcGVuLCAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBr
ZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRW
YWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWQpOwor
ICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJl
Y29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJhbmdlLnVwcGVyT3BlbikKLSAg
ICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNv
cmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJPcGVuKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93
ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBr
ZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRW
YWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2Vk
KTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFs
dWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJ
RCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8g
QVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJREJHZXRSZWNv
cmREYXRhVHlwZTo6S2V5T25seToKICAgICAgICAgICAgIGlmIChrZXlSYW5nZS5sb3dlck9wZW4p
IHsKICAgICAgICAgICAgICAgICBpZiAoa2V5UmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAg
ICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJPcGVu
VXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAg
ICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVy
T3BlbiwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFO
RCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7Il9zKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNx
bCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3Nl
ZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2Vk
LCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBr
ZXk7Il9zKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJh
bmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCBsb3dlckNsb3NlZFVwcGVy
T3BlbktleU9ubHkpOworICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQo
U1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5IEZST00g
UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNR
TDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJD
bG9zZWRLZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsICJTRUxFQ1Qga2V5IEZS
T00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNDU1LDM2ICsyNDQ5LDI3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zCiAKIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50Rm9yR2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKGNv
bnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSkKIHsKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJPcGVuS2V5ID0iU0VMRUNUIGtleSBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlckNsb3NlZEtleSA9ICJTRUxFQ1Qga2V5
IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFT
IFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyT3BlbktleSA9ICJTRUxFQ1Qg
a2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1Qo
PyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5ID0gIlNF
TEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
OwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5WYWx1ZSA9
ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhU
KSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVu
VXBwZXJDbG9zZWRWYWx1ZSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtl
eSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJPcGVuVmFsdWUgPSAiU0VMRUNUIGtleSwgdmFsdWUs
IFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkVmFsdWUg
PSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5nZXRBbGxU
eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cykgewogICAgICAgICBpZiAoZ2V0QWxs
UmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLmxvd2VyT3BlbikgewogICAgICAgICAgICAgaWYgKGdl
dEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBl
ck9wZW4sIGxvd2VyT3BlblVwcGVyT3BlbktleSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FjaGVk
U3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCBsb3dl
ck9wZW5VcHBlckNsb3NlZEtleSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRl
bWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4sICJTRUxFQ1Qga2V5
IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFT
IFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CisgICAg
ICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2Vy
T3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChnZXRBbGxS
ZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3Blbiwg
bG93ZXJDbG9zZWRVcHBlck9wZW5LZXkpOwotICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2Vk
VXBwZXJDbG9zZWRLZXkpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6
OkdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBrZXkgRlJPTSBS
ZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CisgICAgICAgIHJl
dHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ckNsb3NlZCwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/
IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9S
REVSIEJZIGtleTsiX3MpOwogICAgIH0KIAogICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlS
YW5nZURhdGEubG93ZXJPcGVuKSB7CiAgICAgICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlS
YW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChT
UUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVuVXBwZXJPcGVu
VmFsdWUpOwotICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNv
cmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGxvd2VyT3BlblVwcGVyQ2xvc2VkVmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2Vy
T3BlblVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hF
UkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwg
Q0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOworICAgICAgICByZXR1cm4gY2FjaGVk
U3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsICJTRUxF
Q1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/
IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JE
RVIgQlkga2V5OyJfcyk7CiAgICAgfQogCiAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJh
bmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpH
ZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgbG93ZXJDbG9zZWRVcHBlck9wZW5W
YWx1ZSk7Ci0gICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xv
d2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRWYWx1ZSk7CisgICAg
ICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3Nl
ZFVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENB
U1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKKyAgICByZXR1cm4gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBr
ZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIg
Qlkga2V5OyJfcyk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxs
T2JqZWN0U3RvcmVSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQpAQCAtMjc1OCwxOSArMjc0MywxNCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3RpbwogICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHN0
YXRlbWVudDsKIAogICAgIGlmICghaW5kZXhJZGVudGlmaWVyKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3BlblVwcGVyT3BlblJlY29yZHMgPSAiU0VMRUNU
IENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7IjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGNvdW50TG93ZXJPcGVuVXBwZXJDbG9zZWRSZWNvcmRzID0g
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsiOwotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dlckNsb3NlZFVwcGVyT3BlblJl
Y29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQp
OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBw
ZXJDbG9zZWRSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNU
KD8gQVMgVEVYVCk7IjsKLQogICAgICAgICBpZiAocmFuZ2UubG93ZXJPcGVuICYmIHJhbmdlLnVw
cGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNv
dW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgY291bnRMb3dlck9wZW5VcHBlck9wZW5SZWNv
cmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50
UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMg
V0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmxvd2VyT3Bl
biAmJiAhcmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3Rh
dGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGNvdW50TG93ZXJP
cGVuVXBwZXJDbG9zZWRSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIENP
VU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVs
c2UgaWYgKCFyYW5nZS5sb3dlck9wZW4gJiYgcmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAg
c3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJDbG9zZWRV
cHBlck9wZW4sIGNvdW50TG93ZXJDbG9zZWRVcHBlck9wZW5SZWNvcmRzKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2Vk
VXBwZXJPcGVuLCAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRF
WFQpOyJfcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGNvdW50TG93
ZXJDbG9zZWRVcHBlckNsb3NlZFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVtZW50ID0gY2Fj
aGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNF
TEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAg
ICAgICAgCiAgICAgICAgIGlmICghc3RhdGVtZW50CiAgICAgICAgICAgICB8fCBzdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwpAQCAtMjc4
MCwxOSArMjc2MCwxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgICAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIGNvdW50IHJlY29yZHMgaW4g
b2JqZWN0IHN0b3JlIGR1ZSB0byBiaW5kaW5nIGZhaWx1cmUiX3MgfTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3Bl
blVwcGVyT3BlbkluZGV4UmVjb3JkcyA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29y
ZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwg
Q0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3Vu
dExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJPcGVuSW5kZXhSZWNvcmRzID0gIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJDbG9zZWRJbmRleFJlY29y
ZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/
IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7
Ci0gICAgICAgIAogICAgICAgICBpZiAocmFuZ2UubG93ZXJPcGVuICYmIHJhbmdlLnVwcGVyT3Bl
bikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5k
ZXhSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBjb3VudExvd2VyT3BlblVwcGVyT3BlbkluZGV4
UmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpD
b3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAgICAgICAgZWxzZSBpZiAocmFuZ2Uu
bG93ZXJPcGVuICYmICFyYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2Vk
LCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0
YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJPcGVu
VXBwZXJDbG9zZWQsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5k
ZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKTsiX3MpOwogICAgICAgICBlbHNlIGlmICghcmFuZ2UubG93ZXJPcGVuICYmIHJhbmdlLnVw
cGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNv
dW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGNvdW50TG93ZXJDbG9zZWRVcHBl
ck9wZW5JbmRleFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6Q291bnRJbmRleFJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5k
ZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgY291bnRMb3dlckNsb3NlZFVwcGVyQ2xv
c2VkSW5kZXhSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsiX3MpOwogCiAgICAgICAg
IGlmICghc3RhdGVtZW50CiAgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBp
bmRleElkZW50aWZpZXIpICE9IFNRTElURV9PSwpAQCAtMzAxNywxMiArMjk5MiwxMiBAQCB2b2lk
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKCkKICAgICAgICAgYm9v
bCBlcnJvcmVkID0gdHJ1ZTsKIAogICAgICAgICBpZiAobV9zcWxpdGVEQikgewotICAgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBmaWxlTmFtZSBGUk9N
IEJsb2JGaWxlczsiX3MpOwotICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAg
ICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBmaWxl
TmFtZSBGUk9NIEJsb2JGaWxlczsiX3MpOworICAgICAgICAgICAgaWYgKHNxbCkgeworICAgICAg
ICAgICAgICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAgICAgICAgICAgICAgICB3aGls
ZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgICAgICAgICAgYmxvYkZpbGVz
LmFwcGVuZChzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQoc3Fs
LT5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5z
dGVwKCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxJVEVfRE9ORSkKQEAgLTMwNTQsMjEgKzMwMjksMjAgQEAgdm9pZCBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vyc29yJiBjdXJzb3IpCiAgICAg
bV9jdXJzb3JzLnJlbW92ZShjdXJzb3IuaWRlbnRpZmllcigpKTsKIH0KIAotU1FMaXRlU3RhdGVt
ZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQo
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUwgc3FsLCBjb25zdCBjaGFyKiBzdGF0ZW1lbnQpCitT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hl
ZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTCBzcWwsIEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKIHsKICAgICBpZiAoc3FsID49IFNRTDo6SW52YWxpZCkgewogICAgICAgICBMT0dfRVJS
T1IoIkludmFsaWQgU1FMIHN0YXRlbWVudCBJRCBwYXNzZWQgdG8gY2FjaGVkU3RhdGVtZW50KCki
KTsKICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKICAg
ICB9CiAKLSAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3Fs
KV0pIHsKKyAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3Fs
KV0pCiAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldLmdldCgpIH07Ci0gICAgfQog
CiAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc3FsKV0gPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oKm1fc3Fs
aXRlREIsIHN0YXRlbWVudCk7Ci0gICAgICAgIGlmIChtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzcWwpXS0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAg
IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gbnVsbHB0cjsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlSGVhcFN0YXRlbWVu
dChxdWVyeSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQpCisgICAgICAgICAgICBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IHN0YXRlbWVudC52YWx1ZSgpLm1v
dmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRv
UmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCld
LmdldCgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggOTZkMjhlMmU2M2Nh
YTRhNWQyOGNlYzRiOTJkY2Q3MjIwZDA3MTRiMy4uNDFkY2JmMzk1ODU5YmVmNzNhZTMzYTMzM2U0
NmZjOGEzY2E0MjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtMjA0LDcg
KzIwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludmFsaWQsCiAgICAgfTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudChTUUwsIGNvbnN0IGNoYXIq
KTsKKyAgICBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnQoU1FM
LCBBU0NJSUxpdGVyYWwpOwogICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hl
ZFN0YXRlbWVudEZvckdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhjb25zdCBJREJHZXRBbGxSZWNv
cmRzRGF0YSYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gbV9jYWNo
ZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PGludD4oU1FMOjpJbnZhbGlkKV07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJD
dXJzb3IuY3BwCmluZGV4IGMyY2VkODQxOTMwMGI1YThjNThhOGU4NDAyMjJmMjU1NjEyNWIzNWMu
LmYyODkwOGNhNTE1ZTdiOWIyZmZmODQ4OGMwMDZkMmIwZTgxYmJmNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJD
dXJzb3IuY3BwCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBib29sIFNRTGl0ZUlEQkN1cnNvcjo6Y3Jl
YXRlU1FMaXRlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogICAgIEFTU0VSVCghbV9jdXJy
ZW50VXBwZXJLZXkuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5zcWxpdGVU
cmFuc2FjdGlvbigpKTsKIAotICAgIG1fc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCksIHNx
bCk7Ci0KLSAgICBpZiAobV9zdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRh
dGFiYXNlKCkucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgY3Vyc29yIHN0YXRlbWVudCAo
cHJlcGFyZS9pZCkgLSAnJXMnIiwgbV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+
ZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CisgICAgbV9zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
IAogICAgIHJldHVybiBiaW5kQXJndW1lbnRzKCk7CiB9CkBAIC0zNDEsMTIgKzM0MSwxMiBAQCBi
b29sIFNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRBbmRSZWJpbmRQcmVJbmRleFN0YXRlbWVudElmTmVj
ZXNzYXJ5KCkKIAogICAgIGF1dG8mIGRhdGFiYXNlID0gbV90cmFuc2FjdGlvbi0+c3FsaXRlVHJh
bnNhY3Rpb24oKS0+ZGF0YWJhc2UoKTsKICAgICBpZiAoIW1fcHJlSW5kZXhTdGF0ZW1lbnQpIHsK
LSAgICAgICAgbV9wcmVJbmRleFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50
PihkYXRhYmFzZSwgYnVpbGRQcmVJbmRleFN0YXRlbWVudChpc0RpcmVjdGlvbk5leHQoKSkpOwot
Ci0gICAgICAgIGlmIChtX3ByZUluZGV4U3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gcHJlSW5kZXhTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlSGVh
cFN0YXRlbWVudChidWlsZFByZUluZGV4U3RhdGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Cisg
ICAgICAgIGlmICghcHJlSW5kZXhTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IHByZXBhcmUgcHJlIHN0YXRlbWVudCAtICclcyciLCBkYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAg
bV9wcmVJbmRleFN0YXRlbWVudCA9IHByZUluZGV4U3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5p
cXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJlSW5kZXhTdGF0ZW1lbnQtPnJlc2V0KCkg
IT0gU1FMSVRFX09LKSB7CkBAIC01ODgsOSArNTg4LDggQEAgU1FMaXRlSURCQ3Vyc29yOjpGZXRj
aFJlc3VsdCBTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKFNRTGl0ZUN1
cnMKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVu
dCB8fCBtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5yZXNldCgpICE9IFNRTElURV9PSykg
ewotICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hF
UkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFuZCBvYmplY3RTdG9yZUlEID0gPzsiKTsKLSAgICAg
ICAgICAgIGlmIChtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQotICAgICAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQgPSBu
dWxscHRyOworICAgICAgICAgICAgaWYgKGF1dG8gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQg
PSBkYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gUmVjb3Jk
cyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5kIG9iamVjdFN0b3JlSUQgPSA/OyJfcykp
CisgICAgICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGNhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKaW5kZXggYWI0NzgyNmM4
M2ViYjU4Yjc3YjRhNjE1MjcxMzkyMTMzY2Y4NDBlNi4uZTc0ZTI4ZjViOWU1Zjc5ZmM1ZDVjZDBj
ZTc2NmNhMGRkZjFiZjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAKQEAgLTExMywxOCArMTEzLDE1IEBAIHN0YXRpYyBTdHJpbmcgZm9y
bWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBzcWxpdGVFcnJvckNvZGUs
IGNvbnN0CiAKIHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJh
c2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBkYi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAo
IXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCB2YWx1ZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB2YWx1ZSk7CiAKLSAgICBy
ZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFi
YXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xMzQsMTcgKzEzMSwxNSBAQCBzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRh
dGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29ucwogCiBz
dGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2Um
IGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9PSykgewotICAg
ICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRl
eHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBh
cmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCBz
dGF0ZW1lbnQuZXJyb3IoKSwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ET05FKSB7
CkBAIC03MTQsOCArNzA5LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRU
YWJsZU5hbWVzKCkKIHsKICAgICBkaXNhYmxlQXV0aG9yaXplcigpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxp
dGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHNxbGl0ZURhdGFiYXNl
KCkucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGU9J3RhYmxlJzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVzIGZvciBkYXRhYmFzZSAlcyIs
IGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBlbmFibGVBdXRo
b3JpemVyKCk7CiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwpAQCAtNzIzLDggKzcx
OCw4IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcygpCiAK
ICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzOwogICAgIGludCByZXN1bHQ7Ci0gICAgd2hp
bGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
IFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKChy
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJp
bmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKG5hbWUg
IT0gdW5xdWFsaWZpZWRJbmZvVGFibGVOYW1lKQogICAgICAgICAgICAgdGFibGVOYW1lcy5hcHBl
bmQobmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDViYjkwNjdhNTBjZDE0Yjc4NTE1NTQy
MjUxNmM0MzA2MjgwOTY2MzEuLjc5YTdlOGY5NjRhOWNjNmFkZTY4YmRhNmM1ODYxMmE4Njc1NDJm
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKQEAgLTIzNSwxNSArMjM1LDE1IEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9y
aWdpbikKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyB3aGVyZSBvcmln
aW49PzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkpOwogCi0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICBy
ZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogYm9vbCBEYXRhYmFz
ZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQpAQCAtMjU2LDE1ICsyNTYs
MTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnMKICAgICB9CiAKICAgICAvLyBXZSd2ZSBnb3Qg
YSB0cmFja2VyIGRhdGFiYXNlLiBTZXQgdXAgYSBxdWVyeSB0byBhc2sgZm9yIHRoZSBkYiBvZiBp
bnRlcmVzdDoKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyIpOworICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZ3Vp
ZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CiAKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRh
YmFzZUlkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRl
bnRpZmllcik7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwor
ICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwogfQogCiB1aW50NjRf
dCBEYXRhYmFzZVRyYWNrZXI6Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMy
NSwyNiArMzI1LDI2IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJh
c2VOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdl
IGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9y
aWdpbj0/IEFORCBuYW1lPT87Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFt
ZSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1
bHQgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVu
ZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCkpOwotICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZv
ciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5h
bWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
cGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRl
bWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAg
ICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0
aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAo
IWNyZWF0ZUlmTm90RXhpc3RzKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
ICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHJldHJpZXZlIGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3Jp
Z2luICVzLCBuYW1lICVzIiwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAg
ICAgfQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0g
Z2VuZXJhdGVEYXRhYmFzZUZpbGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdp
bnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdp
biBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAg
aW50IHN0ZXBSZXN1bHQ7Ci0gICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+
aXNvbGF0ZWRDb3B5KCkpOworICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KS0+aXNvbGF0ZWRDb3B5KCkpOwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlm
IChzdGVwUmVzdWx0ICE9IFNRTElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9y
PFN0cmluZz4gRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgb3IKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgbmFtZSBGUk9NIERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdo
ZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZp
ZXIoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAg
IHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgbmFtZXMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAo
KHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1l
cy5hcHBlbmQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtU
b0ZpdCgpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0
MzksMTQgQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVB
bmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRh
YmFzZShEb250Q3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/
Iik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1
cm4gRGF0YWJhc2VEZXRhaWxzKCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbklkZW50aWZpZXIpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBE
YXRhYmFzZURldGFpbHMoKTsKIApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBE
YXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uCiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBm
b3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5
TmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdl
ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxs
UGF0aEZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEg
QEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0
ZUlmRG9lc05vdEV4aXN0KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAg
aWYgKGd1aWQgPT0gMCkgewotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFi
YXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2
ZXIgYmUgc2V0dGluZyBkYXRhYmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24n
dCBhbHJlYWR5IGV4aXN0IGluIHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2Ug
dGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxl
dGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhp
cyBhbiBBU1NFUlQgY2FzZQotICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3Ig
aW5zdGVhZAotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBm
b3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBp
dCBpcyBpbnZhbGlkIHRvIHNldCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBk
b2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBE
YXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3Rh
dGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwg
bmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAg
ICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBp
biB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVy
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
VGhpcyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5n
IGRhdGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIKKyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNr
ZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJv
bCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NF
UlQgY2FzZQorICAgICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3Rl
YWQKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZv
ciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0
IGlzIGludmFsaWQgdG8gc2V0IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRv
ZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FM
aXRlU3RhdGVtZW50IHVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNl
cyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAg
IGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVw
ZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFi
YXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7
CisgICAgaWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0
ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50
LmJpbmRJbnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZElu
dDY0KDMsIGd1aWQpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5h
bWUpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOwor
ICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gdXBkYXRlIGRldGFpbHMgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTY3MSwxNSArNjczLDE1IEBAIHVpbnQ2NF90IERhdGFiYXNlVHJhY2tl
cjo6cXVvdGFOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmln
aW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAg
IHJldHVybiBxdW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpzZXRRdW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdWludDY0X3Qg
cXVvdGEpCiAKICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5O
b0xvY2sob3JpZ2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMg
VkFMVUVTICg/LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlm
ICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxp
c2ggb3JpZ2luICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBz
dGF0ZW1lbnQuYmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZp
ZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBp
bnNlcnRlZE5ld09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBT
RVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVS
RSBvcmlnaW49PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAg
ICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3Rh
KTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOwor
ICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlm
aWVyKCkpOwogCi0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQo
KTsKKyAgICAgICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wg
RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9y
aWdpbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBh
ZGRlZCB1bnRpbCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhh
c0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUs
IHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1l
LCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlm
aWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7Cisg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2lu
ICVzOiAlc1xuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxl
dGlvbk1vZAogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNl
KTsKICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJE
RUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxl
dGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRh
dGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVj
dXRlQ29tbWFuZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgp
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9m
IGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJ
ZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlm
IChvcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IG9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZS
T00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCku
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBvcmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21t
YW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRp
b24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRh
YmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6
OmRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25N
b2QKIAogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlz
dCk7CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3Jp
Z2lucyIpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50LiIpOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKICAgICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAt
MTA4MSwxNyArMTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hv
bGRlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmln
aW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IGRlbGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUp
OworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1l
bnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFu
ZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2Yg
ZGF0YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGRvbmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTExOTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURl
bGV0ZWRPcGVuZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJh
c2VzIDogKmRhdGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0
YWJhc2VOYW1lID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRh
dGFiYXNlRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2lu
PT8gQU5EIG5hbWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFs
c2U7CkBAIC0xMjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVE
YXRhYmFzZUZpbGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVj
aWZ5IHRoYXQgd2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhl
IG5leHQgd3JpdGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRh
dGFiYXNlIGZpbGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2Us
ICJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50
IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRF
X1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBsb2NrU3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0
ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVY
Q0xVU0lWRTsiX3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RP
TkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFz
ZS5leGVjdXRlQ29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFN0YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEy
OWExYzNhOTVkMS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcApAQCAtMTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0
YWJhc2UmIGRiKQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0
YWJhc2UoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3Rh
dGVtZW50KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxl
IHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwg
bV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwotICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAg
ICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291
bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOwor
ICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRv
IHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9z
dGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5U
RVJSVVBUKQorICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6
OkRBVEFCQVNFX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5l
cnJvcigpLCAiaW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJv
ciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJl
cGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAi
Y291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBi
eSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJv
bSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNh
c2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lv
dXMKLSAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgeworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1f
YXJndW1lbnRzLnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1l
dGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAg
ICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVt
YmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBj
b3VudCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAg
ICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1
cmVEdWVUb1F1b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0
NywyMCBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0
byByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3
ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJl
c3VsdCkgewogICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQg
PSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3Rh
dGVtZW50LT5jb2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5y
b3dzKCk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQot
ICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOwor
ICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsK
IAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNv
dW50OyBpKyspCi0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENv
bHVtblZhbHVlKGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQt
PmdldENvbHVtblZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9
IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGNhYmE5OGNiNTc5YmRjMTRj
MTNiYTMxMTMzNTQ2NGFlMmM1MTIxYy4uNDc0NTU1ZjQxYjc2NGMwOTFlOTkyMjQ5ODgzYzExMDhh
ODUzMzkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAo
Y29uc3QgVVJMJiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3Vw
cyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwg
bmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVM
TCBBTkQgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVS
TC5zdHJpbmcoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJp
bmcoKSk7CiAgICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9O
RSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVH
cm91cChjb25zdCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCi0gICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RD
YWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDIpKTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9y
YWdlSUQpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICAKICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBt
YW5pZmVzdFVSTCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAg
ICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1
cm4gJmdyb3VwOwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3Vw
cyIpOyAgICAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5p
ZmVzdEhvc3RIYXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKLSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3Vw
Rm9yVVJMKGNvbnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25z
dCBVUkwmIHVybCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9y
IGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJM
LCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBO
VUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0g
VVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9j
YWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQog
CiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hl
Y2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEg
bWF0Y2hpbmcgVVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2ln
bmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQ2NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2Fj
aGVJRCk7CiAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0
MCw3ICsyNDAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgq
dGhpcywgbWFuaWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91
cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50NjQoMCkpKTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJM
KCkuc3RyaW5nKCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZv
clVSTChjb25zdCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBD
aGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2Vz
dCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBz
IFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGls
ZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOwor
ICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVz
dFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBA
QCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFj
a0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUg
Z3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSBy
ZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgot
ICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hl
SUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7
CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAg
ICAgVVJMIGZhbGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChj
b25zdCBVCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpu
ZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdy
b3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXRO
ZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0lu
TWVtb3J5LnNldChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2
LDE3ICs0MTYsMTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVv
dGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmln
aW4gcmVjb3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVv
dGEgd2lsbCBiZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSBy
ZWNvcmQgZXhpc3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBp
ZiBhIHF1b3RhIG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0g
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1
b3RhKSwgcXVvdGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9y
aWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBS
ZXR1cm4gdGhlIHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3Jk
ID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7Cisg
ICAgICAgIGJvb2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsK
KyAgICAgICAgcXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC00NDAsMTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxj
dWxhdGVVc2FnZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJ
ZiBhbiBPcmlnaW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBu
dWxsLAogICAgIC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZl
cnRpbmcgdG8gYSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91
cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2Fj
aGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3Jp
Z2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVz
IE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/
Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
c3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1
c2FnZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0
ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTQ3MCw0MCArNDcwLDQwIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1
bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAKICAgICAvLyBS
ZW1haW5pbmcgc2l6ZSA9IHRvdGFsIG9yaWdpbiBxdW90YSAtIHNpemUgb2YgYWxsIGNhY2hlcyB3
aXRoIG9yaWdpbiBleGNsdWRpbmcgdGhlIHByb3ZpZGVkIGNhY2hlLgogICAgIC8vIEtlZXAgdHJh
Y2sgb2YgdGhlIG51bWJlciBvZiBjYWNoZXMgc28gd2UgY2FuIHRlbGwgaWYgdGhlIHJlc3VsdCB3
YXMgYSBjYWxjdWxhdGlvbiBvciBub3QuCi0gICAgY29uc3QgY2hhciogcXVlcnk7CiAgICAgaW50
NjRfdCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIgPSBjYWNoZSA/IGNhY2hlLT5zdG9yYWdlSUQo
KSA6IDA7Ci0gICAgaWYgKGV4Y2x1ZGluZ0NhY2hlSWRlbnRpZmllciAhPSAwKSB7Ci0gICAgICAg
IHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChDYWNoZXMuc2l6ZSksIE9yaWdpbnMucXVvdGEgLSBTVU0o
Q2FjaGVzLnNpemUpIgotICAgICAgICAgICAgICAgICIgIEZST00gQ2FjaGVHcm91cHMiCi0gICAg
ICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2luID0g
T3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIENhY2hlcyBPTiBD
YWNoZUdyb3Vwcy5pZCA9IENhY2hlcy5jYWNoZUdyb3VwIgotICAgICAgICAgICAgICAgICIgV0hF
UkUgT3JpZ2lucy5vcmlnaW49PyIKLSAgICAgICAgICAgICAgICAiICAgQU5EIENhY2hlcy5pZCE9
PyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcXVlcnkgPSAiU0VMRUNUIENPVU5UKENhY2hlcy5z
aXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAg
IiAgRlJPTSBDYWNoZUdyb3VwcyIKLSAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lu
cyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKLSAgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3Jv
dXAiCi0gICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKLSAgICB9Ci0K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBxdWVyeSA9IFtl
eGNsdWRpbmdDYWNoZUlkZW50aWZpZXJdKCkgeworICAgICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJ
ZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZXR1cm4gIlNFTEVDVCBDT1VOVChDYWNoZXMuc2l6
ZSksIE9yaWdpbnMucXVvdGEgLSBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAg
ICAiICBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4g
T3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAg
ICAgICAgICAgICAgIiBJTk5FUiBKT0lOIENhY2hlcyBPTiBDYWNoZUdyb3Vwcy5pZCA9IENhY2hl
cy5jYWNoZUdyb3VwIgorICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2lu
PT8iCisgICAgICAgICAgICAgICAgICAgICIgICBBTkQgQ2FjaGVzLmlkIT0/Il9zOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKENhY2hlcy5zaXplKSwgT3JpZ2lucy5x
dW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3Jv
dXBzIgorICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMu
b3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCisgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2Fj
aGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAg
ICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3M7CisgICAgfSgpOworCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAo
ZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDApCi0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAg
ICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9y
aWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZvciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBj
YW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYgKG51bWJlck9mQ2FjaGVzID09IDApCiAgICAg
ICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1haW5pbmdTaXplID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVtYWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0
ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVv
dGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdp
blJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVv
dGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8i
X3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0
ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOwor
ICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0
ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
IAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0
dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3RhdGVtZW50LnZhbHVlKCkpOwogfQogCiBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcm
IHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2
ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2Vy
OjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbklu
dCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGludCB2ZXJzaW9uID0gdmVyc2lv
blN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAg
aWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAs
MTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFW
ZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNR
TCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBSQUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hl
bWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkpID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVt
ZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7
CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1pdCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1
Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FM
aXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tl
cjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVt
ZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJP
UigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50
IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVy
eSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBM
T0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0
YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBAIC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
LCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVD
YWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVzdFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3Jv
dXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVzdFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8s
ID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBD
YWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwgbWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVT
ICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlm
ZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJM
KCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCku
ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkpOworICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2Rh
dGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAgLTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNv
dXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAh
PSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdy
b3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywg
PykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlE
KCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5T
dG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUs
MjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25s
aW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFsbG93bGlzdCgpOwogICAgIHsKICAgICAgICAg
Zm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxpbmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hl
V2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICAgICAg
c3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVy
bCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmluZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOworICAgICAgICAgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUgb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBm
bGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBj
YWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAg
ICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93
c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBj
YWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5h
bGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3Rh
dGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1
NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVj
dG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFsbGJhY2tVUkxzKCk7CiAgICAgewogICAgICAg
ICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFsbGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFj
a1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwsIGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7
Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNr
VVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3Mp
OworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmly
c3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNr
VVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMs
IGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFs
bGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWdu
ZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0
YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAg
IGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRh
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNo
ZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFk
YXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcg
ZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
ZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoRmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOworICAgICAgICBkYXRhU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lz
dGVtOjpwYXRoRmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3Vs
ZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwg
Y2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5nIHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUg
bWF4aW11bSB0b3RhbCBxdW90YS4gV2UgZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0
aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJlLCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0
b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgxMywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVu
c2lnbmVkCiAgICAgICAgIAogICAgICAgICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291
cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgy
LCBwYXRoKTsKKyAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAg
ICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVz
b3VyY2UtPmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJs
b2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5kYXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsK
KyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8g
Q2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAg
aWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVG
aWxlKGZ1bGxQYXRoKTsKQEAgLTg0MywzNiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2ln
bmVkCiAgICAgCiAgICAgU3RyaW5nIGhlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVS
TCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywg
PywgPywgPywgPywgPywgPykiKTsKLSAgICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXND
b2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05h
bWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgYXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpzaXplKCkKICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2Yg
YW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdl
IHRoZSBjb2RlIGJlbG93LCBwbGVhc2UgYWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpzaXplKCkuCi0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2Ut
PnVybCgpLnN0cmluZygpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVz
b3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1l
bnQuYmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAg
IHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3Rh
dGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRhSWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDYsIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3Rh
dGVtZW50LmJpbmRUZXh0KDcsIHJlc291cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUo
KSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAg
IHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkp
OworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNl
KCkuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMs
IHJlc291cmNlLT5yZXNwb25zZSgpLnVybCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRl
bWVudC0+YmluZFRleHQoNCwgaGVhZGVycyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCg1LCBkYXRhSWQpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNv
dXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+Ymlu
ZFRleHQoNywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAg
IGlmICghZXhlY3V0ZVN0YXRlbWVudChyZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBG
aW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hlIGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0
eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUs
IHR5cGUsIHJlc291cmNlKSBWQUxVRVMgKD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQu
YmluZEludDY0KDEsIGNhY2hlU3RvcmFnZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50
NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMs
IHJlc291cmNlSWQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9y
YWdlSUQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUo
KSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAK
LSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhl
Y3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIC8vIERpZCB3ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNl
IGRhdGEgdG8gYSBmaWxlPyBJZiBzbywKQEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiByZXNvdXJjCiAgICAgQVNTRVJUKHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAv
LyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVz
b3VyY2U9PyIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlVQREFURSBDYWNoZUVudHJpZXMgU0VUIHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAg
ICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRy
eVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0
ZW1lbnQuYmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0
ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVu
dC0+YmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhl
Y3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQudmFsdWUoKSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0
aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBw
bGljYXQKICAgICB9CiAKICAgICAvLyBBIHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUu
IFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBzaXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNpemVVcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VU
IHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8g
V0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50
LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAg
ICBzaXplVXBkYXRlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsK
IAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBp
ZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21t
aXQoKTsKQEAgLTk0MywxMyArOTQ2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpo
YXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9y
aWdpblN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBx
dW90YSkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBx
dW90YSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0
T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0
T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZh
dWx0T3JpZ2luUXVvdGEpOworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5T
dGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwxNiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAg
IAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91
cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNv
biA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5z
dG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3Rv
cmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgp
KTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVy
ZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhl
YWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNo
ZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tl
cjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNo
ZVN0YXRlbWVudChtX2RhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05h
bWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBh
dGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVu
dHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291
cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/
Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIGNhY2hlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAg
ICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGlu
Z05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRh
LnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNo
ZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3Rh
dGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3Rh
dGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJ
bnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKIAogICAgIGF1dG8gY2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsK
IAogICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFt
ZSk7CiAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3Rh
dGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNh
Y2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBo
dHRwU3RhdHVzQ29kZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAg
aW50IGh0dHBTdGF0dXNDb2RlID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAot
ICAgICAgICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAg
ICAgIFZlY3RvcjxjaGFyPiBibG9iOwotICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoNiwgYmxvYik7CisgICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoNiwgYmxvYik7CiAgICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmlu
ZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBs
b25nIHNpemUgPSAwOwogICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBz
aXplID0gZGF0YS0+c2l6ZSgpOwpAQCAtMTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBz
dG9yYWdlSUQpCiAgICAgICAgICAgICBzaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUocGF0aCku
dmFsdWVPcigwKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3RyaW5nIG1pbWVUeXBl
ID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgzKTsKLSAgICAgICAgU3RyaW5nIHRleHRF
bmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDQpOworICAgICAgICBT
dHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAg
ICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBt
aW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7CiAgICAgICAgIHJlc3BvbnNlLnNldEhU
VFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAotICAgICAgICBTdHJpbmcgaGVhZGVycyA9
IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7CisgICAgICAgIFN0cmluZyBoZWFkZXJz
ID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoNSk7CiAgICAgICAgIHBhcnNlSGVhZGVy
cyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAogICAgICAgICBhdXRvIHJlc291cmNlID0g
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlwZSwgV1RG
TW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsxMTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0
b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAg
U1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHVy
bCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBjYWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93
bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gYWxsb3dsaXN0
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdXJsIEZST00g
Q2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghYWxsb3dsaXN0
U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1l
bnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgYWxsb3dsaXN0U3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBWZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0g
ICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVf
Uk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0sIGFsbG93bGlzdFN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgYWxsb3dsaXN0LmFwcGVuZChV
UkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxv
YWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJ
RCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0KGFsbG93bGlzdCk7CiAKICAgICAvLyBM
b2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQg
YWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBG
Uk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzIFdIRVJFIGNhY2hlPT8iKTsKLSAgICBp
ZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNoZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0
cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVu
dC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAgCi0gICAgcmVzdWx0ID0gYWxsb3dsaXN0
V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJlc3VsdCA9IGFsbG93bGlzdFdpbGRjYXJk
U3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hlIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNh
cmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAg
ICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29y
a1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7
CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9E
T05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBtYW55IHJvd3MgZm9yIG9ubGluZSBhbGxv
d2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8gTG9hZCBmYWxsYmFjayBVUkxzLgotICAg
IFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG5h
bWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFja1VSTHMgV0hFUkUgY2FjaGU9PyIpOwot
ICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFsbGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGZh
bGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBGYWxs
YmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBmYWxsYmFj
a1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIAotICAgICAgICBmYWxsYmFja1VSTHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVt
blRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKSkp
OworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihVUkwo
eyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSksIFVSTCh7IH0sIGZhbGxi
YWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBmYWxsYmFjayBV
UkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTEyMTks
MjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxp
Y2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlE
KCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0
YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlcyBXSEVSRSBpZD0/Il9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5k
SW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRl
bWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5j
bGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgp
ID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJz
IG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVt
b3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsK
LSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
ICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iX3MpOworICAgICAgICBpZiAoIWdyb3Vw
U3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgZ3JvdXBT
dGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAg
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOworICAgICAgICBncm91cFN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgICAg
IGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQudmFsdWUoKSk7CiAKICAgICAgICAgY2Fj
aGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgfQpAQCAtMTMxNiwxNCArMTMxOSwx
MyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlm
ZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFVSTHMobV9kYXRhYmFz
ZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hlR3JvdXBzIik7Ci0KLSAgICBpZiAoc2Vs
ZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlmZXN0VVJMIEZST00gQ2FjaGVH
cm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0gICAgd2hpbGUgKHNlbGVjdFVSTHMuc3Rl
cCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMuYXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVS
THMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzZWxlY3RVUkxzLT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQoVVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0
Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVybHM7CiB9CkBAIC0xMzMxLDMwICsxMzMz
LDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFu
aWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3Jv
dXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKIHsKICAgICBBU1NFUlQoU1FMaXRl
RGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdy
b3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKGlkU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9
PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZlc3RVUkwpOworICAgIGlkU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAgICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1l
bnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50
NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgaW50NjRf
dCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZXMg
V0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGNhY2hlR3JvdXA9PyJfcyk7Cisg
ICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FM
aXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNo
ZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAg
aWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2FjaGVT
dGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2Fj
aGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91cElkKTsK
LSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50KTsKKyAgICBjYWNoZVN0YXRlbWVu
dC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0
ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBncm91cElk
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50LnZhbHVlKCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDExLDIwIEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBpbiBEZWxldGVkQ2FjaGVSZXNvdXJjZXMg
dGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVSZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVz
b3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCAiCiAgICAgICAgICJG
Uk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAgICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNv
dXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPSBDYWNo
ZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldIRVJFIChTRUxFQ1QgRGVsZXRlZENhY2hl
UmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURhdGEucGF0aCkgSVMgTlVMTCIpOworICAg
ICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJl
c291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAgICAKLSAgICBpZiAoc2VsZWN0UGF0aHMu
cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAoIXNlbGVjdFBhdGhzKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhzLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQor
ICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQYXRocy0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7
Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgpID09IFNRTElURV9ST1cpOworICAgIH0g
d2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVyk7CiAgICAgCiAgICAgZXhl
Y3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyIpOwogfQpA
QCAtMTQ0NiwxNiArMTQ0OCwxNSBAQCBsb25nIGxvbmcgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0
YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIHBhdGggTk9U
IE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxv
YWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBsb25n
IGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxl
U3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0
RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgeworICAgIHdoaWxlIChzZWxlY3RQYXRocy0+c3RlcCgpID09IFNRTElURV9S
T1cpIHsKICAgICAgICAgYXV0byBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgw
KSk7CiAgICAgICAgIHRvdGFsU2l6ZSArPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShmdWxsUGF0aCku
dmFsdWVPcigwKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCBmOGVjOWNmNDdkNGMxZmIwMzhmZjU3NzYz
YzEyYWRiYjg3OTUyMGQzLi4yYmYzOTEyYmQ0YjcxNzIyM2I0MGNjNDljMTY2YzFjOTkwNTUyNTMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2ll
SmFyREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJEQi5jcHAKQEAgLTE4MSw4ICsxODEsNiBAQCBib29sIENvb2tpZUphckRCOjpvcGVuRGF0
YWJhc2UoKQogdm9pZCBDb29raWVKYXJEQjo6Y2xvc2VEYXRhYmFzZSgpCiB7CiAgICAgaWYgKG1f
ZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZW1lbnQg
OiBtX3N0YXRlbWVudHMpCi0gICAgICAgICAgICBzdGF0ZW1lbnQudmFsdWUuZ2V0KCktPmZpbmFs
aXplKCk7CiAgICAgICAgIG1fc3RhdGVtZW50cy5jbGVhcigpOwogICAgICAgICBtX2RhdGFiYXNl
LmNsb3NlKCk7CiAgICAgfQpAQCAtMTkzLDcgKzE5MSw4IEBAIHZvaWQgQ29va2llSmFyREI6OnZl
cmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGlmIChpc09uTWVtb3J5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFH
TUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAg
ICBpbnQgdmVyc2lvbiA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDog
MDsKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI3MywyNSArMjcyLDI1IEBAIGJvb2wgQ29va2llSmFyREI6OmNoZWNrRGF0YWJhc2VWYWxp
ZGl0eSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJDb29raWUiKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGludGVncml0eShtX2RhdGFi
YXNlLCAiUFJBR01BIHF1aWNrX2NoZWNrOyIpOwotICAgIGlmIChpbnRlZ3JpdHkucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW50ZWdyaXR5ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgcXVpY2tfY2hlY2s7Il9zKTsKKyAgICBpZiAoIWludGVncml0eSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlIGRhdGFiYXNlIGludGVncml0
eSBjaGVjayIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHJlc3Vs
dENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAgIGludCByZXN1bHRDb2RlID0gaW50ZWdyaXR5
LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBM
T0dfRVJST1IoIkludGVncml0eSBxdWlja19jaGVjayBzdGVwIHJldHVybmVkICVkIiwgcmVzdWx0
Q29kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgY29sdW1ucyA9
IGludGVncml0eS5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LT5j
b2x1bW5Db3VudCgpOwogICAgIGlmIChjb2x1bW5zICE9IDEpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJSZWNlaXZlZCAlaSBjb2x1bW5zIHBlcmZvcm1pbmcgaW50ZWdyaXR5IGNoZWNrLCBzaG91bGQg
YmUgMSIsIGNvbHVtbnMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgU3Ry
aW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHkuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICBTdHJpbmcg
cmVzdWx0VGV4dCA9IGludGVncml0eS0+Z2V0Q29sdW1uVGV4dCgwKTsKIAogICAgIGlmIChyZXN1
bHRUZXh0ICE9ICJvayIpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb29raWUgZGF0YWJhc2UgaW50
ZWdyaXR5IGNoZWNrIGZhaWxlZCAtICVzIiwgcmVzdWx0VGV4dC5hc2NpaSgpLmRhdGEoKSk7CkBA
IC0zODYsMjAgKzM4NSwxNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2llPj4gQ29va2llSmFyREI6
OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdAogCiAgICAgUmVnaXN0
cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyByZXF1ZXN0VXJsIH07CiAKLSAgICBjb25z
dCBTdHJpbmcgc3FsID0KLSAgICAgICAgIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRo
LCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIFdIRVJFICJc
CisgICAgYXV0byBwc3RtdCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5h
bWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Np
b24gRlJPTSBDb29raWUgV0hFUkUgIlwKICAgICAgICAgIihOT1QgKChzZXNzaW9uID0gMCkgQU5E
IChleHBpcmVzIDwgPykpKSIKICAgICAgICAgIkFORCAoaHR0cG9ubHkgPSBDT0FMRVNDRShOVUxM
SUYoPywgLTEpLCBodHRwb25seSkpICJcCiAgICAgICAgICJBTkQgKHNlY3VyZSA9IENPQUxFU0NF
KE5VTExJRig/LCAtMSksIHNlY3VyZSkpICJcCiAgICAgICAgICJBTkQgKHNlc3Npb24gPSBDT0FM
RVNDRShOVUxMSUYoPywgLTEpLCBzZXNzaW9uKSkgIlwKICAgICAgICAgIkFORCAoKGRvbWFpbiA9
ID8pIE9SIChkb21haW4gR0xPQiA/KSkgIlwKLSAgICAgICAgIk9SREVSIEJZIGxlbmd0aChwYXRo
KSBERVNDLCBsYXN0dXBkYXRlZCI7Ci0KLSAgICBhdXRvIHBzdG10ID0gbWFrZVVuaXF1ZTxTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CisgICAgICAgICJPUkRFUiBCWSBsZW5ndGgo
cGF0aCkgREVTQywgbGFzdHVwZGF0ZWQiX3MpOwogICAgIGlmICghcHN0bXQpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBwc3RtdC0+cHJlcGFyZSgpOwogICAgIHBzdG10LT5i
aW5kSW50NjQoMSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNv
bmRzKCkpOwogICAgIHBzdG10LT5iaW5kSW50KDIsIGh0dHBPbmx5ID8gKmh0dHBPbmx5IDogLTEp
OwogICAgIHBzdG10LT5iaW5kSW50KDMsIHNlY3VyZSA/ICpzZWN1cmUgOiAtMSk7CkBAIC00MTEs
OSArNDA2LDYgQEAgT3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENvb2tpZUphckRCOjpzZWFyY2hD
b29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QKICAgICBlbHNlCiAgICAgICAgIHBz
dG10LT5iaW5kVGV4dCg2LCBTdHJpbmcoIiouIikgKyByZWdpc3RyYWJsZURvbWFpbi5zdHJpbmco
KSk7CiAKLSAgICBpZiAoIXBzdG10KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAg
ICAgVmVjdG9yPENvb2tpZT4gcmVzdWx0czsKIAogICAgIHdoaWxlIChwc3RtdC0+c3RlcCgpID09
IFNRTElURV9ST1cpIHsKQEAgLTQ1Myw3ICs0NDUsNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2ll
Pj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dAogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IGNvb2tpZVNlc3Npb247CiAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CiAgICAgfQotICAgIHBzdG10LT5maW5hbGl6ZSgp
OwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC00NjMsMTEgKzQ1NCwxMSBAQCBWZWN0b3I8
Q29va2llPiBDb29raWVKYXJEQjo6Z2V0QWxsQ29va2llcygpCiAgICAgVmVjdG9yPENvb2tpZT4g
cmVzdWx0OwogICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgbmFt
ZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lv
biBGUk9NIENvb2tpZSJfczsKLSAgICBhdXRvIHBzdG10ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CisKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJl
cywgaHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSJfcyk7CiAgICAgaWYgKCFw
c3RtdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBwc3RtdC0+cHJlcGFyZSgpOworCiAg
ICAgd2hpbGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewogICAgICAgICBDb29raWUg
Y29va2llOwogICAgICAgICBjb29raWUubmFtZSA9IHBzdG10LT5nZXRDb2x1bW5UZXh0KDApOwpA
QCAtNDgyLDcgKzQ3Myw2IEBAIFZlY3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxDb29r
aWVzKCkKICAgICAgICAgY29va2llLnNlc3Npb24gPSAocHN0bXQtPmdldENvbHVtbkludCg3KSA9
PSAxKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwogICAgIH0KLSAg
ICBwc3RtdC0+ZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01NzEsMTYg
KzU2MSwxNSBAQCBib29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJgogCiBIYXNoU2V0PFN0cmluZz4gQ29v
a2llSmFyREI6OmFsbERvbWFpbnMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgU0VMRUNUX0FMTF9ET01BSU5TX1NRTCk7Ci0gICAgc3RhdGVtZW50LnByZXBh
cmUoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChT
RUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zOwotICAgIHdoaWxlIChzdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0byBkb21haW4gPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIGRvbWFpbiA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKICAgICAgICAgZG9tYWlucy5hZGQoZG9tYWluKTsKICAgICB9Ci0KLSAgICBzdGF0
ZW1lbnQuZmluYWxpemUoKTsKICAgICByZXR1cm4gZG9tYWluczsKIH0KIApAQCAtNjM3LDEwICs2
MjYsOSBAQCBib29sIENvb2tpZUphckRCOjpkZWxldGVBbGxDb29raWVzKCkKIAogdm9pZCBDb29r
aWVKYXJEQjo6Y3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKIHsKLSAg
ICBhdXRvIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNl
LCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnByZXBhcmUoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHJldCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAgbV9zdGF0ZW1lbnRzLmFkZChzcWws
IFdURk1vdmUoc3RhdGVtZW50KSk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVIZWFwU3RhdGVtZW50KHNxbCk7CisgICAgQVNTRVJUKHN0YXRlbWVudCk7CisgICAgbV9z
dGF0ZW1lbnRzLmFkZChzcWwsIHN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpKTsK
IH0KIAogU1FMaXRlU3RhdGVtZW50JiBDb29raWVKYXJEQjo6cHJlcGFyZWRTdGF0ZW1lbnQoY29u
c3QgU3RyaW5nJiBzcWwpCkBAIC02NTMsMTAgKzY0MSwxMyBAQCBTUUxpdGVTdGF0ZW1lbnQmIENv
b2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKIAogYm9vbCBD
b29raWVKYXJEQjo6ZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmIHNxbCkKIHsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRl
bWVudC5wcmVwYXJlQW5kU3RlcCgpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOworICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgaWYg
KCFzdGF0ZW1lbnQgJiYgIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQuZXJyb3IoKSkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSAlcyBlcnJvcjogJXMiLCBz
cWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogCisgICAgaW50IHJldCA9IHN0YXRlbWVudC0+c3RlcCgpOwog
ICAgIGlmICghY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCkpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gZXhlY3V0ZSAlcyBlcnJvcjogJXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5oCmluZGV4
IDdjMGVhNDdlY2U0ZmYwZDQ3MmNlNTk1YzkxZWExY2ZhOTBiMjVjYTcuLjQxZWQ5NDQ3YzQwNjhm
NWMwNjg5MWQ4MjUxYzVjOWMxZjA3NmIzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5oCkBAIC05Myw3ICs5Myw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB2ZXJpZnlTY2hlbWFWZXJzaW9uKCk7CiAgICAgdm9pZCBkZWxldGVBbGxU
YWJsZXMoKTsKIAotICAgIHZvaWQgY3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIGNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsKTsKICAgICBT
UUxpdGVTdGF0ZW1lbnQmIHByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYpOwogICAgIGJv
b2wgZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggYzIzOWI0NDIwYjMyNWIwMDY0YzRmNmFi
NjliMWI4MWI3YTBhZDdiZi4uMzA3NTg4YjhiNmJjZDQyZTJjODIxMDZkZTZlNjFlMzhiM2UwNmM0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiAKICAgICB7CiAgICAgICAgIFNRTGl0ZVRy
YW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAg
ICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgdGVtcF9zdG9yZSA9IE1FTU9S
WTsiX3MpLmV4ZWN1dGVDb21tYW5kKCkpCisgICAgICAgIGlmICghZXhlY3V0ZUNvbW1hbmQoIlBS
QUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyJfcykpCiAgICAgICAgICAgICBMT0dfRVJST1IoIlNR
TGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3RvcmUgdG8gbWVtb3J5Iik7CiAgICAg
fQogCkBAIC0xOTcsMTAgKzE5NywxMCBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjp1c2VXQUxKb3Vy
bmFsTW9kZSgpCiB7CiAgICAgbV91c2VXQUwgPSB0cnVlOwogICAgIHsKLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHdhbFN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBqb3VybmFsX21vZGU9V0FMOyJf
cyk7Ci0gICAgICAgIGlmICh3YWxTdGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgIGF1dG8gd2FsU3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJB
R01BIGpvdXJuYWxfbW9kZT1XQUw7Il9zKTsKKyAgICAgICAgaWYgKHdhbFN0YXRlbWVudCAmJiB3
YWxTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAjaWZuZGVmIE5ERUJVRwotICAg
ICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAg
ICAgICAgICAgIFN0cmluZyBtb2RlID0gd2FsU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwog
ICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtb2RlLCAid2Fs
IikpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJqb3VybmFsX21vZGUgb2YgZGF0YWJhc2Ug
c2hvdWxkIGJlICdXQUwnLCBidXQgaXMgJyVzJyIsIG1vZGUudXRmOCgpLmRhdGEoKSk7CiAjZW5k
aWYKQEAgLTIxMCw5ICsyMTAsOSBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjp1c2VXQUxKb3VybmFs
TW9kZSgpCiAKICAgICB7CiAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9D
b3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNoZWNr
cG9pbnRTdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgd2FsX2NoZWNrcG9pbnQoVFJVTkNBVEUpIl9z
KTsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMCkpCisgICAgICAgIGF1dG8gY2hlY2twb2ludFN0YXRlbWVudCA9IHByZXBhcmVTdGF0
ZW1lbnQoIlBSQUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FURSkiX3MpOworICAgICAgICBpZiAo
Y2hlY2twb2ludFN0YXRlbWVudCAmJiBjaGVja3BvaW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSkKICAgICAgICAgICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGUgZGF0YWJh
c2UgY2hlY2twb2ludCBpcyBibG9ja2VkIik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
TE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGNoZWNrcG9pbnQ6ICVzIiwgbGFz
dEVycm9yTXNnKCkpOwpAQCAtMjcyLDggKzI3Miw4IEBAIGludDY0X3QgU1FMaXRlRGF0YWJhc2U6
Om1heGltdW1TaXplKCkKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9y
aXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKLSAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBtYXhfcGFnZV9jb3VudCJfcyk7
Ci0gICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbWF4X3BhZ2Vf
Y291bnQiX3MpOworICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQt
PmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsK
ICAgICB9CiAKQEAgLTI5Myw5ICsyOTMsOCBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpzZXRNYXhp
bXVtU2l6ZShpbnQ2NF90IHNpemUpCiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVy
TG9jayk7CiAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCp0aGlzLCBtYWtlU3RyaW5nKCJQUkFHTUEgbWF4X3BhZ2VfY291bnQgPSAi
LCBuZXdNYXhQYWdlQ291bnQpKTsKLSAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOwotICAgIGlmIChz
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSBtYXhfcGFnZV9jb3VudCA9ICIsIG5ld01h
eFBhZ2VDb3VudCkpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ST1cpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBtYXhpbXVtIHNp
emUgb2YgZGF0YWJhc2UgdG8gJWxsaSBieXRlcyIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2l6
ZSkpOwogCiAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKQEAgLTMxMCw4ICszMDksOCBAQCBp
bnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOwogICAg
ICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBw
YWdlX3NpemUiX3MpOwotICAgICAgICBtX3BhZ2VTaXplID0gc3RhdGVtZW50LmdldENvbHVtbklu
dCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEg
cGFnZV9zaXplIl9zKTsKKyAgICAgICAgbV9wYWdlU2l6ZSA9IHN0YXRlbWVudCA/IHN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgCiAgICAgICAgIGVuYWJsZUF1dGhvcml6
ZXIodHJ1ZSk7CiAgICAgfQpAQCAtMzI3LDggKzMyNiw4IEBAIGludDY0X3QgU1FMaXRlRGF0YWJh
c2U6OmZyZWVTcGFjZVNpemUoKQogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6
ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CiAgICAgICAgIC8vIE5v
dGU6IGZyZWVsaXN0X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUgMy40LjEuCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgZnJlZWxpc3RfY291bnQiX3Mp
OwotICAgICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwor
ICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmcmVlbGlz
dF9jb3VudCJfcyk7CisgICAgICAgIGZyZWVsaXN0Q291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1l
bnQtPmdldENvbHVtbkludDY0KDApIDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVl
KTsKICAgICB9CiAKQEAgLTM0Miw4ICszNDEsOCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjp0
b3RhbFNpemUoKQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVy
TG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOwotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIHBhZ2VfY291bnQiX3MpOwotICAgICAg
ICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8g
c3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBhZ2VfY291bnQiX3MpOworICAg
ICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDAp
IDogMDsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKICAgICB9CiAKQEAgLTM3MSwx
NCArMzcwLDIyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEJ1c3lIYW5kbGVyKGludCgqaGFu
ZGxlcikodm9pZCosIGludCkpCiAgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkJ1c3kgaGFuZGxl
ciBzZXQgb24gbm9uLW9wZW4gZGF0YWJhc2UiKTsKIH0KIAotYm9vbCBTUUxpdGVEYXRhYmFzZTo6
ZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCitib29sIFNRTGl0ZURhdGFiYXNlOjpl
eGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIHF1ZXJ5KQogewotICAgIHJldHVybiBTUUxpdGVT
dGF0ZW1lbnQoKnRoaXMsIHNxbCkuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3Rh
dGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOworfQorCitib29sIFNRTGl0ZURhdGFiYXNlOjpleGVj
dXRlQ29tbWFuZChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBw
cmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVu
dC0+ZXhlY3V0ZUNvbW1hbmQoKTsKIH0KIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6cmV0dXJuc0F0
TGVhc3RPbmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzcWwpCiB7Ci0gICAgcmV0dXJuIFNRTGl0ZVN0
YXRlbWVudCgqdGhpcywgc3FsKS5yZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgpOworICAgIGF1dG8g
c3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIHJldHVybiBzdGF0ZW1lbnQg
JiYgc3RhdGVtZW50LT5yZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgpOwogfQogCiBib29sIFNRTGl0
ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRhYmxlbmFtZSkKQEAgLTM4Niwx
OCArMzkzLDE1IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKGNvbnN0IFN0cmlu
ZyYgdGFibGVuYW1lKQogICAgIGlmICghaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFN0cmluZyBzdGF0ZW1lbnQgPSAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVy
IFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1lID0gJyIgKyB0YWJsZW5hbWUgKyAiJzsiOwot
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqdGhpcywgc3RhdGVtZW50KTsKLSAgICBzcWwucHJl
cGFyZSgpOwotICAgIHJldHVybiBzcWwuc3RlcCgpID09IFNRTElURV9ST1c7CisgICAgYXV0byBz
dGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0
ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAnIiArIHRhYmxlbmFtZSArICInOyJf
cyk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XOwogfQogCiB2b2lkIFNRTGl0ZURhdGFiYXNlOjpjbGVhckFsbFRhYmxlcygpCiB7Ci0gICAg
U3RyaW5nIHF1ZXJ5ID0gIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
PSd0YWJsZSc7Il9zOwogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlczsKLSAgICBpZiAoIVNRTGl0
ZVN0YXRlbWVudCgqdGhpcywgcXVlcnkpLnJldHVyblRleHRSZXN1bHRzKDAsIHRhYmxlcykpIHsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCB8fCAhc3RhdGVtZW50LT5yZXR1cm5UZXh0UmVzdWx0cygwLCB0YWJsZXMpKSB7CiAgICAgICAg
IExPRyhTUUxEYXRhYmFzZSwgIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmcm9t
IGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01ODMsMTAgKzU4NywxMCBA
QCBib29sIFNRTGl0ZURhdGFiYXNlOjppc0F1dG9Db21taXRPbigpIGNvbnN0CiAKIGJvb2wgU1FM
aXRlRGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpCiB7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBhdXRvX3ZhY3V1bSJfcyk7Ci0gICAg
aW50IGF1dG9WYWN1dW1Nb2RlID0gc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBpbnQg
YXV0b1ZhY3V1bU1vZGUgPSAwOworICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0
ZW1lbnQoIlBSQUdNQSBhdXRvX3ZhY3V1bSJfcykpCisgICAgICAgIGF1dG9WYWN1dW1Nb2RlID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgaW50IGVycm9yID0gbGFzdEVycm9yKCk7
Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7CiAKICAgICAvLyBDaGVjayBpZiB3ZSBnb3QgYW4g
ZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhlIGF1dG9fdmFjdXVtIGZs
YWcuCiAgICAgLy8gSWYgd2UgZ290IGEgU1FMSVRFX0JVU1kgZXJyb3IsIHRoZW4gdGhlcmUncyBw
cm9iYWJseSBhbm90aGVyIHRyYW5zYWN0aW9uIGluCkBAIC02NDMsNCArNjQ3LDcyIEBAIHZvaWQg
U1FMaXRlRGF0YWJhc2U6OnJlbGVhc2VNZW1vcnkoKQogICAgIHNxbGl0ZTNfZGJfcmVsZWFzZV9t
ZW1vcnkobV9kYik7CiB9CiAKK3N0YXRpYyBFeHBlY3RlZDxzcWxpdGUzX3N0bXQqLCBpbnQ+IGNv
bnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25z
dCBjaGFyKiBxdWVyeSwgc2l6ZV90IHF1ZXJ5TGVuZ3RoKQoreworICAgIExvY2tIb2xkZXIgZGF0
YWJhc2VMb2NrKGRhdGFiYXNlLmRhdGFiYXNlTXV0ZXgoKSk7CisgICAgTE9HKFNRTERhdGFiYXNl
LCAiU1FMIC0gcHJlcGFyZSAtICVzIiwgcXVlcnkpOworCisgICAgLy8gUGFzcyB0aGUgbGVuZ3Ro
IG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciB0byBzcWxpdGUzX3By
ZXBhcmVfdjI7CisgICAgLy8gdGhpcyBsZXRzIFNRTGl0ZSBhdm9pZCBhbiBleHRyYSBzdHJpbmcg
Y29weS4KKyAgICBzaXplX3QgbGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciA9IHF1ZXJ5TGVu
Z3RoICsgMTsKKworICAgIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50IHsgbnVsbHB0ciB9OworICAg
IGNvbnN0IGNoYXIqIHRhaWwgPSBudWxscHRyOworICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJl
cGFyZV92MihkYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCksIHF1ZXJ5LCBsZW5ndGhJbmNsdWRpbmdO
dWxsQ2hhcmFjdGVyLCAmc3RhdGVtZW50LCAmdGFpbCk7CisgICAgaWYgKGVycm9yICE9IFNRTElU
RV9PSykKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19wcmVwYXJlMTYgZmFpbGVk
ICglaSlcbiVzXG4lcyIsIGVycm9yLCBxdWVyeSwgc3FsaXRlM19lcnJtc2coZGF0YWJhc2Uuc3Fs
aXRlM0hhbmRsZSgpKSk7CisKKyAgICBpZiAodGFpbCAmJiAqdGFpbCkKKyAgICAgICAgZXJyb3Ig
PSBTUUxJVEVfRVJST1I7CisKKyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IHNxbGl0ZTNfZmluYWxpemUoc3RhdGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGVtZW50OworfQorCitFeHBlY3Rl
ZDxTUUxpdGVTdGF0ZW1lbnQsIGludD4gU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0gcXVlcnlT
dHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0g
Y29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBxdWVyeS5s
ZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRlbWVudDogRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50ICV7cHVibGljfXMiLCBxdWVyeS5kYXRhKCkpOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0K
KyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50IHsgKnRoaXMsIHNxbFN0YXRlbWVudC52YWx1ZSgp
IH07Cit9CisKK0V4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6
cHJlcGFyZVN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpCit7CisgICAgYXV0byBzcWxTdGF0
ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5jaGFyYWN0
ZXJzKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJl
U3RhdGVtZW50OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5
LmNoYXJhY3RlcnMoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1l
bnQuZXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywg
c3FsU3RhdGVtZW50LnZhbHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8VW5pcXVlUmVmPFNRTGl0ZVN0
YXRlbWVudD4sIGludD4gU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KGNvbnN0
IFN0cmluZyYgcXVlcnlTdHJpbmcpCit7CisgICAgQ1N0cmluZyBxdWVyeSA9IHF1ZXJ5U3RyaW5n
LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKKyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0
cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5LmRhdGEoKSwgcXVlcnkubGVuZ3Ro
KCkpOworICAgIGlmICghc3FsU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50OiBGYWls
ZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3IoKSk7CisgICAgfQor
ICAgIHJldHVybiBVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PigqbmV3IFNRTGl0ZVN0YXRlbWVu
dCgqdGhpcywgc3FsU3RhdGVtZW50LnZhbHVlKCkpKTsKK30KKworRXhwZWN0ZWQ8VW5pcXVlUmVm
PFNRTGl0ZVN0YXRlbWVudD4sIGludD4gU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVt
ZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0
cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5LmNoYXJhY3RlcnMoKSwgcXVlcnku
bGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50
OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmNoYXJhY3Rl
cnMoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3Io
KSk7CisgICAgfQorICAgIHJldHVybiBVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50PigqbmV3IFNR
TGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsU3RhdGVtZW50LnZhbHVlKCkpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaAppbmRleCBkM2QwNjk2ZGJmNWIwZjBkNjYwYjcwODUyMGZhNjNhOTk4MDI4ZTU3Li5j
MDQ1ZmU1OTNkNzk5ZDUyMDgwZGRiOTM5NmM0OTM0MjEzZTdjZDgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29v
ZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4LDggKzI4LDEwIEBACiAKICNp
bmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02MSw2ICs2Myw4
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUxhc3RDaGFuZ2VzQ291
bnQoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3Ry
aW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZChBU0NJSUxpdGVy
YWwpOworCiAgICAgYm9vbCByZXR1cm5zQXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJpbmcmKTsK
ICAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHRhYmxlRXhpc3RzKGNvbnN0IFN0cmluZyYp
OwpAQCAtNzAsNiArNzQsMTEgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgdHJhbnNhY3Rpb25J
blByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7IH0KIAor
ICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBwcmVwYXJl
U3RhdGVtZW50KGNvbnN0IFN0cmluZyYgcXVlcnkpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVj
dGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBx
dWVyeSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VW5pcXVlUmVmPFNRTGl0ZVN0YXRl
bWVudD4sIGludD4gcHJlcGFyZUhlYXBTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8VW5pcXVlUmVmPFNRTGl0ZVN0YXRlbWVudD4sIGlu
dD4gcHJlcGFyZUhlYXBTdGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KTsKKwogICAgIC8vIEFi
b3J0cyB0aGUgY3VycmVudCBkYXRhYmFzZSBvcGVyYXRpb24uIFRoaXMgaXMgdGhyZWFkIHNhZmUu
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRlcnJ1cHQoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAppbmRleCBkZWE4ZmZmOGE1ZWE0
ZmRlNDE2OGJkOWQzZWY0ZmRlMmVjNmY1NWE4Li40OGY5YWVlMmQ3MWQ5MWZiNDU3MDIyMmQ0ZTVi
MDc4OGEwYmUxNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw4NyArNDEsNDEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TUUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudChTUUxpdGVEYXRhYmFz
ZSYgZGIsIGNvbnN0IFN0cmluZyYgc3FsKQorU1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1l
bnQoU1FMaXRlRGF0YWJhc2UmIGRiLCBzcWxpdGUzX3N0bXQqIHN0YXRlbWVudCkKICAgICA6IG1f
ZGF0YWJhc2UoZGIpCi0gICAgLCBtX3F1ZXJ5KHNxbCkKLSAgICAsIG1fc3RhdGVtZW50KDApCisg
ICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiB7CisgICAgQVNTRVJUKHN0YXRlbWVudCk7CiB9
CiAKLVNRTGl0ZVN0YXRlbWVudDo6flNRTGl0ZVN0YXRlbWVudCgpCitTUUxpdGVTdGF0ZW1lbnQ6
OlNRTGl0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmJiBvdGhlcikKKyAgICA6IG1fZGF0YWJh
c2Uob3RoZXIuZGF0YWJhc2UoKSkKKyAgICAsIG1fc3RhdGVtZW50KHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9zdGF0ZW1lbnQsIG51bGxwdHIpKQogewotICAgIGZpbmFsaXplKCk7CiB9CiAKLWludCBT
UUxpdGVTdGF0ZW1lbnQ6OnByZXBhcmUoKQorU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVt
ZW50KCkKIHsKLSAgICBBU1NFUlQoIW1faXNQcmVwYXJlZCk7Ci0KLSAgICBMb2NrSG9sZGVyIGRh
dGFiYXNlTG9jayhtX2RhdGFiYXNlLmRhdGFiYXNlTXV0ZXgoKSk7Ci0KLSAgICBDU3RyaW5nIHF1
ZXJ5ID0gbV9xdWVyeS5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7Ci0gICAgCi0gICAgTE9HKFNR
TERhdGFiYXNlLCAiU1FMIC0gcHJlcGFyZSAtICVzIiwgcXVlcnkuZGF0YSgpKTsKLQotICAgIC8v
IFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluY2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0
ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOwotICAgIC8vIHRoaXMgbGV0cyBTUUxpdGUgYXZvaWQg
YW4gZXh0cmEgc3RyaW5nIGNvcHkuCi0gICAgc2l6ZV90IGxlbmd0aEluY2x1ZGluZ051bGxDaGFy
YWN0ZXIgPSBxdWVyeS5sZW5ndGgoKSArIDE7Ci0KLSAgICBjb25zdCBjaGFyKiB0YWlsID0gbnVs
bHB0cjsKLSAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIobV9kYXRhYmFzZS5zcWxp
dGUzSGFuZGxlKCksIHF1ZXJ5LmRhdGEoKSwgbGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3Rlciwg
Jm1fc3RhdGVtZW50LCAmdGFpbCk7Ci0KLSAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX09LKQotICAg
ICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxpdGUzX3ByZXBhcmUxNiBmYWlsZWQgKCVpKVxuJXNc
biVzIiwgZXJyb3IsIHF1ZXJ5LmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxp
dGUzSGFuZGxlKCkpKTsKLQotICAgIGlmICh0YWlsICYmICp0YWlsKQotICAgICAgICBlcnJvciA9
IFNRTElURV9FUlJPUjsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVkID0g
ZXJyb3IgPT0gU1FMSVRFX09LOwotI2VuZGlmCi0gICAgcmV0dXJuIGVycm9yOworICAgIHNxbGl0
ZTNfZmluYWxpemUobV9zdGF0ZW1lbnQpOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpzdGVw
KCkKIHsKICAgICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhtX2RhdGFiYXNlLmRhdGFiYXNlTXV0
ZXgoKSk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gU1FMSVRFX09L
OwotCiAgICAgLy8gVGhlIGRhdGFiYXNlIG5lZWRzIHRvIHVwZGF0ZSBpdHMgbGFzdCBjaGFuZ2Vz
IGNvdW50IGJlZm9yZSBlYWNoIHN0YXRlbWVudAogICAgIC8vIGluIG9yZGVyIHRvIGNvbXB1dGUg
cHJvcGVybHkgdGhlIGxhc3RDaGFuZ2VzKCkgcmV0dXJuIHZhbHVlLgogICAgIG1fZGF0YWJhc2Uu
dXBkYXRlTGFzdENoYW5nZXNDb3VudCgpOwogCi0gICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0g
c3RlcCAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgaW50IGVycm9yID0gc3Fs
aXRlM19zdGVwKG1fc3RhdGVtZW50KTsKLSAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX0RPTkUgJiYg
ZXJyb3IgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxpdGUz
X3N0ZXAgZmFpbGVkICglaSlcblF1ZXJ5IC0gJXNcbkVycm9yIC0gJXMiLCAKLSAgICAgICAgICAg
IGVycm9yLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNl
LnNxbGl0ZTNIYW5kbGUoKSkpOwotICAgIH0KKyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX0RPTkUg
JiYgZXJyb3IgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRl
M19zdGVwIGZhaWxlZCAoJWkpXG5FcnJvciAtICVzIiwgZXJyb3IsIHNxbGl0ZTNfZXJybXNnKG1f
ZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7CiAKICAgICByZXR1cm4gZXJyb3I7CiB9Ci0gICAg
Ci1pbnQgU1FMaXRlU3RhdGVtZW50OjpmaW5hbGl6ZSgpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICBtX2lzUHJlcGFyZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIGlmICghbV9zdGF0ZW1lbnQp
Ci0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0g
ZmluYWxpemUgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgIGludCByZXN1bHQg
PSBzcWxpdGUzX2ZpbmFsaXplKG1fc3RhdGVtZW50KTsKLSAgICBtX3N0YXRlbWVudCA9IDA7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6cmVzZXQoKSAKIHsK
LSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAg
ICByZXR1cm4gU1FMSVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHJlc2V0IC0g
JXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAgICBpbnQgc3RhdHVzID0gc3FsaXRlM19y
ZXNldChtX3N0YXRlbWVudCk7CiAgICAgc3FsaXRlM19jbGVhcl9iaW5kaW5ncyhtX3N0YXRlbWVu
dCk7CiAgICAgcmV0dXJuIHN0YXR1czsKQEAgLTEyOSw0MiArODMsMjEgQEAgaW50IFNRTGl0ZVN0
YXRlbWVudDo6cmVzZXQoKQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0ZUNvbW1hbmQo
KQogewotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlmIChz
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGl6ZSgpOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGVwKCkgPT0gU1FMSVRFX0RPTkU7CiB9CiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50
OjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBw
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7Ci0gICAgaWYgKHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
IGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZmluYWxpemUo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLQorICAgIHJldHVybiBzdGVwKCkgPT0gU1FMSVRFX1JPVzsK
IH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCB2b2lk
KiBibG9iLCBpbnQgc2l6ZSkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NF
UlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8
PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAgICAgQVNTRVJUKGJsb2IgfHwgIXNpemUpOwogICAg
IEFTU0VSVChzaXplID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0
dXJuIFNRTElURV9FUlJPUjsKLQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfYmxvYihtX3N0YXRl
bWVudCwgaW5kZXgsIGJsb2IsIHNpemUsIFNRTElURV9UUkFOU0lFTlQpOwogfQogCkBAIC0xODUs
NyArMTE4LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEJsb2IoaW50IGluZGV4LCBjb25z
dCBTdHJpbmcmIHRleHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAg
IEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjA0LDcgKzEzNiw2IEBAIGludCBT
UUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiB7
Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50
KCkpOwogCkBAIC0yMTMsNyArMTQ0LDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludChp
bnQgaW5kZXgsIGludCBpbnRlZ2VyKQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQo
aW50IGluZGV4LCBpbnQ2NF90IGludGVnZXIpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7
CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yMjIsNyArMTUyLDYgQEAg
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2Vy
KQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlIG51
bWJlcikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAw
KTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1l
dGVyQ291bnQoKSk7CiAKQEAgLTIzMSw3ICsxNjAsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpi
aW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlIG51bWJlcikKIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZE51bGwoaW50IGluZGV4KQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAg
IEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjQ5LDI2ICsxNzcsMTkgQEAgaW50
IFNRTGl0ZVN0YXRlbWVudDo6YmluZFZhbHVlKGludCBpbmRleCwgY29uc3QgU1FMVmFsdWUmIHZh
bHVlKQogCiB1bnNpZ25lZCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRQYXJhbWV0ZXJDb3VudCgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkK
LSAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9wYXJhbWV0ZXJfY291
bnQobV9zdGF0ZW1lbnQpOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgp
CiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVu
dCk7CiB9CiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKIHsK
ICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlm
IChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzgsMTkgKzE5OSwxNCBAQCBib29sIFNRTGl0
ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6
aXNDb2x1bW5EZWNsYXJlZEFzQmxvYihpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkgewotICAgICAgICBpZiAocHJlcGFyZSgpICE9IFNRTElU
RV9PSykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAgICAgcmV0dXJuIGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcoc3FsaXRlM19jb2x1bW5fZGVjbHR5
cGUobV9zdGF0ZW1lbnQsIGNvbCkpLCAiYmxvYiIpOwogfQogCiBTdHJpbmcgU1FMaXRlU3RhdGVt
ZW50OjpnZXRDb2x1bW5OYW1lKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAg
ICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghaGFzU3RhcnRl
ZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihz
cWxpdGUzX2NvbHVtbl9uYW1lMTYobV9zdGF0ZW1lbnQsIGNvbCkpKTsKQEAgLTI5OSw5ICsyMTUs
OCBAQCBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5OYW1lKGludCBjb2wpCiBTUUxW
YWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVlKGludCBjb2wpCiB7CiAgICAgQVNT
RVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFy
ZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzMwLDkgKzI0NSw4IEBAIFNRTFZhbHVlIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCkKIFN0cmluZyBTUUxpdGVTdGF0ZW1l
bnQ6OmdldENvbHVtblRleHQoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAg
IGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFoYXNTdGFydGVk
U3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNx
bGl0ZTNfY29sdW1uX3RleHQxNihtX3N0YXRlbWVudCwgY29sKSksIHNxbGl0ZTNfY29sdW1uX2J5
dGVzMTYobV9zdGF0ZW1lbnQsIGNvbCkgLyBzaXplb2YoVUNoYXIpKTsKQEAgLTM0MSw5ICsyNTUs
OCBAQCBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0KGludCBjb2wpCiBkb3Vi
bGUgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCkKIHsKICAgICBBU1NF
UlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJl
QW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gMC4wOworICAgIGlm
ICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAg
IHJldHVybiAwLjA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1
cm4gMC4wOwogICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9kb3VibGUobV9zdGF0ZW1lbnQsIGNv
bCk7CkBAIC0zNTIsOSArMjY1LDggQEAgZG91YmxlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1u
RG91YmxlKGludCBjb2wpCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5JbnQoaW50IGNv
bCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAg
ICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9pbnQobV9zdGF0ZW1l
bnQsIGNvbCk7CkBAIC0zNjMsOSArMjc1LDggQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29s
dW1uSW50KGludCBjb2wpCiBpbnQ2NF90IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQo
aW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQp
Ci0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBj
b2wpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzcWxpdGUzX2NvbHVtbl9pbnQ2NCht
X3N0YXRlbWVudCwgY29sKTsKQEAgLTM3NSw3ICsyODYsNyBAQCBTdHJpbmcgU1FMaXRlU3RhdGVt
ZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49
IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRF
X1JPVykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGNvbHVtbkNvdW50KCkg
PD0gY29sKQpAQCAtMzk3LDcgKzMwOCw3IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1
bW5CbG9iQXNWZWN0b3IoaW50IGNvbCwgVmVjdG9yPGNoYXI+JiByZXN1bHQpCiB7CiAgICAgQVNT
RVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVw
KCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTQyMyw3ICszMzQsNyBAQCB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0
Q29sdW1uQmxvYkFzVmVjdG9yKGludCBjb2wsIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQogewog
ICAgIEFTU0VSVChjb2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVB
bmRTdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkg
JiYgc3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC00NTEsMTkgKzM2MiwxNiBAQCBib29sIFNRTGl0ZVN0YXRl
bWVudDo6cmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0cmluZz4mIHYpCiAKICAg
ICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7
Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaGFzU3RhcnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3
aGlsZSAoc3RlcCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtblRl
eHQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxh
c3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAg
ICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFz
ZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0
YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRSZXN1bHRzOiBFcnJvciByZWFkaW5n
IHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC00NzEsMTkgKzM3OSwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50
UmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8aW50PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAg
ICBpZiAobV9zdGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzU3RhcnRl
ZFN0ZXBwaW5nKCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAoc3RlcCgpID09IFNR
TElURV9ST1cpCiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludChjb2wpKTsKICAgICBib29s
IHJlc3VsdCA9IHRydWU7CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFz
ZSwgIkVycm9yIHJlYWRpbmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVy
eS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRl
bWVudDo6cmV0dXJuSW50UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQot
ICAgIGZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDkxLDE5ICszOTYs
MTYgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludDY0UmVzdWx0cyhpbnQgY29sLCBW
ZWN0b3I8aW50NjRfdD4mIHYpCiB7CiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVt
ZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQor
ICAgICAgICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAg
ICAgICB2LmFwcGVuZChnZXRDb2x1bW5JbnQ2NChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRy
dWU7CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJl
YWRpbmcgcmVzdWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJu
SW50NjRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxp
emUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MTEsMjUgKzQxMywyMiBAQCBib29s
IFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8ZG91
YmxlPiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9zdGF0ZW1lbnQpCi0gICAg
ICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzU3RhcnRlZFN0ZXBwaW5nKCkpCisgICAgICAgIHJl
c2V0KCk7CiAKICAgICB3aGlsZSAoc3RlcCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIHYuYXBw
ZW5kKGdldENvbHVtbkRvdWJsZShjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAg
aWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVz
dWx0cyBmcm9tIGRhdGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVz
dWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZpbmFsaXplKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzRXhwaXJlZCgp
Citib29sIFNRTGl0ZVN0YXRlbWVudDo6aGFzU3RhcnRlZFN0ZXBwaW5nKCkKIHsKLSAgICByZXR1
cm4gIW1fc3RhdGVtZW50OworICAgIHJldHVybiBzcWxpdGUzX3N0bXRfYnVzeShtX3N0YXRlbWVu
dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCBhN2FjZGU1Y2ZjNWIyZDM1NjJiMWZiNTFm
ZDZhNzFiZDk1Y2NlNDA4Li42MzUxMmJiNmViNDlhNmVlMTllNzFmMWM2N2IxZmU4ZjI5ZjY1Yzhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDEwICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNRTGl0
ZVN0YXRlbWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMaXRlU3RhdGVtZW50KTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU1FM
aXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgflNRTGl0ZVN0YXRlbWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0
YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmJik7CiAgICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgaW50
IHByZXBhcmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgYmluZEJsb2IoaW50IGluZGV4LCBj
b25zdCB2b2lkKiBibG9iLCBpbnQgc2l6ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJpbmRC
bG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGJp
bmRUZXh0KGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CkBAIC01MCwyMyArNDksMTggQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGJpbmRQYXJhbWV0ZXJDb3VudCgpIGNv
bnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHN0ZXAoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBpbnQgZmluYWxpemUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcmVzZXQoKTsKICAgICAK
LSAgICBpbnQgcHJlcGFyZUFuZFN0ZXAoKSB7IGlmIChpbnQgZXJyb3IgPSBwcmVwYXJlKCkpIHJl
dHVybiBlcnJvcjsgcmV0dXJuIHN0ZXAoKTsgfQotICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVw
cywgYW5kIGZpbmFsaXplcyB0aGUgcXVlcnkuCisgICAgLy8gc3RlcHMgYW5kIGZpbmFsaXplcyB0
aGUgcXVlcnkuCiAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGFsbCAzIHN0ZXBzIHN1Y2NlZWQgd2l0
aCBzdGVwKCkgcmV0dXJuaW5nIFNRTElURV9ET05FCiAgICAgLy8gcmV0dXJucyBmYWxzZSBvdGhl
cndpc2UgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZUNvbW1hbmQoKTsKICAgICAK
LSAgICAvLyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMuICAKKyAgICAvLyBzdGVwcywg
YW5kIGZpbmFsaXplcy4KICAgICAvLyByZXR1cm5zIHRydWUgaXMgc3RlcCgpIHJldHVybnMgU1FM
SVRFX1JPVwogICAgIC8vIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgYm9vbCByZXR1cm5z
QXRMZWFzdE9uZVJlc3VsdCgpOwogCi0gICAgYm9vbCBpc0V4cGlyZWQoKTsKLQogICAgIC8vIFJl
dHVybnMgLTEgb24gbGFzdC1zdGVwIGZhaWxpbmcuICBPdGhlcndpc2UsIHJldHVybnMgbnVtYmVy
IG9mIHJvd3MKICAgICAvLyByZXR1cm5lZCBpbiB0aGUgbGFzdCBzdGVwKCkKICAgICBpbnQgY29s
dW1uQ291bnQoKTsKQEAgLTkwLDE1ICs4NCwxNSBAQCBwdWJsaWM6CiAKICAgICBTUUxpdGVEYXRh
YmFzZSYgZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlOyB9CiAgICAgCi0gICAgY29uc3Qg
U3RyaW5nJiBxdWVyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcnk7IH0KLSAgICAKIHByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFNRTGl0ZURhdGFiYXNlOworICAgIFNRTGl0ZVN0YXRlbWVudChT
UUxpdGVEYXRhYmFzZSYsIHNxbGl0ZTNfc3RtdCopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgaGFzIGJlZW4gc3RlcHBlZCBhdCBsZWFzdCBvbmNlIHVz
aW5nIHN0ZXAoKSBidXQgaGFzIG5laXRoZXIgcnVuIHRvIGNvbXBsZXRpb24gKHJldHVybmVkIFNR
TElURV9ET05FIGZyb20gc3RlcCgpKSBub3IgYmVlbiByZXNldCgpLgorICAgIGJvb2wgaGFzU3Rh
cnRlZFN0ZXBwaW5nKCk7CisKICAgICBTUUxpdGVEYXRhYmFzZSYgbV9kYXRhYmFzZTsKLSAgICBT
dHJpbmcgbV9xdWVyeTsKICAgICBzcWxpdGUzX3N0bXQqIG1fc3RhdGVtZW50OwotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgYm9vbCBtX2lzUHJlcGFyZWQgeyBmYWxzZSB9OwotI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1NlYXJjaFBvcHVwTWVudURCLmNwcAppbmRleCBmOWMyNGI4ZWQ1NzE4MmVhNTc4ODdhMDAz
MDdlZDhkYjhhM2QwZmZkLi5hMTkzOWFhZDFiMGM4NmYwMzVkYTAwOTI1ZmZlY2YxNzlkOTY3ZGJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51
REIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVE
Qi5jcHAKQEAgLTEzMCwyNSArMTMwLDI1IEBAIGJvb2wgU2VhcmNoUG9wdXBNZW51REI6OmNoZWNr
RGF0YWJhc2VWYWxpZGl0eSgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJTZWFy
Y2giKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGludGVn
cml0eShtX2RhdGFiYXNlLCAiUFJBR01BIHF1aWNrX2NoZWNrOyIpOwotICAgIGlmIChpbnRlZ3Jp
dHkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gaW50ZWdyaXR5ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgcXVpY2tfY2hlY2s7Il9zKTsKKyAgICBpZiAo
IWludGVncml0eSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlIGRhdGFi
YXNlIGludGVncml0eSBjaGVjayIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAgIGludCByZXN1bHRDb2Rl
ID0gaW50ZWdyaXR5LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMSVRFX1JPVykg
ewogICAgICAgICBMT0dfRVJST1IoIkludGVncml0eSBxdWlja19jaGVjayBzdGVwIHJldHVybmVk
ICVkIiwgcmVzdWx0Q29kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBp
bnQgY29sdW1ucyA9IGludGVncml0eS5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2x1bW5zID0g
aW50ZWdyaXR5LT5jb2x1bW5Db3VudCgpOwogICAgIGlmIChjb2x1bW5zICE9IDEpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJSZWNlaXZlZCAlaSBjb2x1bW5zIHBlcmZvcm1pbmcgaW50ZWdyaXR5IGNo
ZWNrLCBzaG91bGQgYmUgMSIsIGNvbHVtbnMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgU3RyaW5nIHJlc3VsdFRleHQgPSBpbnRlZ3JpdHkuZ2V0Q29sdW1uVGV4dCgwKTsK
KyAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS0+Z2V0Q29sdW1uVGV4dCgwKTsKIAog
ICAgIGlmIChyZXN1bHRUZXh0ICE9ICJvayIpIHsKICAgICAgICAgTE9HX0VSUk9SKCJTZWFyY2gg
YXV0b3NhdmUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCAtICVzIiwgcmVzdWx0VGV4
dC5hc2NpaSgpLmRhdGEoKSk7CkBAIC0yMjQsMTcgKzIyNCwxOSBAQCBib29sIFNlYXJjaFBvcHVw
TWVudURCOjpvcGVuRGF0YWJhc2UoKQogCiB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjpjbG9zZURh
dGFiYXNlKCkKIHsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBtX2xv
YWRTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1faW5z
ZXJ0U2VhcmNoVGVybVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAgbV9yZW1vdmVTZWFy
Y2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1fZGF0YWJhc2Uu
Y2xvc2UoKTsKLSAgICB9CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2xvYWRTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQgPSBudWxscHRy
OworICAgIG1faW5zZXJ0U2VhcmNoVGVybVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9yZW1v
dmVTZWFyY2hUZXJtc0Zvck5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZGF0YWJhc2Uu
Y2xvc2UoKTsKIH0KIAogdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6dmVyaWZ5U2NoZW1hVmVyc2lv
bigpCiB7Ci0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOwor
ICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkg
OiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjcxLDIzICsyNzMsMjUgQEAgdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6Y2hlY2tTUUxp
dGVSZXR1cm5Db2RlKGludCBhY3R1YWwpCiAKIGludCBTZWFyY2hQb3B1cE1lbnVEQjo6ZXhlY3V0
ZVNpbXBsZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvcikKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9
IHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHNxbCk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRl
bWVudC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlbWVudC5lcnJvcigpOworICAgIH0K
IAotICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpOworICAgIGludCByZXQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKICAgICBpZiAocmV0ICE9IFNRTElURV9PSyAmJiByZXQgIT0gU1FMSVRFX0RP
TkUgJiYgcmV0ICE9IFNRTElURV9ST1cgJiYgIWlnbm9yZUVycm9yKQogICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0KICAgICByZXR1cm4gcmV0OwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiBTZWFyY2hQb3B1cE1lbnVEQjo6Y3JlYXRlUHJl
cGFyZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCitzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRl
U3RhdGVtZW50PiBTZWFyY2hQb3B1cE1lbnVEQjo6Y3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQoQVND
SUlMaXRlcmFsIHNxbCkKIHsKLSAgICBhdXRvIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQtPnBy
ZXBhcmUoKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IFNRTElURV9PSyk7Ci0gICAg
cmV0dXJuIHN0YXRlbWVudDsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsKKyAgICBpZiAoIXN0
YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRlbWVudC52
YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oCmluZGV4IGEyNTVjZjQyNmU3YTdiOTRlNzZj
Yzg0NjVhZGYxODI0NGJjZmU2MzYuLmY5MTNmNDNlYTVkMGE0Zjc0MzFhNzkyYjE2ODM4MGQ3OWQ3
MmE2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1
cE1lbnVEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1l
bnVEQi5oCkBAIC01MSw3ICs1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2ZXJpZnlTY2hlbWFW
ZXJzaW9uKCk7CiAgICAgaW50IGV4ZWN1dGVTaW1wbGVTcWwoY29uc3QgU3RyaW5nJiBzcWwsIGJv
b2wgaWdub3JlRXJyb3IgPSBmYWxzZSk7CiAgICAgdm9pZCBjaGVja1NRTGl0ZVJldHVybkNvZGUo
aW50IGFjdHVhbCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gY3JlYXRl
UHJlcGFyZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTUUxpdGVTdGF0ZW1lbnQ+IGNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBz
cWwpOwogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VGaWxlbmFtZTsKICAgICBTUUxpdGVEYXRhYmFz
ZSBtX2RhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAppbmRleCA4OTJjM2Y0OWU5
MDE0YTM1ZmU5Mjk4NGVmOWEyOTA0YTdiZGVkNTYwLi5iMGM3MTYxYTgwNmE4NjhlYzRmZjQ0NzY1
M2JiODUzZmMwOTY4NDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcApAQCAtMjg1LDEx
ICsyODUsMTEgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29y
ZHNUYWJsZSgpCiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBG
ZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBG
Uk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7Ci0gICAgICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAgIHJldHVybiAi
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29y
ZHMgdGFibGUuIjsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nUmVjb3JkcyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgICAg
IHJldHVybiAiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIFJlY29yZHMgdGFibGUuIl9zOwogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0
ZW1lbnQuc3RlcCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCk7CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNy
ZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElU
RV9ET05FKSB7CkBAIC0zMDEsNyArMzAxLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNl
OjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0g
U1FMSVRFX1JPVykKICAgICAgICAgICAgIHJldHVybiAiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiI7CiAKLSAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VS
VCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNDI3LDE4ICs0MjcsMTggQEAgYm9vbCBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdv
cmtlckNvbnRleHREYXRhPiYKICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9k
YXRhYmFzZSk7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKm1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykiX3MpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGF1dG8gaW5zZXJ0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJl
cGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8pIl9zKTsKKyAgICBpZiAoIWluc2VydFN0YXRlbWVudCkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYXV0byYgc2Ny
aXB0U3RvcmFnZSA9IHRoaXMtPnNjcmlwdFN0b3JhZ2UoKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lz
dHJhdGlvbiA6IHJlbW92ZWRSZWdpc3RyYXRpb25zKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKm1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iKTsK
LSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBz
cWwuYmluZFRleHQoMSwgcmVnaXN0cmF0aW9uLnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1
dG8gZGVsZXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiREVMRVRF
IEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSA/Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVTdGF0
ZW1lbnQKKyAgICAgICAgICAgIHx8IGRlbGV0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgcmVnaXN0
cmF0aW9uLnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBkZWxl
dGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byByZW1vdmUgcmVnaXN0cmF0aW9u
IGRhdGEgZnJvbSByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTQ1NywxOSArNDU3LDE5IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0
YT4mCiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgY2VydGlmaWNhdGVJbmZvRW5j
b2RlcjsKICAgICAgICAgY2VydGlmaWNhdGVJbmZvRW5jb2RlciA8PCBkYXRhLmNlcnRpZmljYXRl
SW5mbzsKIAotICAgICAgICBpZiAoc3FsLmJpbmRUZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtl
eS50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRU
ZXh0KDIsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMywgZGF0YS5yZWdpc3Ry
YXRpb24uc2NvcGVVUkwucGF0aCgpLnRvU3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3FsLmJpbmRUZXh0KDQsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b3BPcmlnaW4oKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmlu
ZERvdWJsZSg1LCBkYXRhLnJlZ2lzdHJhdGlvbi5sYXN0VXBkYXRlVGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0
KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2Fj
aGUpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg3LCBkYXRhLnNj
cmlwdFVSTC5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRl
eHQoOCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2VyVHlwZSkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVu
Y29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5k
VGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGljeSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzcWwuYmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwgc2Ny
aXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAg
ICAgICB8fCBzcWwuYmluZEJsb2IoMTIsIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyKCks
IGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgaWYgKGluc2Vy
dFN0YXRlbWVudC0+YmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvRGF0YWJhc2VL
ZXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDIsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnByb3RvY29sSG9zdEFuZFBvcnQoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMs
IGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBhdGgoKS50b1N0cmluZygpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNCwgZGF0YS5yZWdp
c3RyYXRpb24ua2V5LnRvcE9yaWdpbigpLmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZERvdWJsZSg1LCBkYXRhLnJl
Z2lzdHJhdGlvbi5sYXN0VXBkYXRlVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg2LCB1
cGRhdGVWaWFDYWNoZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDcs
IGRhdGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGlu
c2VydFN0YXRlbWVudC0+YmluZFRleHQoOCwgd29ya2VyVHlwZVRvU3RyaW5nKGRhdGEud29ya2Vy
VHlwZSkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5k
QmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBk
YXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0
YXRlbWVudC0+YmluZEJsb2IoMTEsIHNjcmlwdFJlc291cmNlTWFwRW5jb2Rlci5idWZmZXIoKSwg
c2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9F
bmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwg
IkZhaWxlZCB0byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVp
KSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNTAyLDI2ICs1
MDIsMjYgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkKICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3Jr
ZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkczoiKTsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBSZWNvcmRzOyJfcyk7Ci0g
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3FsID0gbV9kYXRh
YmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJPTSBSZWNvcmRzOyJfcyk7CisgICAg
aWYgKCFzcWwpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9ucyBmcm9tIHJlY29yZHMgdGFibGUgKCIs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCAiKSAtICIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKIAotICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBz
cWwtPnN0ZXAoKTsKIAotICAgIGZvciAoOyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0g
c3FsLnN0ZXAoKSkgeworICAgIGZvciAoOyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0g
c3FsLT5zdGVwKCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiBJbXBvcnRpbmcgYSByZWdpc3RyYXRpb24g
ZnJvbSB0aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgYXV0byBrZXkgPSBTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uS2V5Ojpmcm9tRGF0YWJhc2VLZXkoc3FsLmdldENvbHVtblRleHQoMCkpOwotICAg
ICAgICBhdXRvIG9yaWdpblVSTCA9IFVSTCB7IFVSTCgpLCBzcWwuZ2V0Q29sdW1uVGV4dCgxKSB9
OwotICAgICAgICBhdXRvIHNjb3BlUGF0aCA9IHNxbC5nZXRDb2x1bW5UZXh0KDIpOworICAgICAg
ICBhdXRvIGtleSA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtl
eShzcWwtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBhdXRvIG9yaWdpblVSTCA9IFVSTCB7
IFVSTCgpLCBzcWwtPmdldENvbHVtblRleHQoMSkgfTsKKyAgICAgICAgYXV0byBzY29wZVBhdGgg
PSBzcWwtPmdldENvbHVtblRleHQoMik7CiAgICAgICAgIGF1dG8gc2NvcGVVUkwgPSBVUkwgeyBv
cmlnaW5VUkwsIHNjb3BlUGF0aCB9OwotICAgICAgICBhdXRvIHRvcE9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihzcWwuZ2V0Q29sdW1uVGV4dCgzKSk7
Ci0gICAgICAgIGF1dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vj
b25kcyhzcWwuZ2V0Q29sdW1uRG91YmxlKDQpKTsKLSAgICAgICAgYXV0byB1cGRhdGVWaWFDYWNo
ZSA9IHN0cmluZ1RvVXBkYXRlVmlhQ2FjaGUoc3FsLmdldENvbHVtblRleHQoNSkpOwotICAgICAg
ICBhdXRvIHNjcmlwdFVSTCA9IFVSTCB7IFVSTCgpLCBzcWwuZ2V0Q29sdW1uVGV4dCg2KSB9Owot
ICAgICAgICBhdXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLmdldENvbHVt
blRleHQoNykpOworICAgICAgICBhdXRvIHRvcE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luRGF0YTo6
ZnJvbURhdGFiYXNlSWRlbnRpZmllcihzcWwtPmdldENvbHVtblRleHQoMykpOworICAgICAgICBh
dXRvIGxhc3RVcGRhdGVDaGVja1RpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLT5n
ZXRDb2x1bW5Eb3VibGUoNCkpOworICAgICAgICBhdXRvIHVwZGF0ZVZpYUNhY2hlID0gc3RyaW5n
VG9VcGRhdGVWaWFDYWNoZShzcWwtPmdldENvbHVtblRleHQoNSkpOworICAgICAgICBhdXRvIHNj
cmlwdFVSTCA9IFVSTCB7IFVSTCgpLCBzcWwtPmdldENvbHVtblRleHQoNikgfTsKKyAgICAgICAg
YXV0byB3b3JrZXJUeXBlID0gc3RyaW5nVG9Xb3JrZXJUeXBlKHNxbC0+Z2V0Q29sdW1uVGV4dCg3
KSk7CiAKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGE7
Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOCwgY29udGVudFNlY3VyaXR5UG9s
aWN5RGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRT
ZWN1cml0eVBvbGljeURhdGEpOwogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNz
cERlY29kZXIoY29udGVudFNlY3VyaXR5UG9saWN5RGF0YS5kYXRhKCksIGNvbnRlbnRTZWN1cml0
eVBvbGljeURhdGEuc2l6ZSgpKTsKICAgICAgICAgT3B0aW9uYWw8Q29udGVudFNlY3VyaXR5UG9s
aWN5UmVzcG9uc2VIZWFkZXJzPiBjb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgICAgIGlmIChj
b250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUoKSkgewpAQCAtNTMyLDEwICs1MzIsMTAgQEAg
U3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwuZ2V0Q29s
dW1uVGV4dCg5KTsKKyAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC0+Z2V0Q29sdW1u
VGV4dCg5KTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gc2NyaXB0UmVzb3VyY2VNYXBEYXRh
OwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDEwLCBzY3JpcHRSZXNvdXJjZU1h
cERhdGEpOworICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVz
b3VyY2VNYXBEYXRhKTsKICAgICAgICAgSGFzaE1hcDxVUkwsIFNlcnZpY2VXb3JrZXJDb250ZXh0
RGF0YTo6SW1wb3J0ZWRTY3JpcHQ+IHNjcmlwdFJlc291cmNlTWFwOwogCiAgICAgICAgIFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXIgc2NyaXB0UmVzb3VyY2VNYXBEZWNvZGVyKHNjcmlwdFJlc291
cmNlTWFwRGF0YS5kYXRhKCksIHNjcmlwdFJlc291cmNlTWFwRGF0YS5zaXplKCkpOwpAQCAtNTUw
LDcgKzU1MCw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcygp
CiAgICAgICAgIH0KIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY2VydGlmaWNhdGVJbmZvRGF0
YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgY2VydGlmaWNhdGVJbmZv
RGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0
ZUluZm9EYXRhKTsKICAgICAgICAgT3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0
ZUluZm87CiAKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjZXJ0aWZpY2F0ZUlu
Zm9EZWNvZGVyKGNlcnRpZmljYXRlSW5mb0RhdGEuZGF0YSgpLCBjZXJ0aWZpY2F0ZUluZm9EYXRh
LnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcAppbmRleCBlMmM3NzE1YTMxNTZhMGZmNjk2MmFkZWYzZDlmZmFhNjBiMWUw
NzZiLi5hOGFlZDczMTY1MTU1ZTBjZjFmMmJkMzYyYjExZTg5ZjliMmRlMjljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAg
LTEwNiw3ICsxMDYsNyBAQCBjb25zdGV4cHIgYXV0byB0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRQogY29uc3RleHByIGF1dG8g
c3RvcmFnZUFjY2Vzc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00g
U3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyBBTkQg
dG9wTGV2ZWxEb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7CiAKIC8vIFVQREFURSBRdWVyaWVzCi1j
b25zdGV4cHIgYXV0byBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uUXVlcnkgPSAiVVBEQVRFIE9i
c2VydmVkRG9tYWlucyBTRVQgaGFkVXNlckludGVyYWN0aW9uID0gPywgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgPSA/ICIKK2NvbnN0ZXhwciBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rp
b24gPSA/LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9ID8gIl9zCiAgICAgIldIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIHVwZGF0ZUxhc3RTZWVu
UXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgbGFzdFNlZW4gPSA/IFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIHVwZGF0ZURhdGFSZWNvcmRz
UmVtb3ZlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVt
b3ZlZCA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwpAQCAtMTI3LDggKzEyNyw4
IEBAIGNvbnN0ZXhwciBhdXRvIGlzVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnkgPSAiU0VMRUNU
IGlzVmVyeVByZXZhbGVudCBGUk9NIE9ic2VyCiBjb25zdGV4cHIgYXV0byBoYWRVc2VySW50ZXJh
Y3Rpb25RdWVyeSA9ICJTRUxFQ1QgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFp
biA9ID8iX3M7CiBjb25zdGV4cHIgYXV0byBpc0dyYW5kZmF0aGVyZWRRdWVyeSA9ICJTRUxFQ1Qg
Z3JhbmRmYXRoZXJlZCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFp
biA9ID8iX3M7CiBjb25zdGV4cHIgYXV0byBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblF1ZXJ5
ID0gIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2VySW50
ZXJhY3Rpb24gPSAxIEFORCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA8ID8iX3M7Ci1j
b25zdGV4cHIgYXV0byBnZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVRdWVyeSA9ICJTRUxFQ1Qg
KiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iOwotY29u
c3RleHByIGF1dG8gZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5ID0gIlNFTEVD
VCBNQVgobGFzdFVwZGF0ZWQpIEZST00gKFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViRnJhbWVEb21haW5JRCA9ID8gYW5kIHRvcEZy
YW1lRG9tYWluSUQgPSA/IgorY29uc3RleHByIGF1dG8gZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5O
YW1lUXVlcnkgPSAiU0VMRUNUICogRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRp
bWVzdGFtcFF1ZXJ5ID0gIlNFTEVDVCBNQVgobGFzdFVwZGF0ZWQpIEZST00gKFNFTEVDVCBsYXN0
VXBkYXRlZCBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViRnJhbWVE
b21haW5JRCA9ID8gYW5kIHRvcEZyYW1lRG9tYWluSUQgPSA/Il9zCiAgICAgIlVOSU9OIEFMTCBT
RUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUg
dG9Eb21haW5JRCA9ID8gYW5kIGZyb21Eb21haW5JRCA9ID8iCiAgICAgIlVOSU9OIEFMTCBTRUxF
Q1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJF
IHN1YnJlc291cmNlRG9tYWluSUQgPSA/IGFuZCB0b3BGcmFtZURvbWFpbklEID0gPyIKICAgICAi
VU5JT04gQUxMIFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gYW5kIHRvRG9tYWluSUQgPSA/KSJf
czsKQEAgLTM4Miw4ICszODIsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHNldEJ1c3lUaW1lb3V0KG1fZGF0YWJh
c2UsICJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAwMCIpOwotICAgIGlmIChzZXRCdXN5VGltZW91
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IHNldEJ1c3lUaW1lb3V0LnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CisgICAgYXV0byBzZXRCdXN5VGltZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiUFJBR01BIGJ1c3lfdGltZW91dCA9IDUwMDAiX3MpOworICAgIGlmICghc2V0QnVz
eVRpbWVvdXQgfHwgc2V0QnVzeVRpbWVvdXQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRCdXN5VGltZW91dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC00MDEsMjIg
KzQwMSwyMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVu
SVRQRGF0YWJhc2UoKQogT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpCiB7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbWlzc2luZ1RhYmxlczsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlw
ZT0ndGFibGUnIGFuZCB0YmxfbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScg
YW5kIHRibF9uYW1lPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gcHJlcGFyZSwg
ZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAg
IGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygp
KSB7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQuYmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9P
SykgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FMSVRF
X09LKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5T
Y2hlbWEgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2No
ZW1hIHNjaGVtYSBpcyBtaXNzaW5nIHRhYmxlOiAlcyIsIHRoaXMsIHRhYmxlLmFzY2lpKCkuZGF0
YSgpKTsKICAgICAgICAgICAgIG1pc3NpbmdUYWJsZXMuYXBwZW5kKFN0cmluZyh0YWJsZSkpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBzdGF0ZW1lbnQt
PnJlc2V0KCk7CiAgICAgfQogICAgIGlmIChtaXNzaW5nVGFibGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTQyNiw4ICs0MjYsOCBAQCBPcHRpb25hbDxWZWN0
b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYgogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpl
bmFibGVGb3JlaWduS2V5cygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVuYWJsZUZvcmVpZ25L
ZXlzKG1fZGF0YWJhc2UsICJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iKTsKLSAgICBpZiAoZW5h
YmxlRm9yZWlnbktleXMucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBlbmFibGVGb3JlaWduS2V5
cy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3Mp
OworICAgIGlmICghZW5hYmxlRm9yZWlnbktleXMgfHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktl
eXMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDM2LDMxICs0MzYsMzEgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMoKQogCiBUYWJsZUFuZElu
ZGV4UGFpciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxl
QW5kSW5kZXhRdWVyaWVzKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewotICAgIFNRTGl0ZVN0
YXRlbWVudCBnZXRUYWJsZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAiJyBB
TkQgdHlwZSA9ICd0YWJsZSciKSk7Ci0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGdldFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ3RhYmxlJyIp
KTsKKyAgICBpZiAoIWdldFRhYmxlU3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
dXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRv
IGZldGNoIHNjaGVtYSBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAo
Z2V0VGFibGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoZ2V0VGFi
bGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0
byBmZXRjaCB0YWJsZSBzY2hlbWEsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIFN0cmluZyBjcmVh
dGVUYWJsZVF1ZXJ5ID0gZ2V0VGFibGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICBT
dHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdldFRhYmxlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0
KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdldEluZGV4U3RhdGVtZW50KG1fZGF0YWJhc2Us
IG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ2luZGV4JyIpKTsKLSAgICBpZiAoZ2V0SW5k
ZXhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZ2V0SW5kZXhT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNU
IHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicg
QU5EIHR5cGUgPSAnaW5kZXgnIikpOworICAgIGlmICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleDsKLSAgICBpZiAoZ2V0SW5kZXhT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYXV0byByYXdJbmRleCA9
IFN0cmluZyhnZXRJbmRleFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICBpZiAoZ2V0
SW5kZXhTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gcmF3
SW5kZXggPSBTdHJpbmcoZ2V0SW5kZXhTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOwogICAg
ICAgICBpZiAoIXJhd0luZGV4LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGluZGV4ID0gcmF3SW5k
ZXg7CiAgICAgfQpAQCAtNDgwLDIwICs0ODAsMjAgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bmVlZHNVcGRhdGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2gK
IAogYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1
ZUluZGljZXMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiU0VMRUNUIENPVU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
ID0gJ2luZGV4JyIpKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIENPVU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlx
dWVJbmRpY2VzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3Vu
dCwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aXNzaW5nVW5pcXVlSW5kaWNlcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGlu
ZGV4IGNvdW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSAgICBpZiAoc3RhdGVtZW50LmdldENvbHVtbkludCgwKSA8IGV4cGVjdGVk
SW5kZXhDb3VudCkKKyAgICBpZiAoc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3Rl
ZEluZGV4Q291bnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTU0LDggKzU1NCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAKICAgICBmb3IgKGF1dG8m
IHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewogICAgICAg
ICBhdXRvIHF1ZXJ5ID0gbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGUsICIgUkVOQU1F
IFRPIF8iLCB0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBhbHRlclRhYmxlKG1fZGF0
YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKGFsdGVyVGFibGUucHJlcGFyZSgpICE9IFNRTElU
RV9PSyB8fCBhbHRlclRhYmxlLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRv
IGFsdGVyVGFibGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAg
ICBpZiAoIWFsdGVyVGFibGUgfHwgYWx0ZXJUYWJsZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNz
YXJ5IGZhaWxlZCB0byByZW5hbWUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU3MCwxNiArNTcwLDE2IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5l
Y2Vzc2FyeSgpCiAKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4
UXVlcmllcygpLmtleXMoKSkgewogICAgICAgICBhdXRvIHF1ZXJ5ID0gaW5zZXJ0RGlzdGluY3RW
YWx1ZXNJblRhYmxlUXVlcnkodGFibGUpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgbWlncmF0
ZVRhYmxlRGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIGlmIChtaWdyYXRlVGFibGVE
YXRhLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgbWlncmF0ZVRhYmxlRGF0YS5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBtaWdyYXRlVGFibGVEYXRhID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFtaWdyYXRlVGFibGVEYXRh
IHx8IG1pZ3JhdGVUYWJsZURhdGEtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQg
dG8gbWlncmF0ZSBzY2hlbWEsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gZHJvcFF1ZXJ5ID0gbWFr
ZVN0cmluZygiRFJPUCBUQUJMRSBfIiwgdGFibGUpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
ZHJvcFRhYmxlUXVlcnkobV9kYXRhYmFzZSwgZHJvcFF1ZXJ5KTsKLSAgICAgICAgaWYgKGRyb3BU
YWJsZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgZHJvcFRhYmxlUXVlcnkuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoZHJvcFF1ZXJ5KTsKKyAgICAgICAgaWYgKCFkcm9wVGFibGVR
dWVyeSB8fCBkcm9wVGFibGVRdWVyeS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxl
ZCB0byBkcm9wIHRlbXBvcmFyeSB0YWJsZXMsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5NywxNyArNTk3LDE3IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5l
Y2Vzc2FyeSgpCiAKIFZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJQUkFHTUEg
dGFibGVfaW5mbygiLCB0YWJsZU5hbWUsICIpIikpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIs
IHRhYmxlTmFtZSwgIikiKSk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0
Q29sdW1uc0Zyb21UYWJsZUluZm9TdGF0ZW1lbnQgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZlY3Rv
cjxTdHJpbmc+IGNvbHVtbnM7Ci0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsK
KyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIG5hbWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgICAgIGNvbHVtbnMu
YXBwZW5kKG5hbWUpOwogICAgIH0KIApAQCAtNjIyLDE4ICs2MjIsMTggQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0
cmluZyYmIHRhYmwKICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4p
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxl
TmFtZSwgIiBBREQgQ09MVU1OICIsIGNvbHVtbikpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1l
LCAiIEFERCBDT0xVTU4gIiwgY29sdW1uKSk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0
byBwcmVwYXJlIHN0YXRlbWVudCB0byBhZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRhYmxlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVy
cm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAg
ICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogfQogCkBAIC02NDgsMTMgKzY0OCwxMyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29s
dW1uc0lmTmVjZXNzYXJ5KCkKIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6cmVuYW1lQ29sdW1uSW5UYWJsZShTdHJpbmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29s
dW1uTmFtZSYmIGV4aXN0aW5nQ29sdW1uTmFtZSwgRXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0
ZWRDb2x1bW5OYW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4g
IiwgZXhpc3RpbmdDb2x1bW5OYW1lLCAiIFRPICIsIGV4cGVjdGVkQ29sdW1uTmFtZSkpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxF
ICIsIHRhYmxlTmFtZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBU
TyAiLCBleHBlY3RlZENvbHVtbk5hbWUpKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChzdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3
b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2lu
Z0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gcmVuYW1lIGNvbHVt
biBpbiB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTcxMiwxNSArNzEyLDE1IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgp
CiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUg
c2NoZW1hIGZvciBhbiBleGlzdGluZyBPYnNlcnZlZCBEb21haW5zIHRhYmxlLgotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyIpOwotICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIl9z
KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9ic2VydmVk
RG9tYWlucyB0YWJsZS4iKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
T2JzZXJ2ZWREb21haW5zIHRhYmxlIGF0IGFsbCwgb3IgdGhlcmUgaXMgYW4gZXJyb3IgZXhlY3V0
aW5nIHRoZSBmZXRjaCwgZGVsZXRlIHRoZSBmaWxlLgotICAgICAgICBpZiAoc3RhdGVtZW50LnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JzZXJ2ZWQgRG9tYWlucyB0YWJsZS4iKTsK
ICAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgpOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vz
c2FyeSgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50
U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1cnJlbnRTY2hl
bWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFj
dXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC03NDgsMTUgKzc0OCwxNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNl
c3NhcnkoKQogICAgIG1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOwogfQogCi1T
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IFN0cmluZyYg
bG9nU3RyaW5nKSBjb25zdAorU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVyYWwgcXVl
cnksIGNvbnN0IFN0cmluZyYgbG9nU3RyaW5nKSBjb25zdAogewogICAgIGlmICghc3RhdGVtZW50
KSB7Ci0gICAgICAgIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PihtX2RhdGFiYXNlLCBxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3Bl
bigpKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICBhdXRvIHN0YXRlbWVudE9yRXJyb3IgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3Rh
dGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnRPckVycm9yKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5nLmFzY2lpKCkuZGF0
YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIHsgfTsKICAgICAgICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9y
LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlz
T3BlbigpKTsKICAgICB9CiAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
IHsgc3RhdGVtZW50LmdldCgpIH07CiB9CkBAIC0xMDA0LDkgKzEwMDYsOCBAQCBPcHRpb25hbDx1
bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklEKGNv
bnN0IFJlZ2lzdHJhYgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0
byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5JREZyb21T
dHJpbmdTdGF0ZW1lbnQsIGRvbWFpbklERnJvbVN0cmluZ1F1ZXJ5LCAiZG9tYWluSUQiX3MpOwot
ICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQuIFN0YXRlbWVu
dDogJXMuIEVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgc2NvcGVk
U3RhdGVtZW50LT5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRl
eHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQuIEVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIH0KQEAgLTEwMzksMjMgKzEwNDAsMjMgQEAgU3RyaW5nIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBI
YXNoU2UKIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQog
ewotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgbWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFp
bkxpc3QpLCAiICk7IikpOworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoc3RhdGVtZW50LCBlbnN1cmVB
bmRNYWtlRG9tYWluTGlzdChkb21haW5MaXN0KSwgIiApOyIpKTsKICAgICAKLSAgICBpZiAoaW5z
ZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNR
TElURV9PSykgeworICAgIGlmICghaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50CisgICAgICAg
IHx8IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0g
U1FMSVRFX09LKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHN0YXRlbWVu
dC5jb250YWlucygiUkVQTEFDRSIpKSB7Ci0gICAgICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBT
dGF0ZW1lbnQuYmluZERvdWJsZSgyLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hp
cFN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBv
Y2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoaW5zZXJ0UmVsYXRpb25z
aGlwU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTIyOSwxNyArMTIzMCwxNyBAQCBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdAogCiAg
ICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+
IHRoaXJkUGFydHlEYXRhTGlzdDsKICAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5k
UGFyYW1ldGVyID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlD
b29raWVCbG9ja2luZ01vZGU6OkFsbCA/ICIlIiA6ICIxIjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c29ydGVkU3RhdGlzdGljcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgIiwgam9pblN1
YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkpKTsKLSAgICBpZiAoc29ydGVkU3RhdGlzdGljcy5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MuYmluZFRleHQo
MSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRp
c3RpY3MuYmluZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHNvcnRlZFN0
YXRpc3RpY3MgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNU
ICIsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpKSk7CisgICAgaWYgKCFzb3J0ZWRTdGF0
aXN0aWNzCisgICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3MtPmJpbmRUZXh0KDEsIHByZXZhbGVu
dERvbWFpbnNCaW5kUGFyYW1ldGVyKQorICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLT5iaW5k
VGV4dCgyLCAiJSIpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFnZ3JlZ2F0ZWRU
aGlyZFBhcnR5RGF0YSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIHRoaXJkUGFydHlEYXRhTGlzdDsKICAgICB9Ci0gICAgd2hpbGUgKHNvcnRl
ZFN0YXRpc3RpY3Muc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaWYgKGhhc0JlZW5U
aGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29sdW1uSW50KDEpKSkgewotICAgICAgICAg
ICAgYXV0byB0aGlyZFBhcnR5RG9tYWluSUQgPSBzb3J0ZWRTdGF0aXN0aWNzLmdldENvbHVtbklu
dCgwKTsKKyAgICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmdldENv
bHVtbkludCgxKSkpIHsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29y
dGVkU3RhdGlzdGljcy0+Z2V0Q29sdW1uSW50KDApOwogICAgICAgICAgICAgYXV0byB0aGlyZFBh
cnR5RG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3Ry
YWJsZURvbWFpblN0cmluZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURv
bWFpbklEKSk7CiAgICAgICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWlu
LCBnZXRUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0
eURvbWFpbklELCB0aGlyZFBhcnR5RG9tYWluKSB9KTsKICAgICAgICAgfQpAQCAtMTI2NSw5ICsx
MjY2LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVt
ZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0
YVJlY29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAo
ZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
IGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVt
b3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4g
KCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVu
dFN0YXRpc3RpY3NGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTI4NSwzMSArMTI4NSwzMCBAQCB1bnNpZ25l
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWlucwogICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKIAogICAgIFN0
ZFNldDx1bnNpZ25lZD4gbmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgZmluZFN1YnJlc291cmNlcyhtX2RhdGFiYXNlLCAiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFp
bklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBz
dWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0g
MCJfcyk7Ci0gICAgaWYgKGZpbmRTdWJyZXNvdXJjZXMucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBmaW5kU3VicmVzb3VyY2VzLmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJv
bURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5J
RCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICgh
ZmluZFN1YnJlc291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlE
b21haW5JRCkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1Ro
aXNEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kU3Vi
cmVzb3VyY2VzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5J
RCA9IGZpbmRTdWJyZXNvdXJjZXMuZ2V0Q29sdW1uSW50KDApOworICAgIHdoaWxlIChmaW5kU3Vi
cmVzb3VyY2VzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWlu
SUQgPSBmaW5kU3VicmVzb3VyY2VzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgIGF1dG8gaW5z
ZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21h
aW5JRCk7CiAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQogICAgICAgICAgICAgbmV3
bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgIH0KIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBmaW5kVG9wRnJhbWVzKG1fZGF0YWJhc2UsICJTRUxFQ1QgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRh
cmdldERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7
Ci0gICAgaWYgKGZpbmRUb3BGcmFtZXMucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBmaW5kVG9wRnJhbWVzLmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICBhdXRvIGZpbmRUb3BGcmFtZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9t
RG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQ
cmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAoIWZpbmRUb3BGcmFtZXMKKyAgICAgICAgfHwgZmlu
ZFRvcEZyYW1lcy0+YmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSykgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJl
dmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICAKLSAgICB3aGlsZSAoZmluZFRvcEZyYW1lcy5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLmdldENvbHVtbklu
dCgwKTsKKyAgICB3aGlsZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Z2V0Q29sdW1uSW50KDAp
OwogICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291
cmNlcy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29u
ZCkKICAgICAgICAgICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklE
KTsKQEAgLTEzNDEsMjEgKzEzNDAsMjAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWwKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFN0ZFNldDx1bnNpZ25lZD4gcHJldmFs
ZW50RHVlVG9SZWRpcmVjdDsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VSZWRpcmVj
dFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklE
ID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERv
bWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0
YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAg
cHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5z
LmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBP
YnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VS
ZWRpcmVjdFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0
YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVU
b1JlZGlyZWN0Lmluc2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQoMCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVJlZGlyZWN0U3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQg
PSAxIl9zKTsKLSAgICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0g
U1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5p
bnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1
dG8gdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWlu
SUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9O
IE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9E
b21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYg
KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVk
aXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcHJldmFs
ZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgbWFya1ByZXZhbGVudFN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0
ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHByZXZhbGVudER1ZVRvUmVk
aXJlY3QuYmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQoKSkpLCAiKSIpKTsKLSAg
ICBpZiAobWFya1ByZXZhbGVudFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgYXV0byBtYXJrUHJldmFsZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0g
MSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRT
ZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikpOworICAgIGlmICghbWFya1ByZXZh
bGVudFN0YXRlbWVudCB8fCBtYXJrUHJldmFsZW50U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZh
bGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMzY2LDEy
ICsxMzY0LDEyIEBAIEhhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBub3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxl
RG9tYWluLCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2
YWxlbnQgPSAwIl9zKTsKLSAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVu
dC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHdoaWxlIChub3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzU3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm90VmVyeVByZXZhbGVudFJl
c291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgTm90VmVyeVBy
ZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQotICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZh
bGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93CisgICAgYXV0byBub3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZhbGVudCBGUk9N
IE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAo
bm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAobm90
VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAg
ICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1
bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVu
dFJlc291cmNlc1N0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSkKKyAgICAgICAgICAgICAgICAs
IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSA/IFJl
c291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cK
ICAgICAgICAgICAgICAgICAsIDAsIDAsIDAsIDAgfSk7CiAgICAgICAgICAgICByZXN1bHRzLmFk
ZChrZXksIHZhbHVlKTsKICAgICAgICAgfQpAQCAtMTM4Niw0MyArMTM4NCw0MyBAQCBIYXNoTWFw
PHVuc2lnbmVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVBy
ZXZhbGVudFJlc291cmNlcwogCiAgICAgYXV0byBkb21haW5JRHNPZkludGVyZXN0ID0gYnVpbGRl
ci50b1N0cmluZygpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbnNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJl
c291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21h
aW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwotICAg
IGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnByZXBhcmUoKSA9
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnNTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZy
YW1lRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBz
dWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBC
WSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlm
IChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVl
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LmdldENvbHVtbklu
dCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNl
RG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0
LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwotICAgIGlmIChzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykg
ewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5J
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291
bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCht
YWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkg
RlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWlu
SUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9t
YWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQg
ZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAg
ICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YmZyYW1lRG9tYWluSUQsIENPVU5U
KHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVS
RSBzdWJmcmFtZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBC
WSBzdWJmcmFtZURvbWFpbklEIikpOwotICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGls
ZSAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3Vu
dFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxF
Q1Qgc3ViZnJhbWVEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7CisgICAgaWYg
KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudCkgeworICAgICAgICB3
aGlsZSAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZp
bmQoZG9tYWluSUQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgIHJlc3Vs
dC0+dmFsdWUuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCB0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklE
c09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOwotICAgIGlmICh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9P
SykgewotICAgICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5J
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3Ry
aW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURz
T2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCkpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwog
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAg
IHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRD
b2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTU0OSwxMCArMTU0NywxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyhtX2RhdGFiYXNlLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3Nl
ZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklEID0gPyIpOwotICAg
IGlmIChpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5z
ZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFjY2VzcyA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklE
ID0gPyJfcyk7CisgICAgaWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVx
dWVzdFN0b3JhZ2VBY2Nlc3MgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTY0Niw5ICsxNjQ0LDggQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9y
RG9tYWlucyhjb25zdCBIYXNoU2UKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBm
YWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAgIGlmIChk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
YXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9
IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5z
KSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0x
Nzc2LDEwICsxNzczLDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNh
bWVTaXRlKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyIp
OwotICAgIGlmIChyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUucHJlcGFyZSgpICE9IFNR
TElURV9PSwotICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUuYmluZElu
dCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBh
dXRvIHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudCBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOworICAgIGlm
ICghcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlCisgICAgICAgIHx8IHJlbW92ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZS0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTE4MzIsMTAgKzE4MjksMTAgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVn
aXN0cmFibGUKICAgICB9CiAgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgZmFsc2UsIHsg
fSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlU3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNl
LCAiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRv
bWFpbklEID0gPyIpOwotICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsICp0YXJn
ZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFj
Y2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHJlbW92ZVN0b3JhZ2VBY2Nl
c3MgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nl
c3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICgh
cmVtb3ZlU3RvcmFnZUFjY2VzcworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5iaW5k
SW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVt
b3ZlU3RvcmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpA
QCAtMTkxOCw5ICsxOTE1LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4KIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3Qo
V1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJl
Z2luKCksIGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1Vw
ZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQg
SU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRl
cmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAo
IWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0RG9tYWluc0FzUHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzMDEsMTYgKzIyOTcs
MTUgQEAgQ29va2llQWNjZXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
b29raWVBY2Nlc3MoY29uc3QgU3ViUmVzb3VyY2UKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMSwgc3VicmVz
b3VyY2VEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVz
ZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFp
biA9ID8iX3MpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwg
c3VicmVzb3VyY2VEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzIGZhaWxlZCB0byBiaW5kLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBi
b29sIGhhc05vRW50cnkgPSBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9v
bCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYmICEhc3RhdGVtZW50LmdldENvbHVtbkludCgw
KTsKLSAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CisgICAgYm9vbCBoYXNOb0VudHJ5ID0g
c3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKKyAgICBib29sIGlzUHJldmFsZW50ID0g
IWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKKyAgICBib29sIGhh
ZFVzZXJJbnRlcmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDEpID8gdHJ1ZSA6IGZhbHNlOwogCiAgICAgaWYgKCFhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Js
b2NrZWRVbmRlcih0b3BGcmFtZURvbWFpbikgJiYgIWlzUHJldmFsZW50KQogICAgICAgICByZXR1
cm4gQ29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OwpAQCAtMjMzMywxNCArMjMyOCwx
NCBAQCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkUwogCiAgICAgYXV0byBmaXJzdFBhcnR5UHJpbWFy
eURvbWFpbklEID0gKnJlc3VsdC5zZWNvbmQ7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/IEFORCB0b3BMZXZlbERvbWFpbklEID0g
PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUg
ZG9tYWluSUQgPSA/IEFORCB0b3BMZXZlbERvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5J
RCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCBmaXJzdFBh
cnR5UHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6Tm87CiAKLSAgICByZXR1cm4gISFzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8g
U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOworICAgIHJldHVybiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApID8gU3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hv
d246Ok5vOwogfQogCiBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoKSBj
b25zdApAQCAtMjM0OCwxMiArMjM0MywxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0FuZAogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUg
aXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9N
IE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFj
dGlvbiA9IDAiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0
czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAg
ICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7Cisg
ICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAgICAgCiAgICAg
cmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yMzYzLDEyICsyMzU4LDEyIEBAIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNU
b0Jsb2NrQnV0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7
Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVE
b21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRV
c2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4
dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAg
ICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwog
CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yMzc4LDEyICsyMzczLDEyIEBAIFZlY3RvcjxS
ZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRv
bWFpbnNXaXRoVXNlckluCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwotICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICgh
c3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5n
KHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9t
YWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzOTMs
MTMgKzIzODgsMTIgQEAgSGFzaE1hcDxUb3BGcmFtZURvbWFpbiwgU3ViUmVzb3VyY2VEb21haW4+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjoKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFi
bGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21h
aW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
YXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2Vy
dmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsiX3MpOwotCi0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJl
Z2lzdHJhYmxlRG9tYWluIEZST00gKFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZy
YW1lRG9tYWluLCBzLnRvcExldmVsRG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBhcyBvIElOTkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zIGFzIHMgV0hFUkUgby5kb21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9J
TiBPYnNlcnZlZERvbWFpbnMgT04gZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsK
KyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKLSAgICB3aGls
ZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFkZChS
ZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3Ry
aW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hl
Y2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICByZXN1bHRzLmFkZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSksIFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsK
IH0KQEAgLTI0NDUsMTkgKzI0MzksMTggQEAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpEb21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGEKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBWZWN0b3I8RG9tYWluRGF0YT4g
cmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNl
cnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFz
IGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFz
IHogT04gei5zb3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKLQotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRm
YXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgY291bnRPZlRv
cEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9JTiAoU0VMRUNUIHNv
dXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgZnJvbSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IEdS
T1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWluSUQgPSBkb21haW5J
RCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAg
IAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
cmVzdWx0cy5hcHBlbmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVt
bkludCgwKSkKLSAgICAgICAgICAgICwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0
ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSkK
LSAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVudC5nZXRDb2x1
bW5Eb3VibGUoMikpCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMykgPyB0
cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCg0KSA/IHRy
dWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDUpID8gdHJ1
ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDYpKQorICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFp
bjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgxKSkKKyAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHN0YXRlbWVudC0+Z2V0Q29sdW1uRG91YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQt
PmdldENvbHVtbkludCgzKSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQt
PmdldENvbHVtbkludCg0KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQt
PmdldENvbHVtbkludCg1KSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNikpCiAgICAgICAgIH0pOwogICAg
IH0KICAgICAKQEAgLTI0NzMsMTEgKzI0NjYsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYK
IAogICAgIGF1dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZl
Y3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJlZ2luKCksIGRvbWFp
bklEc1RvQ2xlYXIuZW5kKCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckdyYW5kZmF0
aGVyaW5nU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9D
bGVhciwgIikiKSk7Ci0gICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVk
RG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RU
b0NsZWFyLCAiKSIpKTsKKyAgICBpZiAoIWNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nIGZhaWxlZCB0byBiaW5kLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0yNjE3LDIz
ICsyNjEwLDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBy
dW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKICAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNv
dW50IC0gcGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbzsKICAgICBBU1NFUlQoY291bnRM
ZWZ0VG9QcnVuZSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUobV9kYXRh
YmFzZSwgIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRV
c2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Iik7Ci0gICAgaWYg
KHJlY29yZHNUb1BydW5lLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcmVjb3Jk
c1RvUHJ1bmUuYmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHJlY29yZHNUb1BydW5lID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0
aW9uLCBpc1ByZXZhbGVudCwgbGFzdFNlZW4gTElNSVQgPyJfcyk7CisgICAgaWYgKCFyZWNvcmRz
VG9QcnVuZSB8fCByZWNvcmRzVG9QcnVuZS0+YmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAh
PSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVl
ZGVkIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IGVudHJpZXNU
b1BydW5lOwotICAgIHdoaWxlIChyZWNvcmRzVG9QcnVuZS5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
LSAgICAgICAgZW50cmllc1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLmdldENvbHVtbklu
dCgwKSk7CisgICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
KyAgICAgICAgZW50cmllc1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLT5nZXRDb2x1bW5J
bnQoMCkpOwogCiAgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9y
UmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJlZ2luKCks
IGVudHJpZXNUb1BydW5lLmVuZCgpKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcHJ1bmVDb21t
YW5kKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOwotICAgIGlmIChwcnVuZUNv
bW1hbmQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBwcnVuZUNvbW1hbmQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBwcnVuZUNvbW1hbmQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7CisgICAgaWYgKCFwcnVu
ZUNvbW1hbmQgfHwgcHJ1bmVDb21tYW5kLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI3MTcsMzUgKzI3MDgsMzMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0IFJlZ2lz
dHIKIAogYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNDb3JyZWN0
U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJmcmFtZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQogewotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YmZy
YW1lVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lQ291bnQobV9kYXRhYmFzZSwgY291bnRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVRdWVyeSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8obV9kYXRhYmFzZSwgY291bnRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwor
ICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChj
b3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRvIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwogICAgIAotICAgIGlmIChzdWJGcmFtZVVu
ZGVyVG9wRnJhbWVDb3VudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgaWYgKCFzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3Rpbmcg
ZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJG
cmFtZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWlu
KS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZyYW1l
Q291bnQuYmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQo
MSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRv
cEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUby5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52
YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUby5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwg
ZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFt
ZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291
bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDEs
IGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgyLCBkb21haW5JRCh0b3BG
cmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1l
Q291bnQuc3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lQ291bnQuc3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBpZiAoc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8
fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZy
YW1lQ291bnQuZ2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
Q291bnQuZ2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
by5nZXRDb2x1bW5JbnQoMCkgPT0gMSk7CisgICAgcmV0dXJuIChzdWJGcmFtZVVuZGVyVG9wRnJh
bWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
Q291bnQtPmdldENvbHVtbkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8tPmdldENvbHVtbkludCgwKSA9PSAxKTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kQm9vbGVh
bihTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBib29sIGZsYWcp
CkBAIC0yODEyLDI3ICsyODAxLDI2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYKICAgICBpZiAo
cXVlcnkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IGRhdGEobV9kYXRhYmFzZSwgcXVlcnkpOworICAgIGF1dG8gZGF0YSA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CiAgICAgCi0gICAgaWYgKGRhdGEucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBkYXRhLmJpbmRJbnQoMSwgZG9tYWluSUQoUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZhbHVlKCkpICE9IFNR
TElURV9PSykgeworICAgIGlmICghZGF0YSB8fCBkYXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFw
cGVuZFN1YlN0YXRpc3RpY0xpc3QuIFN0YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoZGF0YS5zdGVwKCkgIT0gU1FMSVRFX1JPVykK
KyAgICBpZiAoZGF0YS0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICAiKTsKICAgICBidWlsZGVyLmFwcGVu
ZCh0YWJsZU5hbWUpOwogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOlxuIik7CiAgICAgCi0g
ICAgYXV0byByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRDb2x1
bW5JbnQoMCkpOworICAgIGF1dG8gcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklE
KGRhdGEtPmdldENvbHVtbkludCgwKSk7CiAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJl
c3VsdCk7CiAgICAgCi0gICAgd2hpbGUgKGRhdGEuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEuZ2V0Q29sdW1u
SW50KDApKTsKKyAgICB3aGlsZSAoZGF0YS0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmdldENvbHVtbklu
dCgwKSk7CiAgICAgICAgIGFwcGVuZE5leHRFbnRyeShidWlsZGVyLCByZXN1bHQpOwogICAgIH0K
IH0KQEAgLTI5NDYsMjggKzI5MzQsMjYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKIAogdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0
ZXNQYXJhbWV0ZXJzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY291bnRPcGVyYXRpbmdEYXRl
c1N0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gT3BlcmF0aW5nRGF0
ZXM7Il9zKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1v
bnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMSBPRkZTRVQgPzsiX3MpOworICAgIGF1dG8g
Y291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIENPVU5UKCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsKKyAgICBhdXRvIGdl
dE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywg
bW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7CisgICAgYXV0byBnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVT
QywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CiAKLSAgICBpZiAoY291bnRP
cGVyYXRpbmdEYXRlc1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAg
ICBpZiAoIWNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgfHwgY291bnRPcGVyYXRpbmdEYXRl
c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBjb3VudE9wZXJh
dGluZ0RhdGVzU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
b3BlcmF0aW5nRGF0ZXNTaXplID0gY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMCk7CisgICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVz
U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7CiAKLSAgICBpZiAoZ2V0TW9zdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgIGlmICghZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgfHwgZ2V0TW9zdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFt
ZXRlcnMgZ2V0Rmlyc3RPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBtX21vc3RSZWNlbnRPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShn
ZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0TW9zdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAgICBtX21vc3RS
ZWNlbnRPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRNb3N0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIpKTsKIAotICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBpZiAoIWdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50IGZhaWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGggZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm47CkBAIC0yOTc2LDI2ICsyOTYyLDI2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpCiAgICAgaWYg
KG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQog
ICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IFdURjo6bnVsbG9wdDsKICAgICBl
bHNlIHsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZElu
dCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkgIT0gU1FMSVRFX09LCi0gICAgICAg
ICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5k
SW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRl
T3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQg
ZmFpbGVkIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIFRoZSBl
cnJvciBjb3VsZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4iLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc2hvcnRXaW5k
b3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDIpKTsKKyAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdE
YXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSwgZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogICAgIH0KIAogICAgIGlm
IChtX29wZXJhdGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKQog
ICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0OwogICAgIGVs
c2UgewotICAgICAgICBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnJlc2V0KCk7Ci0g
ICAgICAgIGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmJpbmRJbnQoMSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgICAg
IGlmIChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGlu
Z0RhdGVzV2luZG93TG9uZyAtIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1Bh
cmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJlIGlu
IHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9
IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgICAg
IG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDEpLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQoMikpOwogICAgIH0KIH0KIApAQCAtMzAxMSwyMSArMjk5NywyMSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeQogCiAgICAgaW50IHJvd3NUb1BydW5lID0gbV9vcGVy
YXRpbmdEYXRlc1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAxOwogICAgIGlmIChy
b3dzVG9QcnVuZSA+IDApIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZUxlYXN0UmVj
ZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3BlcmF0
aW5nRGF0ZXMgT1JERVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKLSAg
ICAgICAgaWYgKGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCByb3dzVG9QcnVuZSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsi
X3MpOworICAgICAgICBpZiAoIWRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dAorICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LT5iaW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRl
bGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRv
ZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgU1FMaXRl
U3RhdGVtZW50IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VS
VCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBT
RUxFQ1QgPywgPywgPzsiX3MpOwotICAgIGlmIChpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0
YXRlbWVudC5iaW5kSW50KDEsIHRvZGF5LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgyLCB0b2RheS5tb250aCgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5k
SW50KDMsIHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8g
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9u
dGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7CisgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50CisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJ
bnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0b2Rh
eS5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBp
bnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zMDY5LDE2ICszMDU1
LDE2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiAgICAgICAgIGRheXNBZ29JblNlY29uZHMg
PSBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIC0gZGF5c1RvU3Vi
dHJhY3Q7CiAgICAgICAgIGF1dG8gZGF0ZVRvSW5zZXJ0ID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdh
bGxUaW1lKFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhkYXlzQWdvSW5TZWNvbmRzKSk7CiAKLSAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgs
IG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoaW5zZXJ0T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBp
bnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgZGF0ZVRvSW5zZXJ0LnllYXIo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LmJpbmRJbnQoMiwgZGF0ZVRvSW5zZXJ0Lm1vbnRoKCkpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDMsIGRhdGVUb0lu
c2VydC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8g
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9u
dGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7CisgICAgICAgIGlmICghaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVu
dC0+YmluZEludCgxLCBkYXRlVG9JbnNlcnQueWVhcigpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZGF0ZVRvSW5z
ZXJ0Lm1vbnRoKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LT5yZXNldCgpOwogICAgIH0KIAogICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygp
OwpAQCAtMzIwMSwzNiArMzE4NywzNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChQcml2YXRlQwogICAgICAg
ICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgaW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgcHJpdmF0ZSBj
bGljayBtZWFzdXJlbWVudCB2YWx1ZSBpbnRvIHRoZSBkYXRhYmFzZSB3aXRob3V0IHZhbGlkIHJl
cG9ydCB0aW1lcy4KICAgICAgICAgQVNTRVJUKHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCAhPSAt
MSAmJiBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCAhPSAtMSk7CiAKLSAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaW5zZXJ0QXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEs
ICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1l
bnQuYmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNv
dXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoNCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg2LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCku
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHN0YXRlbWVudC5iaW5kRG91YmxlKDcsIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FM
SVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoOCwgc291cmNlVW5saW5r
YWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5
U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0
KDksIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0
dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZFRleHQoMTAsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVh
cmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IHN0YXRl
bWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0
YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50
KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kSW50KDQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg2LCBhdHRyaWJ1
dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg3LCBzb3VyY2VFYXJs
aWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4t
PnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDksIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJj
ZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEwLCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmREb3VibGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzdGF0ZW1lbnQgPSBTUUxpdGVT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRRdWVyeSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3Rp
bmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc3RhdGVtZW50LmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRl
bWVudC5iaW5kVGV4dCg1LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxl
VG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3Vy
Y2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNywgc291cmNlVW5saW5r
YWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5
U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3Vy
Y2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmli
dXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJs
ZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3Ry
aW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNv
dXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFz
ZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRv
a2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0
VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzQzNSwxNCArMzQyMSwx
NCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0
aW9uVG9TdHJpbmcoV2ViQ29yZTo6U1FMaXRlUwogCiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcoKQogewot
ICAgIFNRTGl0ZVN0YXRlbWVudCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMobV9k
YXRhYmFzZSwgIlNFTEVDVCAoU0VMRUNUIENPVU5UKCopIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQpIGFzIGNudDEsIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpIGFzIGNudDIiX3MpOwotICAgIGlmIChwcml2YXRl
Q2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAg
ICBhdXRvIHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7CisgICAgaWYgKCFw
cml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMgfHwgcHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnREYXRhRXhpc3RzLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAotICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLmdldENvbHVt
bkludCgwKSAmJiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLmdldENvbHVtbklu
dCgxKSkKKyAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0Q29s
dW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmdldENvbHVt
bkludCgxKSkKICAgICAgICAgcmV0dXJuICJcbk5vIHN0b3JlZCBQcml2YXRlIENsaWNrIE1lYXN1
cmVtZW50IGRhdGEuXG4iX3M7CiAKICAgICBhdXRvIHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50QXR0cmlidXRpb25zU3RhdGVtZW50LCBhbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1F1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRU
b1N0cmluZyJfcyk7CkBAIC0zNTczLDExICszNTU5LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDCiAgICAgaWYgKGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIHx8IHNvdXJjZUVhcmxp
ZXN0VGltZVRvU2VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNs
ZWFyQXR0cmlidXRlZFN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5E
IGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKGNsZWFyQXR0cmlidXRl
ZFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmli
dXRlZFN0YXRlbWVudC5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuYmluZEludCgyLCAqZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0
ZWRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBjbGVhckF0dHJp
YnV0ZWRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9N
IEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWlu
SUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghY2xl
YXJBdHRyaWJ1dGVkU3RhdGVtZW50CisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVu
dC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVE
b21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclNlbnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzU4NywxOCArMzU3
MywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50cwogewogICAgIGF1dG8gZXhwaXJlZFRpbWVU
b1NlbmQgPSBXYWxsVGltZTo6bm93KCkgLSAxX2g7CiAKLSAgICBhdXRvIGVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERB
VEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1Nl
bmRUb1NvdXJjZSA9ID8iKTsKLSAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRp
b25TdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGlu
YXRpb24gPSBudWxsIik7CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Il9z
KTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIl9z
KTsKIAotICAgIGlmIChlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3Rh
dGVtZW50LmJpbmRJbnQoMSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2VTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKCFlYXJsaWVzdFRp
bWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudAorICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZVN0YXRlbWVudC0+YmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGlmIChlYXJsaWVzdFRpbWVUb1NlbmRU
b0Rlc3RpbmF0aW9uU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1l
bnQgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJr
QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKaW5kZXgg
NzQxMWJkNWQwYmFmZjdlNGZkYTU4YjJjY2I1NjZjZTQ4ZjJmMGIzMS4uYTFlMzUxNTM0NDZjNTdm
ZDM4ODU5YTZkY2Y4NjI0YjAxNjAzMDk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKQEAgLTE3NSw3ICsxNzUsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWREb21haW5zKCk7CiAgICAgdm9p
ZCBtaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIGRlc3Ryb3lT
dGF0ZW1lbnRzKCk7Ci0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUg
c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlMaXRlcmFsLCBjb25zdCBTdHJpbmcm
KSBjb25zdDsKIAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFp
biYsIGNvbnN0IFN1YkZyYW1lRG9tYWluJikgY29uc3Q7CiAgICAgVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+
IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh1bnNpZ25lZCwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuY3BwCmluZGV4IDc2MDExZTNhMjhkNWQxMzQ5OTg1OGQzYmNjMzJhMjAxMDdlZDNlMWIuLjRj
NzhmY2U5NDc4OTI4NzJlNWRhMTY1ZGUzZjVhYzk3ZGMyZTBkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3Rv
cmFnZURhdGFiYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IGNoYXIgZ2V0SXRlbXNRdWVy
eVN0cmluZ1tdID0gIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIjsKK3N0YXRpYyBj
b25zdCBBU0NJSUxpdGVyYWwgZ2V0SXRlbXNRdWVyeVN0cmluZyB7ICJTRUxFQ1Qga2V5LCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSJfcyB9OwogCiBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpjcmVhdGUoU3RyaW5nJiYgZGF0YWJhc2VQYXRoLCB1bnNpZ25lZCBx
dW90YUluQnl0ZXMpCiB7CkBAIC05OSwxMCArOTksMTAgQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFi
bGVFeGlzdHMoIkl0ZW1UYWJsZSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxl
IExJTUlUIDEiKTsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSJfcyk7CiAKICAgICAvLyBUaGlz
IHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQsIGl0J3MganVzdCB1c2VkIHRvIGNoZWNrIHRoZSBj
b2x1bW4gdHlwZS4KLSAgICBpZiAocXVlcnkuaXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKKyAg
ICBpZiAocXVlcnkgJiYgcXVlcnktPmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0
IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUg
bmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJsZS4KQEAgLTMwMiwxOSArMzAyLDE4IEBAIGJvb2wg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0CiAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJs
ZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBx
dWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCopIEZST00g
SXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFn
ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHJlc3VsdCA9IHF1
ZXJ5LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAocXVl
cnktPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiTm8gcmVzdWx0
cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuICFxdWVy
eS5nZXRDb2x1bW5JbnQoMCk7CisgICAgcmV0dXJuICFxdWVyeS0+Z2V0Q29sdW1uSW50KDApOwog
fQogCiB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZygpCkBAIC0zMzAs
MTQgKzMyOSwxNSBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuSWZFeGlzdGluZygp
CiAgICAgICAgIHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1zU3RhdGVtZW50LCBnZXRJdGVtc1F1
ZXJ5U3RyaW5nKTsKIH0KIAotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVt
ZW50PiYgc3RhdGVtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAorU1FMaXRlU3RhdGVt
ZW50QXV0b1Jlc2V0U2NvcGUgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNjb3BlZFN0YXRlbWVudChz
dGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVyYWwg
cXVlcnkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNP
cGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgICAgICBhdXRvIHN0YXRlbWVudE9yRXJyb3IgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3Rh
dGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnRPckVycm9yKQogICAgICAgICAg
ICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICAgICAgc3Rh
dGVtZW50ID0gc3RhdGVtZW50T3JFcnJvci52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOworICAg
ICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgfQogICAgIHJldHVybiBTUUxp
dGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQoKSB9OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2UuaAppbmRleCBkYjhhZDk4M2VlYWQ4MGY4YzVlOTBiNmYwMWEyZjYz
MTQ2NTE3NzMyLi40NjAzNmQ2NTdlYmU5NzQ0OGUxMmMwZGE4ZDg1NDdiOGQ0ZjkxZWZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuaApAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7CiAgICAgYm9vbCBkYXRhYmFzZUlzRW1w
dHkoKSBjb25zdDsKIAotICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
IHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiYsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3Q7CiAKICAgICBT
dHJpbmcgbV9kYXRhYmFzZVBhdGg7CiAgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZSBtX2RhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0lj
b25EYXRhYmFzZS5jcHAKaW5kZXggMzM5NjAyYTQ5ZjExNDNkOWZmZTQ2MzA1YWIxYWQ5OWE2ODc0
Y2I2My4uNjUwODg2ZWU1NjYxNjIwYjg4MzBhNjM1MDZiOTdmMzQ0MGQ3Zjc4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCkBAIC02
Niw3ICs2Niw4IEBAIEljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgcGF0
aCwgQWxsb3dEYXRhYmFzZVdyaXRlIGFsbG93RGF0YWJhc2VXCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbk51bWJlciA9IFNRTGl0
ZVN0YXRlbWVudChtX2RiLCAiU0VMRUNUIHZhbHVlIEZST00gSWNvbkRhdGFiYXNlSW5mbyBXSEVS
RSBrZXkgPSAnVmVyc2lvbic7IikuZ2V0Q29sdW1uSW50KDApOworICAgICAgICBhdXRvIHZlcnNp
b25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIElj
b25EYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ1ZlcnNpb24nOyJfcyk7CisgICAgICAgIGF1dG8g
ZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1l
bnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAgICAgIGlmIChkYXRhYmFzZVZlcnNpb25OdW1i
ZXIgPiBjdXJyZW50RGF0YWJhc2VWZXJzaW9uKSB7CiAgICAgICAgICAgICBMT0coSWNvbkRhdGFi
YXNlLCAiRGF0YWJhc2UgdmVyc2lvbiBudW1iZXIgJWQgaXMgZ3JlYXRlciB0aGFuIG91ciBjdXJy
ZW50IHZlcnNpb24gbnVtYmVyICVkIC0gY2xvc2luZyB0aGUgZGF0YWJhc2UgdG8gcHJldmVudCBv
dmVyd3JpdGluZyBuZXdlciB2ZXJzaW9ucyIsCiAgICAgICAgICAgICAgICAgZGF0YWJhc2VWZXJz
aW9uTnVtYmVyLCBjdXJyZW50RGF0YWJhc2VWZXJzaW9uKTsKQEAgLTg0LDcgKzg1LDcgQEAgSWNv
bkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNl
V3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlZHVjZSBzcWxp
dGUgUkFNIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IDIwMDAgcGFnZXMgKH4xLjVrQiBwZXIgcGFn
ZSkuIDNNQiBvZiBjYWNoZSBmb3IgaWNvbiBkYXRhYmFzZSBpcyBvdmVya2lsbC4KLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50KG1fZGIsICJQUkFHTUEgY2FjaGVfc2l6ZSA9IDIwMDsiKS5leGVjdXRl
Q29tbWFuZCgpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgY2FjaGVfc2l6
ZSA9IDIwMDsiX3MpOwogCiAgICAgICAgIGlmIChhbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dE
YXRhYmFzZVdyaXRlOjpZZXMpIHsKICAgICAgICAgICAgIG1fcHJ1bmVUaW1lciA9IG1ha2VVbmlx
dWU8UnVuTG9vcDo6VGltZXI8SWNvbkRhdGFiYXNlPj4oUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlz
LCAmSWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQpOwpAQCAtMTc1LDE3ICsxNzYsMTcgQEAg
dm9pZCBJY29uRGF0YWJhc2U6OnBvcHVsYXRlUGFnZVVSTFRvSWNvblVSTE1hcCgpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFN0cmluZyBpbXBvcnRRdWVyeSA9IG1ha2VTdHJpbmcoIlNFTEVDVCBQ
YWdlVVJMLnVybCwgSWNvbkluZm8udXJsLCBJY29uSW5mby5zdGFtcCBGUk9NIFBhZ2VVUkwgSU5O
RVIgSk9JTiBJY29uSW5mbyBPTiBQYWdlVVJMLmljb25JRD1JY29uSW5mby5pY29uSUQgV0hFUkUg
SWNvbkluZm8uc3RhbXAgPiAiLCBmbG9vcigoV2FsbFRpbWU6Om5vdygpIC0gbm90VXNlZEljb25F
eHBpcmF0aW9uVGltZSkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpLCAnOycpOwotICAg
IFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBpbXBvcnRRdWVyeSk7Ci0gICAgaWYgKHF1ZXJ5
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5ID0gbV9kYi5wcmVwYXJl
U3RhdGVtZW50KGltcG9ydFF1ZXJ5KTsKKyAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHByZXBhcmUgaWNvbiB1cmwgaW1wb3J0IHF1ZXJ5Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICBh
dXRvIHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1f
cGFnZVVSTFRvSWNvblVSTE1hcExvY2spOwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBtX3BhZ2VVUkxUb0ljb25VUkxNYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRl
eHQoMCksIHF1ZXJ5LmdldENvbHVtblRleHQoMSkpOwotICAgICAgICByZXN1bHQgPSBxdWVyeS5z
dGVwKCk7CisgICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnktPmdldENvbHVt
blRleHQoMCksIHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgcmVzdWx0ID0gcXVl
cnktPnN0ZXAoKTsKICAgICB9CiAKICAgICBzdGFydFBydW5lVGltZXIoKTsKQEAgLTIxNCwxMiAr
MjE1LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmlyZWQoKQogICAgIEFTU0VS
VChtX2RiLmlzT3BlbigpKTsKIAogICAgIGlmICghbV9wcnVuZUljb25zU3RhdGVtZW50KSB7Ci0g
ICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50
PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8pOyIpOwotICAg
ICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gcHJ1bmVJY29uc1N0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0
ZW1lbnQoIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIHN0YW1wIDw9ICg/KTsiX3MpOworICAg
ICAgICBpZiAoIXBydW5lSWNvbnNTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
UHJlcGFyaW5nIHN0YXRlbWVudCBwcnVuZUljb25zIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9w
cnVuZUljb25zU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorICAgICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBwcnVuZUljb25zU3RhdGVtZW50
LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJ1bmVJY29u
c1N0YXRlbWVudC0+YmluZEludDY0KDEsIGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBub3RVc2Vk
SWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSkpICE9IFNR
TElURV9PSykgewpAQCAtMjMwLDggKzIzMSw4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwcnVuZVRp
bWVyRmlyZWQoKQogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGIpOwogICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgaWYgKG1fcHJ1bmVJY29uc1N0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVU
RSBGUk9NIEljb25EYXRhIFdIRVJFIGljb25JRCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJ
Y29uSW5mbyk7Iik7Ci0gICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIFBh
Z2VVUkwgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsi
KTsKKyAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hF
UkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiX3MpOworICAg
ICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIGljb25J
RCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Il9zKTsKICAgICB9CiAgICAg
bV9wcnVuZUljb25zU3RhdGVtZW50LT5yZXNldCgpOwogCkBAIC0yODUsMTIgKzI4NiwxMiBAQCBP
cHRpb25hbDxpbnQ2NF90PiBJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwoY29uc3QgU3Ry
aW5nJiBpY29uVVJMLCBib29sJiBleAogICAgIEFTU0VSVChtX2RiLmlzT3BlbigpKTsKIAogICAg
IGlmICghbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50KSB7Ci0gICAgICAgIG1faWNvbklERm9y
SWNvblVSTFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiU0VM
RUNUIEljb25JbmZvLmljb25JRCwgSWNvbkluZm8uc3RhbXAgRlJPTSBJY29uSW5mbyBXSEVSRSBJ
Y29uSW5mby51cmwgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2ljb25JREZvckljb25VUkxTdGF0
ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBpY29uSURGb3JJ
Y29uVVJMU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIEljb25J
bmZvLmljb25JRCwgSWNvbkluZm8uc3RhbXAgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby51
cmwgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uSURGb3JJY29uVVJMU3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgaWNvbklERm9ySWNv
blVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9
IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Cisg
ICAgICAgIG1faWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9IGljb25JREZvckljb25VUkxTdGF0
ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9pY29u
SURGb3JJY29uVVJMU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBTUUxJVEVfT0sp
IHsKQEAgLTMxNSwxMiArMzE2LDEyIEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpzZXRJY29uSURGb3JQ
YWdlVVJMKGludDY0X3QgaWNvbklELCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCiAgICAgQVNTRVJU
KG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAg
IGlmICghbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fc2V0SWNv
bklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2Ri
LCAiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29uSUQpIFZBTFVFUyAoKD8pLCA/KTsiKTsK
LSAgICAgICAgaWYgKG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC0+cHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHNldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQg
PSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmwsIGlj
b25JRCkgVkFMVUVTICgoPyksID8pOyJfcyk7CisgICAgICAgIGlmICghc2V0SWNvbklERm9yUGFn
ZVVSTFN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVt
ZW50IHNldEljb25JREZvclBhZ2VVUkwgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX3NldEljb25J
REZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IHNl
dEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAg
ICB9CiAKICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBwYWdlVVJMKSAhPSBTUUxJVEVfT0sKQEAgLTM0MiwxMiArMzQzLDEyIEBAIFZlY3RvcjxjaGFy
PiBJY29uRGF0YWJhc2U6Omljb25EYXRhKGludDY0X3QgaWNvbklEKQogICAgIEFTU0VSVChtX2Ri
LmlzT3BlbigpKTsKIAogICAgIGlmICghbV9pY29uRGF0YVN0YXRlbWVudCkgewotICAgICAgICBt
X2ljb25EYXRhU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJT
RUxFQ1QgSWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9
ICg/KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBpY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFy
ZUhlYXBTdGF0ZW1lbnQoIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRhdGEgV0hFUkUg
SWNvbkRhdGEuaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghaWNvbkRhdGFTdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBpY29uRGF0
YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwog
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQorICAgICAgICBtX2ljb25EYXRhU3Rh
dGVtZW50ID0gaWNvbkRhdGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAg
ICB9CiAKICAgICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25JRCkg
IT0gU1FMSVRFX09LKSB7CkBAIC0zNzAsMjAgKzM3MSwyMCBAQCBPcHRpb25hbDxpbnQ2NF90PiBJ
Y29uRGF0YWJhc2U6OmFkZEljb24oY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBWZWN0b3I8
Y2hhcgogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3Jp
dGU6Olllcyk7CiAKICAgICBpZiAoIW1fYWRkSWNvblN0YXRlbWVudCkgewotICAgICAgICBtX2Fk
ZEljb25TdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VS
VCBJTlRPIEljb25JbmZvICh1cmwsIHN0YW1wKSBWQUxVRVMgKD8sIDApOyIpOwotICAgICAgICBp
ZiAobV9hZGRJY29uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gYWRkSWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIEljb25JbmZvICh1cmwsIHN0YW1wKSBWQUxVRVMgKD8sIDApOyJfcyk7CisgICAgICAg
IGlmICghYWRkSWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJp
bmcgc3RhdGVtZW50IGFkZEljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2FkZEljb25TdGF0
ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgfQorICAgICAgICBtX2FkZEljb25TdGF0ZW1lbnQgPSBhZGRJY29uU3RhdGVtZW50LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9hZGRJY29uRGF0YVN0YXRl
bWVudCkgewotICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBJY29uRGF0YSAoaWNvbklELCBkYXRhKSBW
QUxVRVMgKD8sID8pOyIpOwotICAgICAgICBpZiAobV9hZGRJY29uRGF0YVN0YXRlbWVudC0+cHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGFkZEljb25EYXRhU3RhdGVtZW50
ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiSU5TRVJUIElOVE8gSWNvbkRhdGEgKGljb25J
RCwgZGF0YSkgVkFMVUVTICg/LCA/KTsiX3MpOworICAgICAgICBpZiAoIWFkZEljb25EYXRhU3Rh
dGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgYWRk
SWNvbkRhdGEgZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0g
bnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KKyAg
ICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IGFkZEljb25EYXRhU3RhdGVtZW50LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fYWRkSWNvblN0YXRlbWVu
dC0+YmluZFRleHQoMSwgaWNvblVSTCkgIT0gU1FMSVRFX09LKSB7CkBAIC00MTMsMTIgKzQxNCwx
MiBAQCB2b2lkIEljb25EYXRhYmFzZTo6dXBkYXRlSWNvblRpbWVzdGFtcChpbnQ2NF90IGljb25J
RCwgaW50NjRfdCB0aW1lc3RhbXApCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09
IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV91cGRhdGVJY29uVGltZXN0
YW1wU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9
IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiVVBEQVRFIEljb25JbmZvIFNFVCBz
dGFtcCA9ID8gV0hFUkUgaWNvbklEID0gPzsiKTsKLSAgICAgICAgaWYgKG1fdXBkYXRlSWNvblRp
bWVzdGFtcFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IHVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50
KCJVUERBVEUgSWNvbkluZm8gU0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyJfcyk7Cisg
ICAgICAgIGlmICghdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHVwZGF0ZUljb25UaW1lc3RhbXAgZmFpbGVk
Iik7Ci0gICAgICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBudWxscHRy
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fdXBkYXRlSWNvblRp
bWVzdGFtcFN0YXRlbWVudCA9IHVwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV91cGRhdGVJY29uVGltZXN0YW1w
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgdGltZXN0YW1wKSAhPSBTUUxJVEVfT0sgfHwgbV91cGRh
dGVJY29uVGltZXN0YW1wU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgaWNvbklEKSAhPSBTUUxJVEVf
T0spIHsKQEAgLTQzNywyOCArNDM4LDI4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpkZWxldGVJY29u
KGludDY0X3QgaWNvbklEKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxv
d0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fZGVsZXRlUGFnZVVSTHNGb3JJY29u
U3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBQYWdlVVJMIFdI
RVJFIFBhZ2VVUkwuaWNvbklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVQYWdlVVJM
c0Zvckljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVt
ZW50KCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIFBhZ2VVUkwuaWNvbklEID0gKD8pOyJfcyk7
CisgICAgICAgIGlmICghZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50KSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlUGFnZVVSTHNGb3JJY29u
IGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQg
PSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fZGVs
ZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0gZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9kZWxldGVJ
Y29uRGF0YVN0YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uRGF0YSBX
SEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZUljb25E
YXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVs
ZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUg
RlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAg
aWYgKCFkZWxldGVJY29uRGF0YVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQ
cmVwYXJpbmcgc3RhdGVtZW50IGRlbGV0ZUljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2Rl
bGV0ZUljb25EYXRhU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorICAgICAgICBtX2RlbGV0ZUljb25EYXRhU3RhdGVtZW50ID0gZGVsZXRlSWNvbkRh
dGFTdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFt
X2RlbGV0ZUljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5mbyBX
SEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZUljb25T
dGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxldGVJ
Y29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNv
bkluZm8gV0hFUkUgSWNvbkluZm8uaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghZGVs
ZXRlSWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3Rh
dGVtZW50IGRlbGV0ZUljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0ZUljb25TdGF0
ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAg
IG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IGRlbGV0ZUljb25TdGF0ZW1lbnQudmFsdWUoKS5tb3Zl
VG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9kZWxldGVQYWdlVVJMc0Zvckljb25T
dGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBpY29uSUQpICE9IFNRTElURV9PSwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCBjZTVjMjliYWE1
ODA1Y2E0MmY0OGVmMDUwYjgzMmQwY2Q1Y2NlMTFjLi5jYWUwODJmMTNkY2QzNjhjNDgxOTViZTMx
MWYyMGE1YjY2NDQ4ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3Rv
cmFnZUFyZWFTeW5jLmNwcApAQCAtMjc4LDkgKzI3OCw5IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5j
OjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZS
T00gSXRlbVRhYmxlIExJTUlUIDEiKTsKKyAgICAgICAgYXV0byBxdWVyeSA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIExJTUlUIDEiX3Mp
OwogICAgICAgICAvLyB0aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQuCi0gICAgICAgIGlm
IChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgICAgICBpZiAocXVlcnkgJiYg
cXVlcnktPmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zMjYsOCArMzI2LDggQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1J
bXBvcnQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOwotICAg
IGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBxdWVyeSA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFi
bGUiX3MpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
c2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAg
IG1hcmtJbXBvcnRlZCgpOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsMTAgKzMzNSwxMCBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBpdGVtTWFwOwogCi0gICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAg
ICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwgcXVl
cnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnkuc3Rl
cCgpOworICAgICAgICBpdGVtTWFwLnNldChxdWVyeS0+Z2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkt
PmdldENvbHVtbkJsb2JBc1N0cmluZygxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5zdGVw
KCk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDEyLDI3
ICs0MTIsMjcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBj
b25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKIAogICAgIC8vIElmIHRoZSBjbGVh
ciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0
ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKLSAg
ICAgICAgaWYgKGNsZWFyLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBj
bGVhciA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gSXRlbVRhYmxl
Il9zKTsKKyAgICAgICAgaWYgKCFjbGVhcikgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IGNsZWFyLnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IGNsZWFy
LT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGluc2VydC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIl9zKTsKKyAg
ICBpZiAoIWluc2VydCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGlu
c2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZSht
X2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Ci0gICAgaWYg
KHJlbW92ZS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byByZW1vdmUgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9
PyJfcyk7CisgICAgaWYgKCFyZW1vdmUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2Ug
ZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ0MywyMSArNDQzLDIxIEBA
IHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVsbC1u
ZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5z
ZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnZh
bHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBhdXRvJiBxdWVyeSA9IGl0
LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBxdWVyeS5iaW5k
VGV4dCgxLCBpdC0+a2V5KTsKKyAgICAgICAgcXVlcnktPmJpbmRUZXh0KDEsIGl0LT5rZXkpOwog
CiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdlJ3JlIGRv
aW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCiAgICAgICAgIGlmICghaXQt
PnZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcXVlcnkuYmluZEJsb2IoMiwgaXQtPnZhbHVl
KTsKKyAgICAgICAgICAgIHF1ZXJ5LT5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCi0gICAgICAg
IGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS0+
c3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBk
YXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgcXVlcnkucmVzZXQoKTsKKyAgICAgICAgcXVlcnktPnJlc2V0KCk7CiAgICAgfQog
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQpAQCAtNDk5LDMxICs0OTksMzMgQEAgdm9pZCBT
dG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UoKQogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBpZiAo
cXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2Ui
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIGNvdW50ID0gWyZdIHsKKyAgICAg
ICAgYXV0byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5U
KCopIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICAgICAgaWYgKCFxdWVyeSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxl
IGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hl
biBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2Ui
KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCi0gICAgaW50IHJlc3VsdCA9
IHF1ZXJ5LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRl
bVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgIHJldHVybiBxdWVyeS0+Z2V0Q29s
dW1uSW50KDApOworICAgIH0oKTsKKyAgICBpZiAoY291bnQpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAKLSAgICBpbnQgY291bnQgPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgaWYgKCFj
b3VudCkgewotICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwotICAgICAgICBtX2RhdGFiYXNlLmNs
b3NlKCk7Ci0gICAgICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkp
IHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRpZmllciA9IG1f
ZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgICAgICAgICAgU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihkYXRhYmFz
ZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFz
ZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGlmICghRmlsZVN5
c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmlsZSAlc1xuIiwgZGF0YWJhc2VGaWxl
bmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfQorICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsK
KyAgICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRpZmllciA9IG1fZGF0YWJhc2VJZGVudGlm
aWVyLmlzb2xhdGVkQ29weSgpXSB7CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAg
ICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0g
bV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIp
OworICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGF0YWJhc2VGaWxlbmFtZSkp
CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmlsZSAl
c1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCmluZGV4IGQzNWQ1
YzM4NTAwM2NhY2Q0NmY3MDBkN2FkZTZlMjBhMjlmZmVkYjkuLjNlY2NmYTc1ZDIwMjZlNWQzMGQ5
N2IwMDM2ZTNmZTIzN2Q0Yjc3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmNwcApAQCAtMTg5LDggKzE4OSw4IEBAIHZvaWQgU3RvcmFnZVRyYWNr
ZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCiAgICAgICAgIGlmIChtX2RhdGFiYXNl
LmlzT3BlbigpKSB7CiAgICAgICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1Qgb3JpZ2luIEZST00gT3JpZ2lucyJfcyk7CisgICAgICAgICAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50
LiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTE5OSw4ICsx
OTksOCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMo
KQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrT3JpZ2lucyhtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
KHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKS5pc29sYXRl
ZENvcHkoKSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0
ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRk
KHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKQEAgLTMxNiwxNiArMzE2LDE2IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRPcmln
aW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QKICAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/
LCA/KSIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5U
TyBPcmlnaW5zIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJh
Y2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfSAKICAgICAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmll
cik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRU
ZXh0KDIsIGRhdGFiYXNlRmlsZSk7CiAgICAgCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpCisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKQog
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhl
IHRyYWNrZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKIAogICAgIHsKQEAg
LTQwNCwyMyArNDA0LDIzIEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmln
aW5zKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3Jp
Z2luLCBwYXRoIEZST00gT3JpZ2lucyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyJfcyk7CisgICAgaWYgKCFz
dGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAg
ICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKQor
ICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKSk7CiAKICAgICAgICAgewogICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jbGllbnRNdXRleCk7CiAgICAgICAgICAgICBpZiAo
bV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTQ0MSwxMiArNDQxLDEyIEBAIHZvaWQgU3RvcmFn
ZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKCkKICAgICAgICAgb3BlblRyYWNrZXJEYXRh
YmFzZShmYWxzZSk7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyIpOwotICAgICAgICBpZiAoZGVsZXRlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBkZWxldGVTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdpbnMiX3Mp
OworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQtPmV4ZWN1dGVDb21t
YW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRp
b24gb2YgYWxsIG9yaWdpbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
NTE5LDEzICs1MTksMTMgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVM
RVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyIpOwotICAgIGlmIChkZWxldGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9y
aWdpbj0/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGVs
ZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICghZGVs
ZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBkZWxldGVTdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50LT5l
eGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUg
ZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxNCwxNyArNjE0LDE3IEBAIFN0cmluZyBT
dG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVy
IHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0
byBwYXRoU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0
aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghcGF0aFN0YXRlbWVu
dCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVjdGlvbiBvZiBw
YXRoIGZvciBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIHBhdGhTdGF0ZW1lbnQuYmluZFRl
eHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQu
c3RlcCgpOworICAgIHBhdGhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OworICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4g
cGF0aFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHJldHVybiBwYXRoU3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApOwogfQogICAgIAogdWludDY0X3QgU3RvcmFnZVRyYWNrZXI6OmRp
c2tVc2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNhNzc3ZWVkOTY3ZTc2ZWFmYWY3
OGQ2NmEzNzk1YWM4ZWE1OTA4M2QuLmE3YmViOTdiYmE4YmVhZDY0MjYyYmJlZGZkZWU5YmZjYTYx
YzUzZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVh
dGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNl
ICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9y
ZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjph
ZGRUb0RhdGFiYXNlc1RhYmxlKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgpIHRv
IEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KaW5kZXgg
ZjgyMGNmZWEyMGNkYzhlZjFmM2VlYTFkYTkzOGEwNGNkOWJmZTZhZi4uNzU3ZWMyNDI1ODUxMWE3
ZjkxMjExYWFjY2ExNDUxZjNhYmRlMmIxMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0K
QEAgLTY1LDEyICs2NSwxMiBAQCBzdGF0aWMgdm9pZCBhZGRUb0RhdGFiYXNlc1RhYmxlKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBjb25zdCBTZWN1cml0eU9yaWdpbgogICAgIFNRTGl0ZURh
dGFiYXNlIGRhdGFiYXNlOwogICAgIGRhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBhZGREYXRhYmFzZVN0YXRlbWVudChkYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyIpOwot
ICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LnByZXBhcmUoKTsKLSAgICBhZGREYXRhYmFzZVN0YXRl
bWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIGFkZERh
dGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFtZSk7Ci0gICAgYWRkRGF0
YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMywgbmV3RGF0YWJhc2VQYXRoKTsKLSAgICBhZGREYXRh
YmFzZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOworICAgIGlmIChhdXRvIGFkZERhdGFiYXNl
U3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gRGF0YWJh
c2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Il9zKSkgeworICAgICAg
ICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5ld0Rh
dGFiYXNlTmFtZSk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgzLCBu
ZXdEYXRhYmFzZVBhdGgpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+ZXhlY3V0ZUNv
bW1hbmQoKTsKKyAgICB9CiAKICAgICBkYXRhYmFzZS5jbG9zZSgpOwogfQo=
</data>
<flag name="commit-queue"
          id="449603"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428633</attachid>
            <date>2021-05-14 10:06:11 -0700</date>
            <delta_ts>2021-05-14 12:10:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210514100610.patch</filename>
            <type>text/plain</type>
            <size>291946</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk2YjAzYzE0MTA2NTIzNjM5ZjMxMDFh
NTkzNTE3NzU3ZjYzZGY0NmMuLmVmNWM3ZWUzZDJmYjA4NmNjZjE4Yzc0M2M3YmExODBlOWUzNjZh
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMWZhYWJhODc5N2Jj
MGU2NThkZjU3YmJhNGY5OTg4NmE2ZjgwYTNjLi4yZDVjYmQwOTA1NzFjYWJiYTlhZmJhYmNkMGFi
MTJlN2Q3NTIzZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0
aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1p
emUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBU
aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2Ug
bmV2ZXIgaGF2ZSBhCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVu
ICJwcmVwYXJlZCIuIE9ubHkgdGhlIFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBj
b25zdHJ1Y3QgU1FMaXRlU3RhdGVtZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBh
c3MKKyAgICAgICAgICBhIFNRTGl0ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGlu
ZyB0aGUgU1FMaXRlU3RhdGVtZW50IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFO
RCBwcmVwYXJlIGEgU1FMaXRlU3RhdGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisg
ICAgICAgICAgU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEg
aGVhcCBvbmUuIFRoZXNlIGZ1bmN0aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+
IHR5cGUgc28gdGhleSB3aWxsIGVpdGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAg
U1FMaXRlU3RhdGVtZW50IG9yIGFuIHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAg
ICAgIC0gVGhlIHByZXBhcmUqU3RhdGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcg
YWxsb2NhdGlvbnMgaW4gbW9zdAorICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMg
dGFraW5nIGluIHRoZSBxdWVyeSBhcyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBm
aW5hbGl6ZSgpIGZ1bmN0aW9uIG9uIFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQg
b2JqZWN0cworICAgICAgICAgIGFyZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFNRTGl0ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlv
bnMuIFRoZSBTUUxpdGVTdGF0ZW1lbnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVt
ZW50CisgICAgICAgICAgc28gdXNlcnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0
ZW1lbnQgaWYgdGhleSBuZWVkIHRoZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBh
dCBhIGNlcnRhaW4gcG9pbnQgKGUuZy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAg
ICAgIC0gRHJvcCB0aGUgcHJlcGFyZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1l
bnQgbWVtYmVyIGZ1bmN0aW9ucyBub3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBh
cmUgYWx3YXlzIHByZXBhcmVkLgorICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5
IGFzIGEgU3RyaW5nIGRhdGEgbWVtYmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAg
ICAgICBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUg
cHJlcGFyZSBzdGVwIGFmdGVyIHRoZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtl
cyB0aGUgU1FMaXRlU3RhdGVtZW50IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6Y3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVu
c3VyZVZhbGlkQmxvYlRhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJ
bmRleFJlY29yZHNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5k
UG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9y
SURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZy
b21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRl
U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpyZXNldEFuZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVj
b3JkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFRleHRWYWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
cmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OmRhdGFiYXNlTmFtZXNOb0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnF1b3RhTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6c2V0UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFi
YXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNl
RmlsZUlmRW1wdHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhh
c2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVH
cm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmlu
Z1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVP
cmlnaW5SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlTmV3ZXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmxvYWRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjptYW5pZmVzdFVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphckRCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
REI6OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERv
bWFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZTo6dXNlV0FMSm91cm5hbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6
Om1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhp
bXVtU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZTo6Y2xlYXJBbGxUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2U6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
OjpwcmVwYXJlSGVhcFN0YXRlbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJl
dHVybnNBdExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dDo6YmluZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6YmluZE51bGwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpiaW5kUGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6
OmlzQ29sdW1uTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29s
dW1uRGVjbGFyZWRBc0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29s
dW1uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91Ymxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoUG9wdXBNZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6
CisKIDIwMjEtMDUtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW5hbWUgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoKSB0byBGaWxlU3lzdGVtOjpmaWxlU2l6
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IDZlZGRiMDM5NGRlOWRjOTc0NzQzYTliOGM2MmNhODQ5MDlkYTkzMGMu
LmRkZWIzMjEyOWY5MTk4M2JjZDQyYzEzZGFmZTQ3YWM4MmExOTJmMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzAgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24g
YW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNR
TGl0ZVN0YXRlbWVudCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVND
SUlMaXRlcmFscy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZElu
ZGV4UXVlcmllcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVD
b2x1bW5JblRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1l
bnQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0
eURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJz
aXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFp
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVB
Y2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9C
bG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2ll
c0ZvciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0
aGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3Vu
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJ
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnNj
b3BlZFN0YXRlbWVudCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9J
Y29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Okljb25EYXRh
YmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9J
Y29uVVJMTWFwKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpwcnVuZVRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25JREZvckljb25VUkwpOgor
ICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6OnNldEljb25JREZvclBhZ2VVUkwpOgorICAg
ICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6Omljb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6
SWNvbkRhdGFiYXNlOjphZGRJY29uKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjp1
cGRhdGVJY29uVGltZXN0YW1wKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpkZWxl
dGVJY29uKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSgpIHRvIEZpbGVTeXN0ZW06
OmZpbGVTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggNTJlMmUyYjQ5ZjIzZGFiOTAwMThk
MGE4ZjdhMmNlNmU2NmM1NTJiYS4uMmFjMjc2NjliZGIxYmUwNmVjZmMxMDQ1NjNlZGYxZmYwNWRj
OTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMS0wNS0xMyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9w
dGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ug
bm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMgY2hh
bmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAgICog
U3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
U3luYzo6c3luYyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1w
dHlEYXRhYmFzZSk6CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhGb3JPcmlnaW4pOgor
CiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVuYW1lIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5c3RlbTo6ZmlsZVNpemUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmggYi9Tb3VyY2UvV1RGL3d0
Zi9VbmlxdWVSZWYuaAppbmRleCA0MTVhMjliNjYwY2ZlOWU4MzYwMGRhNjE5YzFlYzNlNzFjMGYz
Nzk3Li5jNGVlM2RjMTI4NzRmMTk4ZTFiZjQ1M2YyMzdhOTljZjQ3Njc2ZGU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVS
ZWYuaApAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9yZWYpOwog
ICAgIH0KIAorICAgIGV4cGxpY2l0IFVuaXF1ZVJlZihUJiBvdGhlcikKKyAgICAgICAgOiBtX3Jl
Zigmb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWYpOworICAgIH0KKwogICAgIFQm
IGdldCgpIHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsgfQogICAgIGNvbnN0IFQmIGdl
dCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsgfQogCkBAIC04MCwxMiAr
ODYsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8
VT4gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5pcXVlX3B0cjxVPik7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5kIGNsYXNzIFVuaXF1ZVJlZjsKIAotICAgIFVu
aXF1ZVJlZihUJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZigmb3RoZXIpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9yZWYpOwotICAgIH0KLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiBtX3JlZjsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOThkYjk4Y2M3M2Mx
YzA5ODc3NWYzMGI3YTRlYTM3OWRkZGVmZTRlMS4uOWFhYTBmZDUzZGVjZDFhZDZmODU1MDA2ZGM3
M2E1NzU0Zjc3MjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTI2
MywxMyArMjYzLDEzIEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlm
TmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJh
c2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0n
UmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29y
ZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJl
Y29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50
IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJl
IGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAg
ICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMjg2LDcgKzI4Niw3
IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNR
TGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsK
ICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTMzOCwx
MyArMzM4LDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JU
YWJsZXMoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQgdGFibGUuCi0gICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3Fs
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYlJlY29yZHMnIik7Ci0gICAg
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iUmVjb3JkcyciX3MpOwor
ICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYlJlY29yZHMg
dGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAg
ICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0
ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5v
IEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4KICAgICAgICAgaWYgKHNxbGl0
ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgxKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMSk7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNU
YWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFs
dGVybmF0ZSgpKSB7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKIAogICAgIHsKICAgICAgICAgLy8gRmV0Y2gg
dGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRhYmxlLgotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciX3MpOworICAgICAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNxbGl0
ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iRmlsZXMg
dGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0
ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzkxLDcgKzM5MSw3IEBAIGJvb2wgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JG
aWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpKSB7CkBAIC00MjgsMTMgKzQyOCwxMyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpCiAgICAgU3RyaW5nIGN1cnJl
bnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlz
dGluZyBpbmRleCByZWNvcmQgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4UmVjb3JkcyB0YWJsZSBh
dCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0
ID09IFNRTElURV9ET05FKSB7CkBAIC00NTEsNyArNDUxLDcgQEAgYm9vbCBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0Vt
cHR5KCkpOwpAQCAtNTAzLDEzICs1MDMsMTMgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1h
OwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5k
ZXggcmVjb3JkIGluZGV4LgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgbmFtZT0nSW5kZXhS
ZWNvcmRzSW5kZXgnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVj
b3Jkc0luZGV4JyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzSW5kZXggaW5kZXggYXQgYWxsLCBj
cmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJ
VEVfRE9ORSkgewpAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsK
QEAgLTU2MSwxMyArNTYxLDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVW
YWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKIAogICAgIFN0cmluZyBjdXJyZW50U2NoZW1h
OwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwg
IlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc1Jl
Y29yZEluZGV4JyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSBuYW1lPSdJbmRleFJlY29y
ZHNSZWNvcmRJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXguIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjFJbmRleFJlY29yZHNSZWNv
cmRJbmRleFNjaGVtYSkpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1h
LmlzRW1wdHkoKSk7CkBAIC02MjQsMjAgKzYyNCwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0
YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlh
bAogICAgIH0KIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVE
QiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24n
LCA/KTsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTElU
RV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIElE
QkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiX3MpOworICAgICAg
ICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0
YVZlcnNpb24pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkYXRh
YmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAl
cyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQogICAgIH0KICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJh
c2VOYW1lJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFt
ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJJ
TlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VOYW1lJywgPyk7Il9z
KTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgbV9p
ZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBpbnNlcnQgZGF0YWJhc2UgbmFtZSBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkp
IC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC02NDYsMTAgKzY0NiwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAg
IHsKICAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRlZmluZWQgdG8gYmUgYSB1aW42
NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3VwcG9ydCBuYXRpdmUgYmluZGlu
ZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgICAgLy8gVGhlcmVmb3JlIHdlJ2xsIHN0b3Jl
IHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNl
VmVyc2lvbicsID8pOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKDApKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5U
TyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9uJywgPyk7Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgU3RyaW5nOjpu
dW1iZXIoMCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkZWZh
dWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
ICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjc0
LDE5ICs2NzQsMTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRlZD4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwKICAgICBTdHJpbmcgY3VycmVu
dFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIE9iamVjdFN0
b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxp
dGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYmpl
Y3RTdG9yZUluZm8nIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYmpl
Y3RTdG9yZUluZm8nIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGhlIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5nZXRD
b2x1bW5UZXh0KDApOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5
KCkpOwpAQCAtNzM5LDIyICs3MzksMjIgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1p
Z3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3RkOjoKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJT
RUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVu
dHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNV
bmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRleEluZm87Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJlcGFyaW5nIHN0YXRlbWVu
dCB0byBmZXRjaCByZWNvcmRzIGZyb20gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIGRhdGFi
YXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAg
ICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGlk
ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IG9iamVj
dFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7CisgICAgICAgICAgICB1aW50
NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgICAgICBTdHJp
bmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpOwogICAgICAg
ICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVjdFN0b3JlSUQsIGlk
IH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZmZXIpOwot
ICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQpOwotICAg
ICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3RhdGVtZW50LmdldENvbHVtbkludCg1KTsKKyAg
ICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtleVBhdGhCdWZm
ZXIpOworICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCg0
KTsKKyAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDUpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNyZWF0
ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleEluZm8gVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFzcWwKQEAgLTc2OSw3ICs3Njks
NyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4SW5mb1RhYmxlRm9y
SURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtODA0LDIyICs4MDQsMjIg
QEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZv
cklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3QKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaW5kZXhJRCwgb2JqZWN0U3Rv
cmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBGUk9NIEluZGV4UmVjb3Jkczsi
X3MpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
aW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBG
Uk9NIEluZGV4UmVjb3JkczsiX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIGZldGNoIHJlY29y
ZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RF
cnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
KyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
RCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGlk
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9i
amVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDEpOwogICAgICAgICAgICAg
dWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVjdFN0b3JlSUQsIGlkIH0pOwog
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUJ1ZmZlcjsKLSAgICAgICAgICAgIHN0YXRl
bWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5QnVmZmVyKTsKKyAgICAgICAgICAgIHN0
YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleUJ1ZmZlcik7CiAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0
Q29sdW1uQmxvYkFzVmVjdG9yKDMsIHZhbHVlQnVmZmVyKTsKLSAgICAgICAgICAgIHVpbnQ2NF90
IHJlY29yZElEID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDQpOworICAgICAgICAgICAgc3Rh
dGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywgdmFsdWVCdWZmZXIpOworICAgICAgICAg
ICAgdWludDY0X3QgcmVjb3JkSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDQpOwogCiAg
ICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OlB1dFRlbXBJbmRleFJl
Y29yZCwgIklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBWQUxVRVMgKD8sID8sIENBU1Qo
PyBBUyBURVhUKSwgQ0FTVCg/IEFTIFRFWFQpLCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFz
cWwKQEAgLTgzMyw3ICs4MzMsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0
ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpA
QCAtOTg5LDEwICs5ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKIAogICAgIFN0cmlu
ZyBkYXRhYmFzZU5hbWU7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3Nx
bGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdE
YXRhYmFzZU5hbWUnOyIpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAg
ICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUg
RlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Il9zKTsKKyAg
ICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGRhdGFiYXNlTmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBkYXRhYmFzZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIGlmIChkYXRh
YmFzZU5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIGluZm8gZGF0YWJhc2UgKCclcycpIGRvZXMg
bm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lICgnJXMnKSIsIGRhdGFiYXNlTmFtZS51dGY4KCku
ZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMDAsMTAgKzEwMDAsMTAgQEAgc3RkOjp1bmlx
dWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhp
c3RpbmdEYXRhYmFzZUkKICAgICB9CiAgICAgdWludDY0X3QgZGF0YWJhc2VWZXJzaW9uOwogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1
ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3Mp
OwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgYXV0byBzcWwgPSBt
X3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFz
ZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAgICAgICAgaWYgKHNx
bC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgICAgIFN0
cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBhdXRv
IHBhcnNlZFZlcnNpb24gPSBwYXJzZUludGVnZXI8dWludDY0X3Q+KHN0cmluZ1ZlcnNpb24pOwog
ICAgICAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRGF0
YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBjbGVhbmx5IGNvbnZlcnQgdG8g
YW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0cmluZ1ZlcnNpb24udXRmOCgp
LmRhdGEoKSk7CkBAIC0xMDIxLDE3ICsxMDIxLDE3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRh
YmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJ
CiAgICAgYm9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gKHJlc3VsdC52YWx1ZSgpID09IElzU2No
ZW1hVXBncmFkZWQ6Olllcyk7CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwo
Km1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJPTSBPYmpl
Y3RTdG9yZUluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVjdFN0b3JlSW5mbzsiX3MpOwor
ICAgICAgICBpZiAoIXNxbCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAg
IGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVw
KCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAg
dWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAg
ICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOwor
ICAgICAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgx
KTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAgICAg
ICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhCdWZmZXIpOworICAgICAgICAg
ICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0aEJ1ZmZlcik7CiAKICAgICAg
ICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3JlS2V5UGF0aDsKICAgICAgICAg
ICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZlci5zaXplKCksIG9iamVj
dFN0b3JlS2V5UGF0aCkpIHsKQEAgLTEwMzksMTEgKzEwMzksMTEgQEAgc3RkOjp1bmlxdWVfcHRy
PElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdE
YXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3FsLmdldENvbHVtbkludCgzKTsK
KyAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC0+Z2V0Q29sdW1uSW50KDMpOwog
CiAgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoeyBvYmpl
Y3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUob2JqZWN0U3RvcmVLZXlQYXRoKSwg
YXV0b0luY3JlbWVudCB9KTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTA1NiwyMCArMTA1NiwyMCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RF
eGlzdGluZ0RhdGFiYXNlSQogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRf
dD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxJ
REJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RTdG9yZUlELCBrZXlQ
YXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3MpOwotICAgICAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3Nx
bGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQs
IGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7CisgICAg
ICAgIGlmICghc3FsKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4SW5mbyB0YWJsZS4iKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJl
c3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAg
ICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1aW50NjRf
dCBpbmRleElEID0gc3FsLmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgU3RyaW5nIGlu
ZGV4TmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAgICAgICAgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGluZGV4SUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIGlu
ZGV4TmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9i
amVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDIpOwogCiAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNW
ZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBzcWwtPmdldENvbHVtbkJsb2JB
c1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKIAogICAgICAgICAgICAgT3B0aW9uYWw8SURCS2V5
UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleVBh
dGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5kYXRhKCkp
LCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkgewpAQCAtMTA4MSw4ICsxMDgx
LDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzcWwuZ2V0
Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3FsLmdldENvbHVt
bkludCg1KTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3FsLT5nZXRDb2x1bW5JbnQoNCk7
CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBzcWwtPmdldENvbHVtbkludCg1KTsKIAog
ICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IGRhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJRCk7CiAgICAgICAgICAgICBpZiAoIW9iamVjdFN0
b3JlKSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAg
ICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5kZXhJbmZvKTsKICAgICAg
ICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJRCA/IGluZGV4SUQgOiBtYXhJ
bmRleElEOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTElURV9ET05FKSB7CkBAIC0xMTYyLDExICsxMTYyLDE1IEBAIE9wdGlvbmFsPElEQkRhdGFi
YXNlTmFtZUFuZFZlcnNpb24+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5k
VmVyc2lvCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU1FMaXRl
U3RhdGVtZW50IG5hbWVzcWwoZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFz
ZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Iik7Ci0gICAgYXV0byBkYXRhYmFzZU5h
bWUgPSBuYW1lc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0byBuYW1lc3FsID0gZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdI
RVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgaWYgKCFuYW1lc3FsKSB7CisgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IHRvIGdldCBkYXRhYmFz
ZSBuYW1lKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgYXV0byBk
YXRhYmFzZU5hbWUgPSBuYW1lc3FsLT5nZXRDb2x1bW5UZXh0KDApOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHZlcnNxbChkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5m
byBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgIFN0cmluZyBzdHJpbmdW
ZXJzaW9uID0gdmVyc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0byB2ZXJzcWwgPSBkYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8g
V0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAgICBTdHJpbmcgc3RyaW5nVmVy
c2lvbiA9IHZlcnNxbCA/IHZlcnNxbC0+Z2V0Q29sdW1uVGV4dCgwKSA6IFN0cmluZygpOwogICAg
IGF1dG8gZGF0YWJhc2VWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVpbnQ2NF90PihzdHJpbmdWZXJz
aW9uKTsKICAgICBpZiAoIWRhdGFiYXNlVmVyc2lvbikgewogICAgICAgICBMT0dfRVJST1IoIkRh
dGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9lcyBub3QgY2xlYW5seSBjb252ZXJ0IHRv
IGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNpb24iLCBzdHJpbmdWZXJzaW9uLnV0Zjgo
KS5kYXRhKCkpOwpAQCAtMTMxMCwxMCArMTMxNCwxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZv
KQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUoKSA9PSBJREJUcmFuc2FjdGlv
bk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5mb0Jl
Zm9yZVZlcnNpb25DaGFuZ2UgPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oKm1fZGF0YWJh
c2VJbmZvKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiVVBE
QVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJlIGtleSA9ICdEYXRhYmFzZVZl
cnNpb24nOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lv
bigpKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgi
VVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJlIGtleSA9ICdEYXRhYmFz
ZVZlcnNpb24nOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJp
bmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAg
ICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcg
ZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAt
MjM0Nyw0MyArMjM1MSwzMyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIGludDY0X3Qg
cmVjb3JkSUQgPSAwOwogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIGtleVJlc3VsdEJ1ZmZlciwg
dmFsdWVSZXN1bHRCdWZmZXI7CiAgICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgbG93ZXJPcGVuVXBwZXJPcGVuID0gIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJl
Y29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBB
TkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWQgPSAiU0VMRUNUIGtleSwgdmFs
dWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
OwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlck9wZW4g
PSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRF
WFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93
ZXJDbG9zZWRVcHBlckNsb3NlZCA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNv
cmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFO
RCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotCi0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5ID0gIlNFTEVDVCBr
ZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8g
QVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVwcGVyQ2xvc2VkS2V5T25seSA9
ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5
ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtl
eTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlck9w
ZW5LZXlPbmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQg
PSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkg
T1JERVIgQlkga2V5OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNs
b3NlZFVwcGVyQ2xvc2VkS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBv
YmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENB
U1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgICAgICBTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBzcWw7CiAKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNh
c2UgSURCR2V0UmVjb3JkRGF0YVR5cGU6OktleUFuZFZhbHVlOgogICAgICAgICAgICAgaWYgKGtl
eVJhbmdlLmxvd2VyT3BlbikgewogICAgICAgICAgICAgICAgIGlmIChrZXlSYW5nZS51cHBlck9w
ZW4pCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZh
bHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVuVXBwZXJPcGVuKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRz
TG93ZXJPcGVuVXBwZXJPcGVuLCAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBr
ZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRW
YWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWQpOwor
ICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJl
Y29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJhbmdlLnVwcGVyT3BlbikKLSAg
ICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNv
cmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJPcGVuKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93
ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBr
ZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRW
YWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2Vk
KTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFs
dWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJ
RCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8g
QVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJREJHZXRSZWNv
cmREYXRhVHlwZTo6S2V5T25seToKICAgICAgICAgICAgIGlmIChrZXlSYW5nZS5sb3dlck9wZW4p
IHsKICAgICAgICAgICAgICAgICBpZiAoa2V5UmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAg
ICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJPcGVu
VXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAg
ICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVy
T3BlbiwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFO
RCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7Il9zKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNx
bCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3Nl
ZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2Vk
LCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBr
ZXk7Il9zKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJh
bmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCBsb3dlckNsb3NlZFVwcGVy
T3BlbktleU9ubHkpOworICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQo
U1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5IEZST00g
UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNR
TDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJD
bG9zZWRLZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsICJTRUxFQ1Qga2V5IEZS
T00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNDU1LDM2ICsyNDQ5LDI3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zCiAKIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50Rm9yR2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKGNv
bnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSkKIHsKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJPcGVuS2V5ID0iU0VMRUNUIGtleSBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlckNsb3NlZEtleSA9ICJTRUxFQ1Qga2V5
IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFT
IFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyT3BlbktleSA9ICJTRUxFQ1Qg
a2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1Qo
PyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5ID0gIlNF
TEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
OwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5WYWx1ZSA9
ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhU
KSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVu
VXBwZXJDbG9zZWRWYWx1ZSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtl
eSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJPcGVuVmFsdWUgPSAiU0VMRUNUIGtleSwgdmFsdWUs
IFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkVmFsdWUg
PSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5nZXRBbGxU
eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cykgewogICAgICAgICBpZiAoZ2V0QWxs
UmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLmxvd2VyT3BlbikgewogICAgICAgICAgICAgaWYgKGdl
dEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBl
ck9wZW4sIGxvd2VyT3BlblVwcGVyT3BlbktleSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FjaGVk
U3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCBsb3dl
ck9wZW5VcHBlckNsb3NlZEtleSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRl
bWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBlck9wZW4sICJTRUxFQ1Qga2V5
IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFT
IFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CisgICAg
ICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2Vy
T3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChnZXRBbGxS
ZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3Blbiwg
bG93ZXJDbG9zZWRVcHBlck9wZW5LZXkpOwotICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2Vk
VXBwZXJDbG9zZWRLZXkpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6
OkdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBrZXkgRlJPTSBS
ZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CisgICAgICAgIHJl
dHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ckNsb3NlZCwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/
IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9S
REVSIEJZIGtleTsiX3MpOwogICAgIH0KIAogICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlS
YW5nZURhdGEubG93ZXJPcGVuKSB7CiAgICAgICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlS
YW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChT
UUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVuVXBwZXJPcGVu
VmFsdWUpOwotICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNv
cmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGxvd2VyT3BlblVwcGVyQ2xvc2VkVmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2Vy
T3BlblVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hF
UkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwg
Q0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOworICAgICAgICByZXR1cm4gY2FjaGVk
U3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsICJTRUxF
Q1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/
IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JE
RVIgQlkga2V5OyJfcyk7CiAgICAgfQogCiAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJh
bmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpH
ZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgbG93ZXJDbG9zZWRVcHBlck9wZW5W
YWx1ZSk7Ci0gICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xv
d2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRWYWx1ZSk7CisgICAg
ICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3Nl
ZFVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENB
U1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKKyAgICByZXR1cm4gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBr
ZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIg
Qlkga2V5OyJfcyk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxs
T2JqZWN0U3RvcmVSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQpAQCAtMjc1OCwxOSArMjc0MywxNCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3RpbwogICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHN0
YXRlbWVudDsKIAogICAgIGlmICghaW5kZXhJZGVudGlmaWVyKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3BlblVwcGVyT3BlblJlY29yZHMgPSAiU0VMRUNU
IENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7IjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGNvdW50TG93ZXJPcGVuVXBwZXJDbG9zZWRSZWNvcmRzID0g
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsiOwotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dlckNsb3NlZFVwcGVyT3BlblJl
Y29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQp
OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBw
ZXJDbG9zZWRSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNU
KD8gQVMgVEVYVCk7IjsKLQogICAgICAgICBpZiAocmFuZ2UubG93ZXJPcGVuICYmIHJhbmdlLnVw
cGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNv
dW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgY291bnRMb3dlck9wZW5VcHBlck9wZW5SZWNv
cmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50
UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMg
V0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmxvd2VyT3Bl
biAmJiAhcmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3Rh
dGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGNvdW50TG93ZXJP
cGVuVXBwZXJDbG9zZWRSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIENP
VU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVs
c2UgaWYgKCFyYW5nZS5sb3dlck9wZW4gJiYgcmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAg
c3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJDbG9zZWRV
cHBlck9wZW4sIGNvdW50TG93ZXJDbG9zZWRVcHBlck9wZW5SZWNvcmRzKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2Vk
VXBwZXJPcGVuLCAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRF
WFQpOyJfcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGNvdW50TG93
ZXJDbG9zZWRVcHBlckNsb3NlZFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVtZW50ID0gY2Fj
aGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNF
TEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAg
ICAgICAgCiAgICAgICAgIGlmICghc3RhdGVtZW50CiAgICAgICAgICAgICB8fCBzdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwpAQCAtMjc4
MCwxOSArMjc2MCwxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgICAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIGNvdW50IHJlY29yZHMgaW4g
b2JqZWN0IHN0b3JlIGR1ZSB0byBiaW5kaW5nIGZhaWx1cmUiX3MgfTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3Bl
blVwcGVyT3BlbkluZGV4UmVjb3JkcyA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29y
ZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwg
Q0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3Vu
dExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJPcGVuSW5kZXhSZWNvcmRzID0gIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJDbG9zZWRJbmRleFJlY29y
ZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/
IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7
Ci0gICAgICAgIAogICAgICAgICBpZiAocmFuZ2UubG93ZXJPcGVuICYmIHJhbmdlLnVwcGVyT3Bl
bikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5k
ZXhSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBjb3VudExvd2VyT3BlblVwcGVyT3BlbkluZGV4
UmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpD
b3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAgICAgICAgZWxzZSBpZiAocmFuZ2Uu
bG93ZXJPcGVuICYmICFyYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2Vk
LCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0
YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJPcGVu
VXBwZXJDbG9zZWQsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5k
ZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKTsiX3MpOwogICAgICAgICBlbHNlIGlmICghcmFuZ2UubG93ZXJPcGVuICYmIHJhbmdlLnVw
cGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNv
dW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGNvdW50TG93ZXJDbG9zZWRVcHBl
ck9wZW5JbmRleFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6Q291bnRJbmRleFJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5k
ZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgY291bnRMb3dlckNsb3NlZFVwcGVyQ2xv
c2VkSW5kZXhSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID49IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsiX3MpOwogCiAgICAgICAg
IGlmICghc3RhdGVtZW50CiAgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBp
bmRleElkZW50aWZpZXIpICE9IFNRTElURV9PSwpAQCAtMzAxNywxMiArMjk5MiwxMiBAQCB2b2lk
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKCkKICAgICAgICAgYm9v
bCBlcnJvcmVkID0gdHJ1ZTsKIAogICAgICAgICBpZiAobV9zcWxpdGVEQikgewotICAgICAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBmaWxlTmFtZSBGUk9N
IEJsb2JGaWxlczsiX3MpOwotICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAg
ICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBmaWxl
TmFtZSBGUk9NIEJsb2JGaWxlczsiX3MpOworICAgICAgICAgICAgaWYgKHNxbCkgeworICAgICAg
ICAgICAgICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAgICAgICAgICAgICAgICB3aGls
ZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgICAgICAgICAgYmxvYkZpbGVz
LmFwcGVuZChzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2JGaWxlcy5hcHBlbmQoc3Fs
LT5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5z
dGVwKCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxJVEVfRE9ORSkKQEAgLTMwNTQsMjEgKzMwMjksMjAgQEAgdm9pZCBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vyc29yJiBjdXJzb3IpCiAgICAg
bV9jdXJzb3JzLnJlbW92ZShjdXJzb3IuaWRlbnRpZmllcigpKTsKIH0KIAotU1FMaXRlU3RhdGVt
ZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQo
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUwgc3FsLCBjb25zdCBjaGFyKiBzdGF0ZW1lbnQpCitT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hl
ZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTCBzcWwsIEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKIHsKICAgICBpZiAoc3FsID49IFNRTDo6SW52YWxpZCkgewogICAgICAgICBMT0dfRVJS
T1IoIkludmFsaWQgU1FMIHN0YXRlbWVudCBJRCBwYXNzZWQgdG8gY2FjaGVkU3RhdGVtZW50KCki
KTsKICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgfTsKICAg
ICB9CiAKLSAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3Fs
KV0pIHsKKyAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3Fs
KV0pCiAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2Fj
aGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldLmdldCgpIH07Ci0gICAgfQog
CiAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc3FsKV0gPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4oKm1fc3Fs
aXRlREIsIHN0YXRlbWVudCk7Ci0gICAgICAgIGlmIChtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzcWwpXS0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAg
IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldID0gbnVsbHB0cjsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlSGVhcFN0YXRlbWVu
dChxdWVyeSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQpCisgICAgICAgICAgICBtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IHN0YXRlbWVudC52YWx1ZSgpLm1v
dmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRv
UmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCld
LmdldCgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggOTZkMjhlMmU2M2Nh
YTRhNWQyOGNlYzRiOTJkY2Q3MjIwZDA3MTRiMy4uNDFkY2JmMzk1ODU5YmVmNzNhZTMzYTMzM2U0
NmZjOGEzY2E0MjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtMjA0LDcg
KzIwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludmFsaWQsCiAgICAgfTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudChTUUwsIGNvbnN0IGNoYXIq
KTsKKyAgICBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnQoU1FM
LCBBU0NJSUxpdGVyYWwpOwogICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hl
ZFN0YXRlbWVudEZvckdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhjb25zdCBJREJHZXRBbGxSZWNv
cmRzRGF0YSYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gbV9jYWNo
ZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PGludD4oU1FMOjpJbnZhbGlkKV07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJD
dXJzb3IuY3BwCmluZGV4IGMyY2VkODQxOTMwMGI1YThjNThhOGU4NDAyMjJmMjU1NjEyNWIzNWMu
LmYyODkwOGNhNTE1ZTdiOWIyZmZmODQ4OGMwMDZkMmIwZTgxYmJmNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJD
dXJzb3IuY3BwCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBib29sIFNRTGl0ZUlEQkN1cnNvcjo6Y3Jl
YXRlU1FMaXRlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogICAgIEFTU0VSVCghbV9jdXJy
ZW50VXBwZXJLZXkuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5zcWxpdGVU
cmFuc2FjdGlvbigpKTsKIAotICAgIG1fc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCksIHNx
bCk7Ci0KLSAgICBpZiAobV9zdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRh
dGFiYXNlKCkucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCkg
ewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgY3Vyc29yIHN0YXRlbWVudCAo
cHJlcGFyZS9pZCkgLSAnJXMnIiwgbV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+
ZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CisgICAgbV9zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsK
IAogICAgIHJldHVybiBiaW5kQXJndW1lbnRzKCk7CiB9CkBAIC0zNDEsMTIgKzM0MSwxMiBAQCBi
b29sIFNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRBbmRSZWJpbmRQcmVJbmRleFN0YXRlbWVudElmTmVj
ZXNzYXJ5KCkKIAogICAgIGF1dG8mIGRhdGFiYXNlID0gbV90cmFuc2FjdGlvbi0+c3FsaXRlVHJh
bnNhY3Rpb24oKS0+ZGF0YWJhc2UoKTsKICAgICBpZiAoIW1fcHJlSW5kZXhTdGF0ZW1lbnQpIHsK
LSAgICAgICAgbV9wcmVJbmRleFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50
PihkYXRhYmFzZSwgYnVpbGRQcmVJbmRleFN0YXRlbWVudChpc0RpcmVjdGlvbk5leHQoKSkpOwot
Ci0gICAgICAgIGlmIChtX3ByZUluZGV4U3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gcHJlSW5kZXhTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlSGVh
cFN0YXRlbWVudChidWlsZFByZUluZGV4U3RhdGVtZW50KGlzRGlyZWN0aW9uTmV4dCgpKSk7Cisg
ICAgICAgIGlmICghcHJlSW5kZXhTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IHByZXBhcmUgcHJlIHN0YXRlbWVudCAtICclcyciLCBkYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAg
bV9wcmVJbmRleFN0YXRlbWVudCA9IHByZUluZGV4U3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5p
cXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJlSW5kZXhTdGF0ZW1lbnQtPnJlc2V0KCkg
IT0gU1FMSVRFX09LKSB7CkBAIC01ODgsOSArNTg4LDggQEAgU1FMaXRlSURCQ3Vyc29yOjpGZXRj
aFJlc3VsdCBTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVjb3JkKFNRTGl0ZUN1
cnMKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVu
dCB8fCBtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5yZXNldCgpICE9IFNRTElURV9PSykg
ewotICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hF
UkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFuZCBvYmplY3RTdG9yZUlEID0gPzsiKTsKLSAgICAg
ICAgICAgIGlmIChtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQotICAgICAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQgPSBu
dWxscHRyOworICAgICAgICAgICAgaWYgKGF1dG8gY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQg
PSBkYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gUmVjb3Jk
cyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5kIG9iamVjdFN0b3JlSUQgPSA/OyJfcykp
CisgICAgICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVudCA9IGNhY2hlZE9i
amVjdFN0b3JlU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1lbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKaW5kZXggYWI0NzgyNmM4
M2ViYjU4Yjc3YjRhNjE1MjcxMzkyMTMzY2Y4NDBlNi4uZTc0ZTI4ZjViOWU1Zjc5ZmM1ZDVjZDBj
ZTc2NmNhMGRkZjFiZjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAKQEAgLTExMywxOCArMTEzLDE1IEBAIHN0YXRpYyBTdHJpbmcgZm9y
bWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBzcWxpdGVFcnJvckNvZGUs
IGNvbnN0CiAKIHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJh
c2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBkYi5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAo
IXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCB2YWx1ZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB2YWx1ZSk7CiAKLSAgICBy
ZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFi
YXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xMzQsMTcgKzEzMSwxNSBAQCBzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRh
dGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29ucwogCiBz
dGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2Um
IGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9PSykgewotICAg
ICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRl
eHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBh
cmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCBz
dGF0ZW1lbnQuZXJyb3IoKSwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ET05FKSB7
CkBAIC03MTQsOCArNzA5LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRU
YWJsZU5hbWVzKCkKIHsKICAgICBkaXNhYmxlQXV0aG9yaXplcigpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxp
dGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHNxbGl0ZURhdGFiYXNl
KCkucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGU9J3RhYmxlJzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVzIGZvciBkYXRhYmFzZSAlcyIs
IGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBlbmFibGVBdXRo
b3JpemVyKCk7CiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwpAQCAtNzIzLDggKzcx
OCw4IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcygpCiAK
ICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzOwogICAgIGludCByZXN1bHQ7Ci0gICAgd2hp
bGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
IFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgd2hpbGUgKChy
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJp
bmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKG5hbWUg
IT0gdW5xdWFsaWZpZWRJbmZvVGFibGVOYW1lKQogICAgICAgICAgICAgdGFibGVOYW1lcy5hcHBl
bmQobmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDViYjkwNjdhNTBjZDE0Yjc4NTE1NTQy
MjUxNmM0MzA2MjgwOTY2MzEuLjc5YTdlOGY5NjRhOWNjNmFkZTY4YmRhNmM1ODYxMmE4Njc1NDJm
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKQEAgLTIzNSwxNSArMjM1LDE1IEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9y
aWdpbikKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyB3aGVyZSBvcmln
aW49PzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkpOwogCi0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICBy
ZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogYm9vbCBEYXRhYmFz
ZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQpAQCAtMjU2LDE1ICsyNTYs
MTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnMKICAgICB9CiAKICAgICAvLyBXZSd2ZSBnb3Qg
YSB0cmFja2VyIGRhdGFiYXNlLiBTZXQgdXAgYSBxdWVyeSB0byBhc2sgZm9yIHRoZSBkYiBvZiBp
bnRlcmVzdDoKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyIpOworICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZ3Vp
ZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CiAKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRh
YmFzZUlkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlSWRl
bnRpZmllcik7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwor
ICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOwogfQogCiB1aW50NjRf
dCBEYXRhYmFzZVRyYWNrZXI6Om1heGltdW1TaXplKERhdGFiYXNlJiBkYXRhYmFzZSkKQEAgLTMy
NSwyNiArMzI1LDI2IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJh
c2VOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAgICAgLy8gU2VlIGlmIHdl
IGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9y
aWdpbj0/IEFORCBuYW1lPT87Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFt
ZSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1
bHQgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVu
ZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCkpOwotICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZv
ciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG5h
bWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB7CisgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
cGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcyk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRl
bWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAg
ICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0
aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpOworICAgICAgICBpZiAo
IWNyZWF0ZUlmTm90RXhpc3RzKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
ICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHJldHJpZXZlIGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3Jp
Z2luICVzLCBuYW1lICVzIiwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CiAg
ICAgfQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0g
Z2VuZXJhdGVEYXRhYmFzZUZpbGVOYW1lKCk7CiAKQEAgLTM3MiwxNiArMzcyLDE2IEBAIFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucygpCiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdp
bnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdp
biBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAg
aW50IHN0ZXBSZXN1bHQ7Ci0gICAgd2hpbGUgKChzdGVwUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKS0+
aXNvbGF0ZWRDb3B5KCkpOworICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KS0+aXNvbGF0ZWRDb3B5KCkpOwogICAgIG9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKIAogICAgIGlm
IChzdGVwUmVzdWx0ICE9IFNRTElURV9ET05FKQpAQCAtMzk3LDE2ICszOTcsMTYgQEAgVmVjdG9y
PFN0cmluZz4gRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzTm9Mb2NrKGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgb3IKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1QgbmFtZSBGUk9NIERhdGFiYXNlcyB3aGVyZSBvcmlnaW49PzsiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIHdo
ZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZp
ZXIoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICBpbnQgcmVzdWx0OwotICAg
IHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgbmFtZXMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAo
KHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBuYW1l
cy5hcHBlbmQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICBuYW1lcy5zaHJpbmtU
b0ZpdCgpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtNDM5LDE0ICs0
MzksMTQgQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVB
bmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAgICAgb3BlblRyYWNrZXJEYXRh
YmFzZShEb250Q3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7Ci0gICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/
Iik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgICAgICByZXR1
cm4gRGF0YWJhc2VEZXRhaWxzKCk7CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbklkZW50aWZpZXIpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Cisg
ICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgICAgIHJldHVybiBE
YXRhYmFzZURldGFpbHMoKTsKIApAQCAtNDU0LDggKzQ1NCw4IEBAIERhdGFiYXNlRGV0YWlscyBE
YXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uCiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBm
b3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKICAgICAgICAgfQotICAgICAgICBkaXNwbGF5
TmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdl
ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICBkaXNwbGF5TmFtZSA9IHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZXhwZWN0ZWRVc2FnZSA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHBhdGggPSBmdWxs
UGF0aEZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAtNDc0LDM5ICs0NzQsNDEg
QEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0
ZUlmRG9lc05vdEV4aXN0KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQotICAgICAgICBndWlkID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApOwotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAg
aWYgKGd1aWQgPT0gMCkgewotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKQotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFi
YXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2
ZXIgYmUgc2V0dGluZyBkYXRhYmFzZSBkZXRhaWxzIGZvciBhIGRhdGFiYXNlIHRoYXQgZG9lc24n
dCBhbHJlYWR5IGV4aXN0IGluIHRoZSB0cmFja2VyCi0gICAgICAgICAgICAvLyBCdXQgc2luY2Ug
dGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxl
dGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhp
cyBhbiBBU1NFUlQgY2FzZQotICAgICAgICAgICAgLy8gU28gd2UnbGwgcHJpbnQgYW4gZXJyb3Ig
aW5zdGVhZAotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmV0cmlldmUgZ3VpZCBm
b3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBp
dCBpcyBpbnZhbGlkIHRvIHNldCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBk
b2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7CisgICAgeworICAgICAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGd1aWQgRlJPTSBE
YXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyJfcyk7CisgICAgICAgIGlmICghc3Rh
dGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwg
bmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAg
ICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBndWlkID0gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKworICAgICAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBp
biB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVy
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
VGhpcyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5n
IGRhdGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QgaW4gdGhlIHRyYWNrZXIKKyAgICAgICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNr
ZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJv
bCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NF
UlQgY2FzZQorICAgICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHByaW50IGFuIGVycm9yIGluc3Rl
YWQKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZv
ciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0
IGlzIGludmFsaWQgdG8gc2V0IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRv
ZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwg
b3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FM
aXRlU3RhdGVtZW50IHVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIERhdGFiYXNl
cyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyIpOwotICAg
IGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVw
ZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIERhdGFi
YXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJFIGd1aWQ9PyJfcyk7
CisgICAgaWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0
ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50
LmJpbmRJbnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZElu
dDY0KDMsIGd1aWQpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZGlzcGxheU5h
bWUpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDIsIGVzdGltYXRlZFNpemUpOwor
ICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDMsIGd1aWQpOwogCi0gICAgaWYgKHVwZGF0
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAodXBkYXRlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gdXBkYXRlIGRldGFpbHMgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTY3MSwxNSArNjczLDE1IEBAIHVpbnQ2NF90IERhdGFiYXNlVHJhY2tl
cjo6cXVvdGFOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVvdGE7CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcXVvdGEgRlJPTSBPcmln
aW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBz
dGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9Ci0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgaWYgKHN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKIAogICAg
IHJldHVybiBxdW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpzZXRRdW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdWludDY0X3Qg
cXVvdGEpCiAKICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5O
b0xvY2sob3JpZ2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMg
VkFMVUVTICg/LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlm
ICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxp
c2ggb3JpZ2luICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBz
dGF0ZW1lbnQuYmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZp
ZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBp
bnNlcnRlZE5ld09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBT
RVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29sIGVycm9yID0gc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVS
RSBvcmlnaW49PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3RhdGVtZW50OwogICAgICAg
ICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3Rh
KTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgcXVvdGEpOwor
ICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlm
aWVyKCkpOwogCi0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQo
KTsKKyAgICAgICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiArNzUwLDE2IEBAIGJvb2wg
RGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9y
aWdpbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZlciBiZSBh
ZGRlZCB1bnRpbCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCiAgICAgQVNTRVJUKGhh
c0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUs
IHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1l
LCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlm
aWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7Cisg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlmICghc3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJhc2UgJXMgdG8gb3JpZ2lu
ICVzOiAlc1xuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBib29sIERhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBEZWxl
dGlvbk1vZAogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNl
KTsKICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3Jp
Z2luPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJE
RUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxl
dGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLmRh
dGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAoIXN0YXRlbWVudC5leGVj
dXRlQ29tbWFuZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgp
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9m
IGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJ
ZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlm
IChvcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRv
IG9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZS
T00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlmICghb3JpZ2luU3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCku
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBvcmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2luU3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQtPmV4ZWN1dGVDb21t
YW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRp
b24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi5kYXRh
YmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6
OmRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgRGVsZXRpb25N
b2QKIAogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlz
dCk7CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3Jp
Z2lucyIpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50LiIpOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKICAgICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAgICAgIH0KIApAQCAt
MTA4MSwxNyArMTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cgogCiAgICAgTG9ja0hv
bGRlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmln
aW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IGRlbGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUp
OworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaWYgKCFzdGF0ZW1l
bnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50LT5leGVjdXRlQ29tbWFu
ZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2Yg
ZGF0YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS51dGY4KCkuZGF0
YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGRvbmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTExOTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURl
bGV0ZWRPcGVuZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJh
c2VzIDogKmRhdGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0
YWJhc2VOYW1lID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRh
dGFiYXNlRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmZpbmFsaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2lu
PT8gQU5EIG5hbWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFs
c2U7CkBAIC0xMjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVE
YXRhYmFzZUZpbGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICAKICAgICAvLyBTcGVj
aWZ5IHRoYXQgd2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9kZSwgc28gYWZ0ZXIgdGhl
IG5leHQgd3JpdGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUgbG9jayB0byB0aGlzIGRh
dGFiYXNlIGZpbGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0ZW1lbnQoZGF0YWJhc2Us
ICJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBpZiAobG9ja1N0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50
IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRF
X1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBsb2NrU3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tTdGF0
ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgbG9ja2luZ19tb2RlPUVY
Q0xVU0lWRTsiX3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3RhdGVtZW50LT5zdGVwKCk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RP
TkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFkYXRhYmFz
ZS5leGVjdXRlQ29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OOyIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFN0YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJjZTVmMDUwNmRjY2U2NzEy
OWExYzNhOTVkMS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUxYzg0NjJlYTMxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcApAQCAtMTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0
YWJhc2UmIGRiKQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlID0gZGIuc3FsaXRlRGF0
YWJhc2UoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsIG1fc3Rh
dGVtZW50KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxl
IHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwg
bV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwotICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJVUFQpCi0gICAgICAgICAg
ICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291
bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQpOwor
ICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRv
IHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9z
dGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigpLCBkYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3IoKSA9PSBTUUxJVEVfSU5U
RVJSVVBUKQorICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6
OkRBVEFCQVNFX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHN0YXRlbWVudC5l
cnJvcigpLCAiaW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9lcnJv
ciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJl
cGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAi
Y291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVycm9yKCksIGRhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBi
eSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJv
bSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNh
c2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lv
dXMKLSAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgeworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1f
YXJndW1lbnRzLnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1l
dGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CiAgICAg
ICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVt
YmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBj
b3VudCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CiAg
ICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAgICAgICAgIHNldEZhaWx1
cmVEdWVUb1F1b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDksMjAgKzE0
NywyMCBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgYXV0
byByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAgICAgLy8gU3RlcCBzbyB3
ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBzd2l0Y2ggKHJl
c3VsdCkgewogICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBpbnQgY29sdW1uQ291bnQg
PSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3Rh
dGVtZW50LT5jb2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dzID0gcmVzdWx0U2V0LT5y
b3dzKCk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQot
ICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOwor
ICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRDb2x1bW5OYW1lKGkpKTsK
IAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNv
dW50OyBpKyspCi0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENv
bHVtblZhbHVlKGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQt
PmdldENvbHVtblZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9
IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGNhYmE5OGNiNTc5YmRjMTRj
MTNiYTMxMTMzNTQ2NGFlMmM1MTIxYy4uMDk3NDg4OTJkNmFkN2IwODNjNmE5NGE0MmY2MjY5M2Vj
YmIxYjE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyArOTgsMTMgQEAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXAo
Y29uc3QgVVJMJiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3Vw
cyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwg
bmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVM
TCBBTkQgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVS
TC5zdHJpbmcoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJp
bmcoKSk7CiAgICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9O
RSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMsMTQgKzExMywxNCBAQCBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVH
cm91cChjb25zdCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCi0gICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1bnNpZ25lZCBuZXdlc3RD
YWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDIpKTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVTdG9y
YWdlSUQpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICAKICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBt
YW5pZmVzdFVSTCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91cC5zZXRTdG9yYWdlSUQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAg
ICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXR1
cm4gJmdyb3VwOwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2ggRlJPTSBDYWNoZUdyb3Vw
cyIpOyAgICAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBtYW5p
ZmVzdEhvc3RIYXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc3RhdGVtZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKLSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApKSk7CiB9ICAgIAogCiBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3Vw
Rm9yVVJMKGNvbnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25z
dCBVUkwmIHVybCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9y
IGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RD
YWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJM
LCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBO
VUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwg
c3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0g
VVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9j
YWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQog
CiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hl
Y2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEg
bWF0Y2hpbmcgVVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2ln
bmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQ2NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2Fj
aGVJRCk7CiAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0
MCw3ICsyNDAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCgq
dGhpcywgbWFuaWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOworICAgICAgICBncm91
cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50NjQoMCkpKTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdyb3VwLm1hbmlmZXN0VVJM
KCkuc3RyaW5nKCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEzIEBAIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZv
clVSTChjb25zdCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICAvLyBD
aGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2Vz
dCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBz
IFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGls
ZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOwor
ICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5U
ZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVz
dFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5Niw3ICsyOTYsNyBA
QCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFj
a0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUg
Z3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSBy
ZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJhY2sgbmFtZXNwYWNlLgot
ICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hl
SUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7
CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAKICAgICAg
ICAgVVJMIGZhbGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChj
b25zdCBVCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvJiBncm91cCA9ICpu
ZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgIGdy
b3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgICAgICBncm91cC5zZXRO
ZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2NhY2hlc0lu
TWVtb3J5LnNldChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAmZ3JvdXApOwpAQCAtNDE2
LDE3ICs0MTYsMTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVv
dGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAgICAvLyBJZiBhbiBPcmln
aW4gcmVjb3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQgcXVv
dGEgd2lsbCBiZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYgYSBy
ZWNvcmQgZXhpc3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAvLyBp
ZiBhIHF1b3RhIG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwuCi0g
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKHF1
b3RhKSwgcXVvdGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEpLCBxdW90YSBGUk9NIE9y
aWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAgICAvLyBS
ZXR1cm4gdGhlIHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVmYXVsdC4KICAgICBpZiAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNOb1JlY29yZCA9IHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90YSA9IHdhc05vUmVjb3Jk
ID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7Cisg
ICAgICAgIGJvb2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsK
KyAgICAgICAgcXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9yaWdpblF1b3RhIDogc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC00NDAsMTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxj
dWxhdGVVc2FnZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmCiAKICAgICAvLyBJ
ZiBhbiBPcmlnaW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSBTVU0gd2lsbCBiZSBu
dWxsLAogICAgIC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVjdGVkLCB3aGVuIGNvbnZl
cnRpbmcgdG8gYSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91
cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2Fj
aGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdyb3VwcyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3Jp
Z2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVz
IE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/
Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
c3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1l
bnQtPnN0ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICB1
c2FnZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgdXNhZ2UgPSBzdGF0
ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTQ3MCw0MCArNDcwLDQwIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1
bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShjb25zCiAKICAgICAvLyBS
ZW1haW5pbmcgc2l6ZSA9IHRvdGFsIG9yaWdpbiBxdW90YSAtIHNpemUgb2YgYWxsIGNhY2hlcyB3
aXRoIG9yaWdpbiBleGNsdWRpbmcgdGhlIHByb3ZpZGVkIGNhY2hlLgogICAgIC8vIEtlZXAgdHJh
Y2sgb2YgdGhlIG51bWJlciBvZiBjYWNoZXMgc28gd2UgY2FuIHRlbGwgaWYgdGhlIHJlc3VsdCB3
YXMgYSBjYWxjdWxhdGlvbiBvciBub3QuCi0gICAgY29uc3QgY2hhciogcXVlcnk7CiAgICAgaW50
NjRfdCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIgPSBjYWNoZSA/IGNhY2hlLT5zdG9yYWdlSUQo
KSA6IDA7Ci0gICAgaWYgKGV4Y2x1ZGluZ0NhY2hlSWRlbnRpZmllciAhPSAwKSB7Ci0gICAgICAg
IHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChDYWNoZXMuc2l6ZSksIE9yaWdpbnMucXVvdGEgLSBTVU0o
Q2FjaGVzLnNpemUpIgotICAgICAgICAgICAgICAgICIgIEZST00gQ2FjaGVHcm91cHMiCi0gICAg
ICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2luID0g
T3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIENhY2hlcyBPTiBD
YWNoZUdyb3Vwcy5pZCA9IENhY2hlcy5jYWNoZUdyb3VwIgotICAgICAgICAgICAgICAgICIgV0hF
UkUgT3JpZ2lucy5vcmlnaW49PyIKLSAgICAgICAgICAgICAgICAiICAgQU5EIENhY2hlcy5pZCE9
PyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcXVlcnkgPSAiU0VMRUNUIENPVU5UKENhY2hlcy5z
aXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAgICAgICAg
IiAgRlJPTSBDYWNoZUdyb3VwcyIKLSAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gT3JpZ2lu
cyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKLSAgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3Jv
dXAiCi0gICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdpbj0/IjsKLSAgICB9Ci0K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBxdWVyeSA9IFtl
eGNsdWRpbmdDYWNoZUlkZW50aWZpZXJdKCkgeworICAgICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJ
ZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZXR1cm4gIlNFTEVDVCBDT1VOVChDYWNoZXMuc2l6
ZSksIE9yaWdpbnMucXVvdGEgLSBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAgICAgICAgICAgICAg
ICAiICBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4g
T3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIKKyAgICAgICAg
ICAgICAgICAgICAgIiBJTk5FUiBKT0lOIENhY2hlcyBPTiBDYWNoZUdyb3Vwcy5pZCA9IENhY2hl
cy5jYWNoZUdyb3VwIgorICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2lu
PT8iCisgICAgICAgICAgICAgICAgICAgICIgICBBTkQgQ2FjaGVzLmlkIT0/Il9zOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKENhY2hlcy5zaXplKSwgT3JpZ2lucy5x
dW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3Jv
dXBzIgorICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVHcm91cHMu
b3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCisgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2Fj
aGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisgICAgICAgICAgICAg
ICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3M7CisgICAgfSgpOworCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKICAgICBpZiAo
ZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDApCi0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAKICAg
ICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0aGVuIHdlIGhhdmUgdG8gcXVlcnkgdGhlIG9y
aWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZvciBpdHMgcXVvdGEuIE90aGVyd2lzZSB3ZSBj
YW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVzID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYgKG51bWJlck9mQ2FjaGVzID09IDApCiAgICAg
ICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIHJlbWFpbmluZ1NpemUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1haW5pbmdTaXplID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVtYWluaW5nU2l6ZSA9IHN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTIyLDE0
ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVv
dGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG8KICAgICBpZiAoIWVuc3VyZU9yaWdp
blJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgT3JpZ2lucyBTRVQgcXVv
dGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8i
X3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICB1cGRhdGVTdGF0
ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpOwor
ICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDEsIHF1b3RhKTsKKyAgICB1cGRhdGVTdGF0
ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
IAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KHVwZGF0ZVN0YXRlbWVudCk7CisgICAgcmV0
dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3RhdGVtZW50LnZhbHVlKCkpOwogfQogCiBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcm
IHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2
ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2Vy
OjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbklu
dCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGludCB2ZXJzaW9uID0gdmVyc2lv
blN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6IDA7CiAgICAg
aWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzAs
MTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFW
ZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNR
TCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBSQUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hl
bWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkpID49IHVudXNlZE51bUJ5dGVzKTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCh1c2VyVmVyc2lvblNRTCk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBleGVjdXRlU3RhdGVt
ZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSk7
CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1pdCgpOwogfQogICAgIApAQCAtNjUyLDggKzY1
Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FM
aXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tl
cjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVt
ZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJP
UigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50
IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5xdWVy
eSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBM
T0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0
YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBAIC02NzAsMTUgKzY3MCwxNSBAQCBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
LCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5IHRvIHJlcGFpciBpdC4KICAgICBkZWxldGVD
YWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVzdFVSTCgpLnN0cmluZygpKTsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlR3Jv
dXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVzdFVSTCwgb3JpZ2luKSBWQUxVRVMgKD8sID8s
ID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBD
YWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwgbWFuaWZlc3RVUkwsIG9yaWdpbikgVkFMVUVT
ICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgdXJsSG9zdEhhc2goZ3JvdXAtPm1hbmlm
ZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJM
KCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgzLCBncm91cC0+b3JpZ2luKCku
ZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgx
LCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkpOworICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOworICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2Rh
dGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAgLTY5OCwxNCArNjk4LDE0IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNv
dXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAh
PSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91cm5hbCk7CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdy
b3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUpIFZBTFVFUyAoPywg
PykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgp
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlE
KCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlLT5lc3RpbWF0ZWRTaXplSW5T
dG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlEID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwpAQCAtNzI1LDI2ICs3MjUs
MjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICBjb25zdCBWZWN0b3I8VVJMPiYgb25s
aW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFsbG93bGlzdCgpOwogICAgIHsKICAgICAgICAg
Zm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxpbmVBbGxvd2xpc3QpIHsKLSAgICAgICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hl
V2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICAgICAg
c3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVy
bCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmluZygpKTsKLSAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOworICAgICAgICAgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUgb25saW5lIGFsbG93bGlzdCB3aWxkY2FyZCBm
bGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBj
YWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAg
ICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJU
IElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFM
VUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmFsbG93
c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBj
YWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5h
bGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0
KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3Rh
dGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC03NTIsMTQgKzc1
NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNvbnN0IEZhbGxiYWNrVVJMVmVj
dG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFsbGJhY2tVUkxzKCk7CiAgICAgewogICAgICAg
ICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFsbGJhY2tVUkxzKSB7Ci0gICAgICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBGYWxsYmFj
a1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwsIGNhY2hlKSBWQUxVRVMgKD8sID8sID8pIik7
Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEZhbGxiYWNr
VVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUpIFZBTFVFUyAoPywgPywgPykiX3Mp
OworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmly
c3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGZhbGxiYWNr
VVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMs
IGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgZmFs
bGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAgICAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWdu
ZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0
YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQg
SU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwotICAg
IGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBkYXRh
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNo
ZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFk
YXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAKICAgICBTdHJpbmcg
ZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+cGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
ZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoRmlsZU5hbWUocmVzb3Vy
Y2UtPnBhdGgoKSkpOworICAgICAgICBkYXRhU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBGaWxlU3lz
dGVtOjpwYXRoRmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOwogICAgIGVsc2UgaWYgKHNob3Vs
ZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKHJlc291cmNlKSkgewogICAgICAgICAvLyBGaXJzdCwg
Y2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5nIHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUg
bWF4aW11bSB0b3RhbCBxdW90YS4gV2UgZG9uJ3QgbmVlZAogICAgICAgICAvLyB0byBjaGVjayB0
aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJlLCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0
b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgxMywxMyArODE2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVu
c2lnbmVkCiAgICAgICAgIAogICAgICAgICBmdWxsUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CiAgICAgICAgIHJlc291
cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgy
LCBwYXRoKTsKKyAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZFRleHQoMiwgcGF0aCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKQotICAgICAgICAg
ICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgcmVz
b3VyY2UtPmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZEJs
b2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5kYXRhKCksIHJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsK
KyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgLy8g
Q2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKICAgICAgICAg
aWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVG
aWxlKGZ1bGxQYXRoKTsKQEAgLTg0MywzNiArODQ2LDM2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2ln
bmVkCiAgICAgCiAgICAgU3RyaW5nIGhlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVS
TCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywg
PywgPywgPywgPywgPywgPykiKTsKLSAgICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIHJlc291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXND
b2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05h
bWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3MpOworICAgIGlmICghcmVzb3VyY2VT
dGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUaGUgc2FtZSBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgYXJlIHVzZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpzaXplKCkKICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2Yg
YW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlIG9iamVjdC4gSWYKICAgICAvLyB5b3UgY2hhbmdl
IHRoZSBjb2RlIGJlbG93LCBwbGVhc2UgYWxzbyBjaGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpzaXplKCkuCi0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2Ut
PnVybCgpLnN0cmluZygpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVz
b3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Ci0gICAgcmVzb3VyY2VTdGF0ZW1l
bnQuYmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkpOwotICAg
IHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDQsIGhlYWRlcnMpOwotICAgIHJlc291cmNlU3Rh
dGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRhSWQpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRU
ZXh0KDYsIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwotICAgIHJlc291cmNlU3Rh
dGVtZW50LmJpbmRUZXh0KDcsIHJlc291cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUo
KSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQocmVzb3VyY2VTdGF0ZW1lbnQpKQorICAg
IHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkp
OworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNl
KCkuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDMs
IHJlc291cmNlLT5yZXNwb25zZSgpLnVybCgpLnN0cmluZygpKTsKKyAgICByZXNvdXJjZVN0YXRl
bWVudC0+YmluZFRleHQoNCwgaGVhZGVycyk7CisgICAgcmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCg1LCBkYXRhSWQpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCg2LCByZXNv
dXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKKyAgICByZXNvdXJjZVN0YXRlbWVudC0+Ymlu
ZFRleHQoNywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpKTsKKworICAg
IGlmICghZXhlY3V0ZVN0YXRlbWVudChyZXNvdXJjZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgcmVzb3VyY2VJZCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKICAgICAKICAgICAvLyBG
aW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hlIGVudHJ5Ci0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUVudHJpZXMgKGNhY2hlLCB0
eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/LCA/LCA/KSIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hlRW50cmllcyAoY2FjaGUs
IHR5cGUsIHJlc291cmNlKSBWQUxVRVMgKD8sID8sID8pIl9zKTsKKyAgICBpZiAoIWVudHJ5U3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgZW50cnlTdGF0ZW1lbnQu
YmluZEludDY0KDEsIGNhY2hlU3RvcmFnZUlEKTsKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50
NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDMs
IHJlc291cmNlSWQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGVTdG9y
YWdlSUQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUo
KSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgzLCByZXNvdXJjZUlkKTsKICAgICAK
LSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQpKQorICAgIGlmICghZXhl
Y3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIC8vIERpZCB3ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNl
IGRhdGEgdG8gYSBmaWxlPyBJZiBzbywKQEAgLTg5MywxNCArODk2LDE0IEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiByZXNvdXJjCiAgICAgQVNTRVJUKHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKICAgICAv
LyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGVudHJ5U3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVFbnRyaWVzIFNFVCB0eXBlPT8gV0hFUkUgcmVz
b3VyY2U9PyIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlVQREFURSBDYWNoZUVudHJpZXMgU0VUIHR5cGU9PyBXSEVSRSByZXNvdXJjZT0/Il9zKTsKKyAg
ICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbnRy
eVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0
ZW1lbnQuYmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgZW50cnlTdGF0
ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+dHlwZSgpKTsKKyAgICBlbnRyeVN0YXRlbWVu
dC0+YmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKLSAgICByZXR1cm4gZXhl
Y3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1l
bnQoZW50cnlTdGF0ZW1lbnQudmFsdWUoKSk7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0
aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2LDE0ICs5MjksMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBw
bGljYXQKICAgICB9CiAKICAgICAvLyBBIHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUu
IFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBzaXplIGZvciB0aGUgY2FjaGUuCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNpemVVcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VU
IHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc2l6ZVVwZGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8g
V0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzaXplVXBkYXRlU3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNv
dXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50
LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAg
ICBzaXplVXBkYXRlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsK
IAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICBp
ZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6ZVVwZGF0ZVN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21t
aXQoKTsKQEAgLTk0MywxMyArOTQ2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpo
YXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9y
aWdpblN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBx
dW90YSkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGluc2VydE9yaWdpblN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBx
dW90YSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnRPcmlnaW5TdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGluc2VydE9yaWdpblN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW5zZXJ0
T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRPcmlnaW5RdW90YSk7Ci0gICAg
aWYgKCFleGVjdXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRlbWVudCkpCisgICAgaW5zZXJ0
T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgbV9kZWZh
dWx0T3JpZ2luUXVvdGEpOworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChpbnNlcnRPcmlnaW5T
dGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwxNiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCYgZ3JvdXAsIEFwcAogICAg
IAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KICAgICAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91
cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hF
UkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgZmFpbHVyZVJlYXNv
biA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91cC5uZXdlc3RDYWNoZSgpLT5z
dG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBncm91cC5zdG9yYWdlSUQo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3JvdXAubmV3ZXN0Q2FjaGUoKS0+c3Rv
cmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGdyb3VwLnN0b3JhZ2VJRCgp
KTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkgeworICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpIHsKICAgICAgICAgZmFpbHVy
ZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhl
YWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNo
ZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7CiAgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tl
cjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNo
ZVN0YXRlbWVudChtX2RhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05h
bWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBh
dGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVu
dHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291
cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/
Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIGNhY2hlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KAorICAg
ICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGlu
Z05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRh
LnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNo
ZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAgICAgICAiSU5ORVIgSk9J
TiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNl
cy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Il9zKTsKKyAgICBpZiAoIWNhY2hlU3Rh
dGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3Rh
dGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJ
bnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGNhY2hlU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3Rv
cmFnZUlEKTsKIAogICAgIGF1dG8gY2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsK
IAogICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBtX2ZsYXRGaWxlU3ViZGlyZWN0b3J5TmFt
ZSk7CiAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFVSTCB1cmwoeyB9LCBjYWNoZVN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3Rh
dGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIHVybCh7IH0sIGNh
Y2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBo
dHRwU3RhdHVzQ29kZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludCgxKTsKKyAgICAgICAg
aW50IGh0dHBTdGF0dXNDb2RlID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKTsKIAot
ICAgICAgICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhY2hlU3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMikpOwogCiAgICAg
ICAgIFZlY3RvcjxjaGFyPiBibG9iOwotICAgICAgICBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoNiwgYmxvYik7CisgICAgICAgIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5C
bG9iQXNWZWN0b3IoNiwgYmxvYik7CiAgICAgICAgIAogICAgICAgICBhdXRvIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJsb2IpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmlu
ZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg3KTsKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg3KTsKICAgICAgICAgbG9uZyBs
b25nIHNpemUgPSAwOwogICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBz
aXplID0gZGF0YS0+c2l6ZSgpOwpAQCAtMTEyOSwxMyArMTEzMiwxMyBAQCBSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBz
dG9yYWdlSUQpCiAgICAgICAgICAgICBzaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUocGF0aCku
dmFsdWVPcigwKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3RyaW5nIG1pbWVUeXBl
ID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgzKTsKLSAgICAgICAgU3RyaW5nIHRleHRF
bmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDQpOworICAgICAgICBT
dHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgzKTsKKyAgICAg
ICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4
dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBt
aW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7CiAgICAgICAgIHJlc3BvbnNlLnNldEhU
VFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAotICAgICAgICBTdHJpbmcgaGVhZGVycyA9
IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7CisgICAgICAgIFN0cmluZyBoZWFkZXJz
ID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoNSk7CiAgICAgICAgIHBhcnNlSGVhZGVy
cyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAogICAgICAgICBhdXRvIHJlc291cmNlID0g
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlwZSwgV1RG
TW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsxMTU4LDE0IEBAIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0
b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBvbmxpbmUgYWxsb3dsaXN0Ci0gICAg
U1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHVy
bCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBjYWNoZT0/Iik7Ci0gICAgaWYgKGFsbG93
bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gYWxsb3dsaXN0
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdXJsIEZST00g
Q2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghYWxsb3dsaXN0
U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhbGxvd2xpc3RTdGF0ZW1l
bnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgYWxsb3dsaXN0U3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBWZWN0b3I8VVJMPiBhbGxvd2xpc3Q7Ci0g
ICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVf
Uk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0sIGFsbG93bGlzdFN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0
ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgYWxsb3dsaXN0LmFwcGVuZChV
UkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxv
YWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJ
RCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0KGFsbG93bGlzdCk7CiAKICAgICAvLyBM
b2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZy4KLSAgICBTUUxpdGVTdGF0ZW1lbnQg
YWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCB3aWxkY2FyZCBG
Uk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzIFdIRVJFIGNhY2hlPT8iKTsKLSAgICBp
ZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNoZUFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0
cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVu
dC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAgCi0gICAgcmVzdWx0ID0gYWxsb3dsaXN0
V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJlc3VsdCA9IGFsbG93bGlzdFdpbGRjYXJk
U3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKQogICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hlIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNh
cmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAKLSAg
ICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29y
a1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSk7
CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9E
T05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBtYW55IHJvd3MgZm9yIG9ubGluZSBhbGxv
d2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8gTG9hZCBmYWxsYmFjayBVUkxzLgotICAg
IFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG5h
bWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFja1VSTHMgV0hFUkUgY2FjaGU9PyIpOwot
ICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFsbGJhY2tVUkxzIFdIRVJFIGNhY2hlPT8i
X3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGZh
bGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBGYWxs
YmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBmYWxsYmFj
a1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIAotICAgICAgICBmYWxsYmFja1VSTHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVt
blRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKSkp
OworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihVUkwo
eyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSksIFVSTCh7IH0sIGZhbGxi
YWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBmYWxsYmFjayBV
UkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTEyMTks
MjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxp
Y2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlE
KCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgYnkgZGF0
YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlcyBXSEVSRSBpZD0/Il9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5k
SW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRl
bWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKTsKIAogICAgIGNhY2hlLT5j
bGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgp
ID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlcmUgYXJlIG5vIHRyaWdnZXJz
IG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5IHRoZSBjYWNoZSBoYWQgdG8gYmUgcmVt
b3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZ3JvdXBTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iKTsK
LSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
ICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iX3MpOworICAgICAgICBpZiAoIWdyb3Vw
U3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgZ3JvdXBT
dGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7Ci0gICAg
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOworICAgICAgICBncm91cFN0YXRl
bWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgICAg
IGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQudmFsdWUoKSk7CiAKICAgICAgICAgY2Fj
aGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgfQpAQCAtMTMxNiwxNCArMTMxOSwx
MyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlm
ZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFVSTHMobV9kYXRhYmFz
ZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hlR3JvdXBzIik7Ci0KLSAgICBpZiAoc2Vs
ZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc2VsZWN0VVJMcyA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlmZXN0VVJMIEZST00gQ2FjaGVH
cm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0gICAgd2hpbGUgKHNlbGVjdFVSTHMuc3Rl
cCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMuYXBwZW5kKFVSTCh7IH0sIHNlbGVjdFVS
THMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzZWxlY3RVUkxzLT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQoVVJMKHsgfSwgc2VsZWN0VVJMcy0+Z2V0
Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVybHM7CiB9CkBAIC0xMzMxLDMwICsxMzMz
LDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFu
aWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3Jv
dXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKIHsKICAgICBBU1NFUlQoU1FMaXRl
RGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdy
b3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKGlkU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9
PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZlc3RVUkwpOworICAgIGlkU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAgICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1l
bnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50
NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgaW50NjRf
dCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZXMg
V0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGNhY2hlR3JvdXA9PyJfcyk7Cisg
ICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FM
aXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNo
ZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgaWQ9PyJfcyk7CisgICAg
aWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2FjaGVT
dGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwotICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2Fj
aGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91cElkKTsK
LSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50KTsKKyAgICBjYWNoZVN0YXRlbWVu
dC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0
ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBncm91cElk
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50LnZhbHVlKCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDExLDIwIEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBpbiBEZWxldGVkQ2FjaGVSZXNvdXJjZXMg
dGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVSZXNvdXJjZURhdGE6Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgRGVsZXRlZENhY2hlUmVz
b3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0aHMgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCAiCiAgICAgICAgICJG
Uk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAgICAgICJMRUZUIEpPSU4gQ2FjaGVSZXNv
dXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPSBDYWNo
ZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldIRVJFIChTRUxFQ1QgRGVsZXRlZENhY2hl
UmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURhdGEucGF0aCkgSVMgTlVMTCIpOworICAg
ICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJl
c291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAgICAKLSAgICBpZiAoc2VsZWN0UGF0aHMu
cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAoIXNlbGVjdFBhdGhzKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhzLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQor
ICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQYXRocy0+Z2V0Q29s
dW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmdWxsUGF0aCk7
Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgpID09IFNRTElURV9ST1cpOworICAgIH0g
d2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVyk7CiAgICAgCiAgICAgZXhl
Y3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyIpOwogfQpA
QCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0
YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIHBhdGggTk9U
IE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIl9zKTsK
KyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxv
YWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBsb25n
IGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxl
U3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0
RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIGZ1bGxQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBzZWxlY3RQYXRocy5nZXRDb2x1
bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7CisgICAgICAgIGF1dG8gZnVsbFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHNlbGVjdFBhdGhzLT5nZXRDb2x1bW5UZXh0KDAp
KTsKICAgICAgICAgdG90YWxTaXplICs9IEZpbGVTeXN0ZW06OmZpbGVTaXplKGZ1bGxQYXRoKS52
YWx1ZU9yKDApOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IGY4ZWM5Y2Y0N2Q0YzFmYjAzOGZm
NTc3NjNjMTJhZGJiODc5NTIwZDMuLjJiZjM5MTJiZDRiNzE3MjIzYjQwY2M0OWMxNjZjMWM5OTA1
NTI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckRCLmNwcApAQCAtMTgxLDggKzE4MSw2IEBAIGJvb2wgQ29va2llSmFyREI6Om9w
ZW5EYXRhYmFzZSgpCiB2b2lkIENvb2tpZUphckRCOjpjbG9zZURhdGFiYXNlKCkKIHsKICAgICBp
ZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRl
bWVudCA6IG1fc3RhdGVtZW50cykKLSAgICAgICAgICAgIHN0YXRlbWVudC52YWx1ZS5nZXQoKS0+
ZmluYWxpemUoKTsKICAgICAgICAgbV9zdGF0ZW1lbnRzLmNsZWFyKCk7CiAgICAgICAgIG1fZGF0
YWJhc2UuY2xvc2UoKTsKICAgICB9CkBAIC0xOTMsNyArMTkxLDggQEAgdm9pZCBDb29raWVKYXJE
Qjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYgKGlzT25NZW1vcnkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3Mp
OworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjczLDI1ICsyNzIsMjUgQEAgYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRhYmFz
ZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW50ZWdyaXR5KG1f
ZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAgaWYgKGludGVncml0eS5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3JpdHkgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3MpOworICAgIGlmICghaW50ZWdy
aXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgZGF0YWJhc2UgaW50
ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQg
cmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50IHJlc3VsdENvZGUgPSBpbnRl
Z3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxJVEVfUk9XKSB7CiAgICAg
ICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0ZXAgcmV0dXJuZWQgJWQiLCBy
ZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCBjb2x1
bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbHVtbnMgPSBpbnRlZ3Jp
dHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0gMSkgewogICAgICAgICBMT0df
RVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBpbnRlZ3JpdHkgY2hlY2ssIHNo
b3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5UZXh0KDApOworICAgIFN0
cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5UZXh0KDApOwogCiAgICAgaWYg
KHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJST1IoIkNvb2tpZSBkYXRhYmFz
ZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1bHRUZXh0LmFzY2lpKCkuZGF0YSgp
KTsKQEAgLTM4NiwyMCArMzg1LDE2IEBAIE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVK
YXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAKICAgICBS
ZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVlc3RVcmwgfTsKIAotICAg
IGNvbnN0IFN0cmluZyBzcWwgPQotICAgICAgICAiU0VMRUNUIG5hbWUsIHZhbHVlLCBkb21haW4s
IHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24gRlJPTSBDb29raWUgV0hF
UkUgIlwKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0cG9ubHksIHNlY3VyZSwg
c2Vzc2lvbiBGUk9NIENvb2tpZSBXSEVSRSAiXAogICAgICAgICAiKE5PVCAoKHNlc3Npb24gPSAw
KSBBTkQgKGV4cGlyZXMgPCA/KSkpIgogICAgICAgICAiQU5EIChodHRwb25seSA9IENPQUxFU0NF
KE5VTExJRig/LCAtMSksIGh0dHBvbmx5KSkgIlwKICAgICAgICAgIkFORCAoc2VjdXJlID0gQ09B
TEVTQ0UoTlVMTElGKD8sIC0xKSwgc2VjdXJlKSkgIlwKICAgICAgICAgIkFORCAoc2Vzc2lvbiA9
IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlc3Npb24pKSAiXAogICAgICAgICAiQU5EICgoZG9t
YWluID0gPykgT1IgKGRvbWFpbiBHTE9CID8pKSAiXAotICAgICAgICAiT1JERVIgQlkgbGVuZ3Ro
KHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIjsKLQotICAgIGF1dG8gcHN0bXQgPSBtYWtlVW5pcXVl
PFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKyAgICAgICAgIk9SREVSIEJZIGxl
bmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCJfcyk7CiAgICAgaWYgKCFwc3RtdCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBzdG10LT5wcmVwYXJlKCk7CiAgICAgcHN0
bXQtPmJpbmRJbnQ2NCgxLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxs
aXNlY29uZHMoKSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMiwgaHR0cE9ubHkgPyAqaHR0cE9ubHkg
OiAtMSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMywgc2VjdXJlID8gKnNlY3VyZSA6IC0xKTsKQEAg
LTQxMSw5ICs0MDYsNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2llPj4gQ29va2llSmFyREI6OnNl
YXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdAogICAgIGVsc2UKICAgICAg
ICAgcHN0bXQtPmJpbmRUZXh0KDYsIFN0cmluZygiKi4iKSArIHJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKTsKIAotICAgIGlmICghcHN0bXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KICAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwogCiAgICAgd2hpbGUgKHBzdG10LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgewpAQCAtNDUzLDcgKzQ0NSw2IEBAIE9wdGlvbmFsPFZlY3RvcjxD
b29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHks
IGNvbnN0CiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gY29va2llU2Vzc2lvbjsKICAgICAgICAg
cmVzdWx0cy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsKICAgICB9Ci0gICAgcHN0bXQtPmZpbmFs
aXplKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTQ2MywxMSArNDU0LDExIEBAIFZl
Y3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxDb29raWVzKCkKICAgICBWZWN0b3I8Q29v
a2llPiByZXN1bHQ7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAhbV9kYXRhYmFzZS5pc09wZW4o
KSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmcgc3FsID0gIlNFTEVD
VCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBz
ZXNzaW9uIEZST00gQ29va2llIl9zOwotICAgIGF1dG8gcHN0bXQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKworICAgIGF1dG8gcHN0bXQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBl
eHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIl9zKTsKICAgICBp
ZiAoIXBzdG10KQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHBzdG10LT5wcmVwYXJlKCk7
CisKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIENv
b2tpZSBjb29raWU7CiAgICAgICAgIGNvb2tpZS5uYW1lID0gcHN0bXQtPmdldENvbHVtblRleHQo
MCk7CkBAIC00ODIsNyArNDczLDYgQEAgVmVjdG9yPENvb2tpZT4gQ29va2llSmFyREI6OmdldEFs
bENvb2tpZXMoKQogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IChwc3RtdC0+Z2V0Q29sdW1uSW50
KDcpID09IDEpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29va2llKSk7CiAgICAg
fQotICAgIHBzdG10LT5maW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU3
MSwxNiArNTYxLDE1IEBAIGJvb2wgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKIEhhc2hTZXQ8U3RyaW5n
PiBDb29raWVKYXJEQjo6YWxsRG9tYWlucygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCBTRUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsKLSAgICBzdGF0ZW1lbnQu
cHJlcGFyZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IGRvbWFpbnM7Ci0gICAgd2hpbGUg
KHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIGRvbWFpbiA9
IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZG9tYWluID0gc3RhdGVtZW50LT5nZXRD
b2x1bW5UZXh0KDApOwogICAgICAgICBkb21haW5zLmFkZChkb21haW4pOwogICAgIH0KLQotICAg
IHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgIHJldHVybiBkb21haW5zOwogfQogCkBAIC02Mzcs
MTAgKzYyNiw5IEBAIGJvb2wgQ29va2llSmFyREI6OmRlbGV0ZUFsbENvb2tpZXMoKQogCiB2b2lk
IENvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQog
ewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0
YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJlcGFyZSgpOwotICAgIEFT
U0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICBtX3N0YXRlbWVudHMuYWRk
KHNxbCwgV1RGTW92ZShzdGF0ZW1lbnQpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsKKyAg
ICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgc3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRy
KCkpOwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVu
dChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQxLDEzIEBAIFNRTGl0ZVN0YXRlbWVu
dCYgQ29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogCiBi
b29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYgc3FsKQogewotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0g
c3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXplKCk7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5lcnJv
cigpKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlICVzIGVycm9yOiAl
cyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5zdGVw
KCk7CiAgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KSkgewogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEo
KSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJE
Qi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgK
aW5kZXggN2MwZWE0N2VjZTRmZjBkNDcyY2U1OTVjOTFlYTFjZmE5MGIyNWNhNy4uNDFlZDk0NDdj
NDA2OGY1YzA2ODkxZDgyNTFjNWM5YzFmMDc2YjM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKQEAgLTkzLDcgKzkzLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKICAgICB2b2lkIGRlbGV0
ZUFsbFRhYmxlcygpOwogCi0gICAgdm9pZCBjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgY3JlYXRlUHJlcGFyZVN0YXRlbWVudChBU0NJSUxpdGVyYWwpOwog
ICAgIFNRTGl0ZVN0YXRlbWVudCYgcHJlcGFyZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJik7CiAg
ICAgYm9vbCBleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCBjMjM5YjQ0MjBiMzI1YjAwNjRj
NGY2YWI2OWIxYjgxYjdhMGFkN2JmLi4zMDc1ODhiOGI2YmNkNDJlMmM4MjEwNmRlNmU2MWUzOGIz
ZTA2YzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFz
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBPcGVuTW9kZSBvcGVuTW9kZSkKIAogICAgIHsKICAgICAgICAgU1FM
aXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwot
ICAgICAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSB0ZW1wX3N0b3JlID0g
TUVNT1JZOyJfcykuZXhlY3V0ZUNvbW1hbmQoKSkKKyAgICAgICAgaWYgKCFleGVjdXRlQ29tbWFu
ZCgiUFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7Il9zKSkKICAgICAgICAgICAgIExPR19FUlJP
UigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQgdGVtcF9zdG9yZSB0byBtZW1vcnkiKTsK
ICAgICB9CiAKQEAgLTE5NywxMCArMTk3LDEwIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdB
TEpvdXJuYWxNb2RlKCkKIHsKICAgICBtX3VzZVdBTCA9IHRydWU7CiAgICAgewotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgd2FsU3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIGpvdXJuYWxfbW9kZT1X
QUw7Il9zKTsKLSAgICAgICAgaWYgKHdhbFN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgYXV0byB3YWxTdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3MpOworICAgICAgICBpZiAod2FsU3RhdGVtZW50
ICYmIHdhbFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKICNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICAgICBTdHJpbmcgbW9kZSA9IHdhbFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
OworICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSB3YWxTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUs
ICJ3YWwiKSkKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoImpvdXJuYWxfbW9kZSBvZiBkYXRh
YmFzZSBzaG91bGQgYmUgJ1dBTCcsIGJ1dCBpcyAnJXMnIiwgbW9kZS51dGY4KCkuZGF0YSgpKTsK
ICNlbmRpZgpAQCAtMjEwLDkgKzIxMCw5IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpv
dXJuYWxNb2RlKCkKIAogICAgIHsKICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
Y2hlY2twb2ludFN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSB3YWxfY2hlY2twb2ludChUUlVOQ0FU
RSkiX3MpOwotICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgp
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSkKKyAgICAgICAgYXV0byBjaGVja3BvaW50U3RhdGVtZW50ID0gcHJlcGFy
ZVN0YXRlbWVudCgiUFJBR01BIHdhbF9jaGVja3BvaW50KFRSVU5DQVRFKSJfcyk7CisgICAgICAg
IGlmIChjaGVja3BvaW50U3RhdGVtZW50ICYmIGNoZWNrcG9pbnRTdGF0ZW1lbnQtPnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBpZiAoY2hlY2twb2ludFN0YXRlbWVudC0+Z2V0
Q29sdW1uSW50KDApKQogICAgICAgICAgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTGl0ZSBk
YXRhYmFzZSBjaGVja3BvaW50IGlzIGJsb2NrZWQiKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBmYWlsZWQgdG8gY2hlY2twb2ludDogJXMi
LCBsYXN0RXJyb3JNc2coKSk7CkBAIC0yNzIsOCArMjcyLDggQEAgaW50NjRfdCBTUUxpdGVEYXRh
YmFzZTo6bWF4aW11bVNpemUoKQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9h
dXRob3JpemVyTG9jayk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOwotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIG1heF9wYWdlX2NvdW50
Il9zKTsKLSAgICAgICAgbWF4UGFnZUNvdW50ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
OworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBtYXhf
cGFnZV9jb3VudCJfcyk7CisgICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRy
dWUpOwogICAgIH0KIApAQCAtMjkzLDkgKzI5Myw4IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNl
dE1heGltdW1TaXplKGludDY0X3Qgc2l6ZSkKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhv
cml6ZXJMb2NrKTsKICAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsIG1ha2VTdHJpbmcoIlBSQUdNQSBtYXhfcGFnZV9jb3Vu
dCA9ICIsIG5ld01heFBhZ2VDb3VudCkpOwotICAgIHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBhdXRvIHN0YXRlbWVudCA9
IHByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiUFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwg
bmV3TWF4UGFnZUNvdW50KSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IG1heGlt
dW0gc2l6ZSBvZiBkYXRhYmFzZSB0byAlbGxpIGJ5dGVzIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihzaXplKSk7CiAKICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwpAQCAtMzEwLDggKzMwOSw4
IEBAIGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUoKQogICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7
CiAgICAgICAgIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJB
R01BIHBhZ2Vfc2l6ZSJfcyk7Ci0gICAgICAgIG1fcGFnZVNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBS
QUdNQSBwYWdlX3NpemUiX3MpOworICAgICAgICBtX3BhZ2VTaXplID0gc3RhdGVtZW50ID8gc3Rh
dGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwogICAgICAgICAKICAgICAgICAgZW5hYmxlQXV0
aG9yaXplcih0cnVlKTsKICAgICB9CkBAIC0zMjcsOCArMzI2LDggQEAgaW50NjRfdCBTUUxpdGVE
YXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSgpCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0
aG9yaXplckxvY2spOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKICAgICAgICAg
Ly8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFkZGVkIGluIFNRTGl0ZSAzLjQuMS4KLSAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBmcmVlbGlzdF9jb3Vu
dCJfcyk7Ci0gICAgICAgIGZyZWVsaXN0Q291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIGZy
ZWVsaXN0X2NvdW50Il9zKTsKKyAgICAgICAgZnJlZWxpc3RDb3VudCA9IHN0YXRlbWVudCA/IHN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkgOiAwOwogICAgICAgICBlbmFibGVBdXRob3JpemVy
KHRydWUpOwogICAgIH0KIApAQCAtMzQyLDggKzM0MSw4IEBAIGludDY0X3QgU1FMaXRlRGF0YWJh
c2U6OnRvdGFsU2l6ZSgpCiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhv
cml6ZXJMb2NrKTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgcGFnZV9jb3VudCJfcyk7Ci0g
ICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
YXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgcGFnZV9jb3VudCJfcyk7
CisgICAgICAgIHBhZ2VDb3VudCA9IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMCkgOiAwOwogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KIApAQCAt
MzcxLDE0ICszNzAsMjIgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0QnVzeUhhbmRsZXIoaW50
KCpoYW5kbGVyKSh2b2lkKiwgaW50KSkKICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiQnVzeSBo
YW5kbGVyIHNldCBvbiBub24tb3BlbiBkYXRhYmFzZSIpOwogfQogCi1ib29sIFNRTGl0ZURhdGFi
YXNlOjpleGVjdXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKK2Jvb2wgU1FMaXRlRGF0YWJh
c2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYgcXVlcnkpCiB7Ci0gICAgcmV0dXJuIFNR
TGl0ZVN0YXRlbWVudCgqdGhpcywgc3FsKS5leGVjdXRlQ29tbWFuZCgpOworICAgIGF1dG8gc3Rh
dGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAm
JiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7Cit9CisKK2Jvb2wgU1FMaXRlRGF0YWJhc2U6
OmV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IHByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgIHJldHVybiBzdGF0ZW1lbnQgJiYgc3Rh
dGVtZW50LT5leGVjdXRlQ29tbWFuZCgpOwogfQogCiBib29sIFNRTGl0ZURhdGFiYXNlOjpyZXR1
cm5zQXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJpbmcmIHNxbCkKIHsKLSAgICByZXR1cm4gU1FM
aXRlU3RhdGVtZW50KCp0aGlzLCBzcWwpLnJldHVybnNBdExlYXN0T25lUmVzdWx0KCk7CisgICAg
YXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgcmV0dXJuIHN0YXRl
bWVudCAmJiBzdGF0ZW1lbnQtPnJldHVybnNBdExlYXN0T25lUmVzdWx0KCk7CiB9CiAKIGJvb2wg
U1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKGNvbnN0IFN0cmluZyYgdGFibGVuYW1lKQpAQCAt
Mzg2LDE4ICszOTMsMTUgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6dGFibGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiB0YWJsZW5hbWUpCiAgICAgaWYgKCFpc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU3RyaW5nIHN0YXRlbWVudCA9ICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAnIiArIHRhYmxlbmFtZSArICIn
OyI7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCp0aGlzLCBzdGF0ZW1lbnQpOwotICAgIHNx
bC5wcmVwYXJlKCk7Ci0gICAgcmV0dXJuIHNxbC5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKKyAgICBh
dXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRl
X21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9ICciICsgdGFibGVuYW1lICsg
Iic7Il9zKTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1c7CiB9CiAKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OmNsZWFyQWxsVGFibGVzKCkKIHsK
LSAgICBTdHJpbmcgcXVlcnkgPSAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGU9J3RhYmxlJzsiX3M7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVzOwotICAgIGlmICgh
U1FMaXRlU3RhdGVtZW50KCp0aGlzLCBxdWVyeSkucmV0dXJuVGV4dFJlc3VsdHMoMCwgdGFibGVz
KSkgeworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiX3MpOworICAgIGlmICghc3Rh
dGVtZW50IHx8ICFzdGF0ZW1lbnQtPnJldHVyblRleHRSZXN1bHRzKDAsIHRhYmxlcykpIHsKICAg
ICAgICAgTE9HKFNRTERhdGFiYXNlLCAiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVz
IGZyb20gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU4MywxMCArNTg3
LDEwIEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OmlzQXV0b0NvbW1pdE9uKCkgY29uc3QKIAogYm9v
bCBTUUxpdGVEYXRhYmFzZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIGF1dG9fdmFjdXVtIl9zKTsK
LSAgICBpbnQgYXV0b1ZhY3V1bU1vZGUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAg
IGludCBhdXRvVmFjdXVtTW9kZSA9IDA7CisgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gcHJlcGFy
ZVN0YXRlbWVudCgiUFJBR01BIGF1dG9fdmFjdXVtIl9zKSkKKyAgICAgICAgYXV0b1ZhY3V1bU1v
ZGUgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKICAgICBpbnQgZXJyb3IgPSBsYXN0RXJy
b3IoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKIAogICAgIC8vIENoZWNrIGlmIHdlIGdv
dCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXV0b192YWN1
dW0gZmxhZy4KICAgICAvLyBJZiB3ZSBnb3QgYSBTUUxJVEVfQlVTWSBlcnJvciwgdGhlbiB0aGVy
ZSdzIHByb2JhYmx5IGFub3RoZXIgdHJhbnNhY3Rpb24gaW4KQEAgLTY0Myw0ICs2NDcsNzIgQEAg
dm9pZCBTUUxpdGVEYXRhYmFzZTo6cmVsZWFzZU1lbW9yeSgpCiAgICAgc3FsaXRlM19kYl9yZWxl
YXNlX21lbW9yeShtX2RiKTsKIH0KIAorc3RhdGljIEV4cGVjdGVkPHNxbGl0ZTNfc3RtdCosIGlu
dD4gY29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2Us
IGNvbnN0IGNoYXIqIHF1ZXJ5LCBzaXplX3QgcXVlcnlMZW5ndGgpCit7CisgICAgTG9ja0hvbGRl
ciBkYXRhYmFzZUxvY2soZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKKyAgICBMT0coU1FMRGF0
YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeSk7CisKKyAgICAvLyBQYXNzIHRoZSBs
ZW5ndGggb2YgdGhlIHN0cmluZyBpbmNsdWRpbmcgdGhlIG51bGwgY2hhcmFjdGVyIHRvIHNxbGl0
ZTNfcHJlcGFyZV92MjsKKyAgICAvLyB0aGlzIGxldHMgU1FMaXRlIGF2b2lkIGFuIGV4dHJhIHN0
cmluZyBjb3B5LgorICAgIHNpemVfdCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyID0gcXVl
cnlMZW5ndGggKyAxOworCisgICAgc3FsaXRlM19zdG10KiBzdGF0ZW1lbnQgeyBudWxscHRyIH07
CisgICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7CisgICAgaW50IGVycm9yID0gc3FsaXRl
M19wcmVwYXJlX3YyKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnksIGxlbmd0aEluY2x1
ZGluZ051bGxDaGFyYWN0ZXIsICZzdGF0ZW1lbnQsICZ0YWlsKTsKKyAgICBpZiAoZXJyb3IgIT0g
U1FMSVRFX09LKQorICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxpdGUzX3ByZXBhcmUxNiBm
YWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIHF1ZXJ5LCBzcWxpdGUzX2Vycm1zZyhkYXRhYmFz
ZS5zcWxpdGUzSGFuZGxlKCkpKTsKKworICAgIGlmICh0YWlsICYmICp0YWlsKQorICAgICAgICBl
cnJvciA9IFNRTElURV9FUlJPUjsKKworICAgIGlmIChlcnJvciAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgc3FsaXRlM19maW5hbGl6ZShzdGF0ZW1lbnQpOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9CisKK0V4
cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJpbmcgcXVlcnkgPSBx
dWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0byBzcWxTdGF0ZW1l
bnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5kYXRhKCksIHF1
ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRhdGEoKSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3IoKSk7Cisg
ICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3FsU3RhdGVtZW50LnZh
bHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBhdXRvIHNx
bFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5LmNo
YXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50KSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJhc2U6OnBy
ZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwg
cXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0
YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCB7ICp0
aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxVbmlxdWVSZWY8U1FM
aXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0gcXVlcnlT
dHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0g
Y29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBxdWVyeS5s
ZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQ6
IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FMaXRlU3Rh
dGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitFeHBlY3RlZDxVbmlx
dWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBT
dGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0g
Y29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVycygpLCBx
dWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuY2hh
cmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5l
cnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpu
ZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIwZmE2M2E5OTgwMjhl
NTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpo
YXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsOCArMjgsMTAgQEAK
IAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYxLDYg
KzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFzdENoYW5n
ZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZChjb25z
dCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKEFTQ0lJ
TGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0IFN0cmlu
ZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29uc3QgU3Ry
aW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB0cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsg
fQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHBy
ZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoQVNDSUlMaXRl
cmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRl
U3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50
PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworCiAgICAg
Ly8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhpcyBpcyB0aHJlYWQg
c2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IGRlYThmZmY4
YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLjQ4ZjlhZWUyZDcxZDkxZmI0NTcwMjIy
ZDRlNWIwNzg4YTBiZTE1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURh
dGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0
YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50KQogICAg
IDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwgbV9zdGF0ZW1lbnQo
MCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NFUlQoc3RhdGVtZW50
KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkKK1NRTGl0ZVN0YXRl
bWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVyKQorICAgIDogbV9k
YXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQoc3RkOjpleGNoYW5n
ZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxpemUoKTsKIH0KIAot
aW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVT
dGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQotICAgIExvY2tIb2xk
ZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLQotICAgIENTdHJp
bmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKLSAgICAKLSAgICBM
T0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5kYXRhKCkpOwotCi0g
ICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBudWxsIGNo
YXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBsZXRzIFNRTGl0ZSBh
dm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3RoSW5jbHVkaW5nTnVs
bENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0IGNoYXIqIHRhaWwg
PSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihtX2RhdGFiYXNl
LnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFj
dGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAhPSBTUUxJVEVfT0sp
Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkp
XG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNl
LnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwpCi0gICAgICAgIGVy
cm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzUHJlcGFy
ZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXJyb3I7CisgICAg
c3FsaXRlM19maW5hbGl6ZShtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OnN0ZXAoKQogewogICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJh
c2VNdXRleCgpKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJ
VEVfT0s7Ci0KICAgICAvLyBUaGUgZGF0YWJhc2UgbmVlZHMgdG8gdXBkYXRlIGl0cyBsYXN0IGNo
YW5nZXMgY291bnQgYmVmb3JlIGVhY2ggc3RhdGVtZW50CiAgICAgLy8gaW4gb3JkZXIgdG8gY29t
cHV0ZSBwcm9wZXJseSB0aGUgbGFzdENoYW5nZXMoKSByZXR1cm4gdmFsdWUuCiAgICAgbV9kYXRh
YmFzZS51cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKLSAgICBMT0coU1FMRGF0YWJhc2UsICJT
UUwgLSBzdGVwIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAgICBpbnQgZXJyb3Ig
PSBzcWxpdGUzX3N0ZXAobV9zdGF0ZW1lbnQpOwotICAgIGlmIChlcnJvciAhPSBTUUxJVEVfRE9O
RSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNx
bGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxuUXVlcnkgLSAlc1xuRXJyb3IgLSAlcyIsIAotICAgICAg
ICAgICAgZXJyb3IsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCksIHNxbGl0ZTNfZXJybXNnKG1fZGF0
YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0gICAgfQorICAgIGlmIChlcnJvciAhPSBTUUxJVEVf
RE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKQorICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJz
cWxpdGUzX3N0ZXAgZmFpbGVkICglaSlcbkVycm9yIC0gJXMiLCBlcnJvciwgc3FsaXRlM19lcnJt
c2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKIAogICAgIHJldHVybiBlcnJvcjsKIH0K
LSAgICAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6OmZpbmFsaXplKCkKLXsKLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKCFtX3N0YXRl
bWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLSAgICBMT0coU1FMRGF0YWJhc2UsICJT
UUwgLSBmaW5hbGl6ZSAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgaW50IHJl
c3VsdCA9IHNxbGl0ZTNfZmluYWxpemUobV9zdGF0ZW1lbnQpOwotICAgIG1fc3RhdGVtZW50ID0g
MDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpyZXNldCgp
IAogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0g
ICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gcmVz
ZXQgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBzdGF0dXMgPSBzcWxp
dGUzX3Jlc2V0KG1fc3RhdGVtZW50KTsKICAgICBzcWxpdGUzX2NsZWFyX2JpbmRpbmdzKG1fc3Rh
dGVtZW50KTsKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTI5LDQyICs4MywyMSBAQCBpbnQgU1FM
aXRlU3RhdGVtZW50OjpyZXNldCgpCiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29t
bWFuZCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAg
aWYgKHN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0
ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KCkKIHsKLSAgICBpZiAoIW1fc3RhdGVtZW50
ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBB
U1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmaW5h
bGl6ZSgpOwotICAgIHJldHVybiB0cnVlOwotCisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVf
Uk9XOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0
IHZvaWQqIGJsb2IsIGludCBzaXplKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAg
IEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKICAgICBBU1NFUlQoYmxvYiB8fCAhc2l6ZSk7
CiAgICAgQVNTRVJUKHNpemUgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAg
ICByZXR1cm4gU1FMSVRFX0VSUk9SOwotCiAgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9ibG9iKG1f
c3RhdGVtZW50LCBpbmRleCwgYmxvYiwgc2l6ZSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKQEAg
LTE4NSw3ICsxMTgsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7
CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yMDQsNyArMTM2LDYgQEAg
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRl
eHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdl
cikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTIxMyw3ICsxNDQsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
SW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJ
bnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBh
cmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAKQEAgLTIyMiw3ICsxNTIs
NiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQoaW50IGluZGV4LCBpbnQ2NF90IGlu
dGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3Vi
bGUgbnVtYmVyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRl
eCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQ
YXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjMxLDcgKzE2MCw2IEBAIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3VibGUgbnVtYmVyKQogCiBpbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kTnVsbChpbnQgaW5kZXgpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7
CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yNDksMjYgKzE3NywxOSBA
QCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVmFsdWUoaW50IGluZGV4LCBjb25zdCBTUUxWYWx1
ZSYgdmFsdWUpCiAKIHVuc2lnbmVkIFNRTGl0ZVN0YXRlbWVudDo6YmluZFBhcmFtZXRlckNvdW50
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoIW1fc3RhdGVt
ZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19iaW5kX3BhcmFtZXRl
cl9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmNvbHVtbkNv
dW50KCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50
KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19kYXRhX2NvdW50KG1fc3Rh
dGVtZW50KTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbChpbnQgY29s
KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAg
ICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3OCwxOSArMTk5LDE0IEBAIGJvb2wg
U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKIGJvb2wgU1FMaXRlU3RhdGVt
ZW50Ojppc0NvbHVtbkRlY2xhcmVkQXNCbG9iKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+
PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KSB7Ci0gICAgICAgIGlmIChwcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyhzcWxpdGUzX2NvbHVtbl9k
ZWNsdHlwZShtX3N0YXRlbWVudCwgY29sKSksICJibG9iIik7CiB9CiAKIFN0cmluZyBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDAp
OwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9
IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFoYXNT
dGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hh
cio+KHNxbGl0ZTNfY29sdW1uX25hbWUxNihtX3N0YXRlbWVudCwgY29sKSkpOwpAQCAtMjk5LDkg
KzIxNSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkK
IFNRTFZhbHVlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCkKIHsKICAg
ICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChw
cmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMzAsOSArMjQ1LDggQEAgU1FMVmFsdWUg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29sKQogU3RyaW5nIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0g
U1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWhhc1N0
YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFy
Kj4oc3FsaXRlM19jb2x1bW5fdGV4dDE2KG1fc3RhdGVtZW50LCBjb2wpKSwgc3FsaXRlM19jb2x1
bW5fYnl0ZXMxNihtX3N0YXRlbWVudCwgY29sKSAvIHNpemVvZihVQ2hhcikpOwpAQCAtMzQxLDkg
KzI1NSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblRleHQoaW50IGNvbCkK
IGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQgY29sKQogewogICAg
IEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHBy
ZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwLjA7Cisg
ICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAg
IHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2RvdWJsZShtX3N0YXRlbWVu
dCwgY29sKTsKQEAgLTM1Miw5ICsyNjUsOCBAQCBkb3VibGUgU1FMaXRlU3RhdGVtZW50OjpnZXRD
b2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludChp
bnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkK
LSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAg
IHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNR
TElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNv
bCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2ludChtX3N0
YXRlbWVudCwgY29sKTsKQEAgLTM2Myw5ICsyNzUsOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5JbnQoaW50IGNvbCkKIGludDY0X3QgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5J
bnQ2NChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRl
bWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChjb2x1bW5Db3VudCgp
IDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2lu
dDY0KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzc1LDcgKzI4Niw3IEBAIFN0cmluZyBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKQogewogICAgIEFTU0VSVChj
b2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0g
U1FMSVRFX1JPVykKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoY29sdW1uQ291
bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA4LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6Omdl
dENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkKIHsKICAg
ICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5k
U3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYm
IHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNDIzLDcgKzMzNCw3IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50
OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNvbCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQp
CiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJl
cGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBp
bmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICByZXN1bHQuY2xlYXIoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ1MSwxOSArMzYyLDE2IEBAIGJvb2wgU1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8U3RyaW5nPiYgdikK
IAogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxp
emUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAog
ICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29s
dW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgaWYgKG1fZGF0YWJh
c2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVzdWx0ID0gZmFsc2U7
Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVzdWx0cyBmcm9tIGRh
dGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExPRyhT
UUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHM6IEVycm9yIHJl
YWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc5LDE2IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1
cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+JiB2KQogewogICAgIHYuY2xlYXIoKTsK
IAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJl
cGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNT
dGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkg
PT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uSW50KGNvbCkpOwogICAg
IGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERh
dGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBt
X3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAg
ICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00OTEsMTkg
KzM5NiwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzKGludCBj
b2wsIFZlY3RvcjxpbnQ2NF90PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9z
dGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzU3RhcnRlZFN0ZXBwaW5n
KCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAoc3RlcCgpID09IFNRTElURV9ST1cp
CiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludDY0KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0
ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJy
b3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50Ojpy
ZXR1cm5JbnQ2NFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBm
aW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxMSwyNSArNDEzLDIyIEBA
IGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKGludCBjb2wsIFZlY3Rv
cjxkb3VibGU+JiB2KQogewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkK
LSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAg
ICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAg
di5hcHBlbmQoZ2V0Q29sdW1uRG91YmxlKGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
ICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAg
ICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGlu
ZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3Vi
bGVSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNFeHBp
cmVkKCkKK2Jvb2wgU1FMaXRlU3RhdGVtZW50OjpoYXNTdGFydGVkU3RlcHBpbmcoKQogewotICAg
IHJldHVybiAhbV9zdGF0ZW1lbnQ7CisgICAgcmV0dXJuIHNxbGl0ZTNfc3RtdF9idXN5KG1fc3Rh
dGVtZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGE3YWNkZTVjZmM1YjJkMzU2MmIx
ZmI1MWZkNmE3MWJkOTVjY2U0MDguLjYzNTEyYmI2ZWI0OWE2ZWUxOWU3MWYxYzY3YjFmZThmMjlm
NjVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
U1FMaXRlU3RhdGVtZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxpdGVTdGF0ZW1l
bnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBjb25zdCBTdHJpbmcmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgU1FM
aXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9S
VCBpbnQgcHJlcGFyZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5k
ZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQg
YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBp
bnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKQEAgLTUwLDIzICs0OSwxOCBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgYmluZFBhcmFtZXRlckNvdW50
KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgc3RlcCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIGludCBmaW5hbGl6ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCByZXNldCgpOwog
ICAgIAotICAgIGludCBwcmVwYXJlQW5kU3RlcCgpIHsgaWYgKGludCBlcnJvciA9IHByZXBhcmUo
KSkgcmV0dXJuIGVycm9yOyByZXR1cm4gc3RlcCgpOyB9Ci0gICAgCi0gICAgLy8gcHJlcGFyZXMs
IHN0ZXBzLCBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KKyAgICAvLyBzdGVwcyBhbmQgZmluYWxp
emVzIHRoZSBxdWVyeS4KICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIDMgc3RlcHMgc3VjY2Vl
ZCB3aXRoIHN0ZXAoKSByZXR1cm5pbmcgU1FMSVRFX0RPTkUKICAgICAvLyByZXR1cm5zIGZhbHNl
IG90aGVyd2lzZSAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZCgpOwog
ICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVwcywgYW5kIGZpbmFsaXplcy4gIAorICAgIC8vIHN0
ZXBzLCBhbmQgZmluYWxpemVzLgogICAgIC8vIHJldHVybnMgdHJ1ZSBpcyBzdGVwKCkgcmV0dXJu
cyBTUUxJVEVfUk9XCiAgICAgLy8gcmV0dXJucyBmYWxzZSBvdGhlcndpc2UKICAgICBib29sIHJl
dHVybnNBdExlYXN0T25lUmVzdWx0KCk7CiAKLSAgICBib29sIGlzRXhwaXJlZCgpOwotCiAgICAg
Ly8gUmV0dXJucyAtMSBvbiBsYXN0LXN0ZXAgZmFpbGluZy4gIE90aGVyd2lzZSwgcmV0dXJucyBu
dW1iZXIgb2Ygcm93cwogICAgIC8vIHJldHVybmVkIGluIHRoZSBsYXN0IHN0ZXAoKQogICAgIGlu
dCBjb2x1bW5Db3VudCgpOwpAQCAtOTAsMTUgKzg0LDE1IEBAIHB1YmxpYzoKIAogICAgIFNRTGl0
ZURhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KICAgICAKLSAgICBj
b25zdCBTdHJpbmcmIHF1ZXJ5KCkgY29uc3QgeyByZXR1cm4gbV9xdWVyeTsgfQotICAgIAogcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU1FMaXRlRGF0YWJhc2U7CisgICAgU1FMaXRlU3RhdGVt
ZW50KFNRTGl0ZURhdGFiYXNlJiwgc3FsaXRlM19zdG10Kik7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHByZXBhcmVkIHN0YXRlbWVudCBoYXMgYmVlbiBzdGVwcGVkIGF0IGxlYXN0IG9u
Y2UgdXNpbmcgc3RlcCgpIGJ1dCBoYXMgbmVpdGhlciBydW4gdG8gY29tcGxldGlvbiAocmV0dXJu
ZWQgU1FMSVRFX0RPTkUgZnJvbSBzdGVwKCkpIG5vciBiZWVuIHJlc2V0KCkuCisgICAgYm9vbCBo
YXNTdGFydGVkU3RlcHBpbmcoKTsKKwogICAgIFNRTGl0ZURhdGFiYXNlJiBtX2RhdGFiYXNlOwot
ICAgIFN0cmluZyBtX3F1ZXJ5OwogICAgIHNxbGl0ZTNfc3RtdCogbV9zdGF0ZW1lbnQ7Ci0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNQcmVwYXJlZCB7IGZhbHNlIH07Ci0jZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCmluZGV4IGY5YzI0YjhlZDU3MTgyZWE1Nzg4
N2EwMDMwN2VkOGRiOGEzZDBmZmQuLmExOTM5YWFkMWIwYzg2ZjAzNWRhMDA5MjVmZmVjZjE3OWQ5
NjdkYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1
cE1lbnVEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVw
TWVudURCLmNwcApAQCAtMTMwLDI1ICsxMzAsMjUgQEAgYm9vbCBTZWFyY2hQb3B1cE1lbnVEQjo6
Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMo
IlNlYXJjaCIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
aW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAgaWYgKGlu
dGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3JpdHkgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3MpOworICAg
IGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUg
ZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50IHJlc3Vs
dENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxJVEVf
Uk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0ZXAgcmV0
dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbHVt
bnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0gMSkgewog
ICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBpbnRlZ3Jp
dHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5UZXh0
KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5UZXh0KDAp
OwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJST1IoIlNl
YXJjaCBhdXRvc2F2ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1
bHRUZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTIyNCwxNyArMjI0LDE5IEBAIGJvb2wgU2VhcmNo
UG9wdXBNZW51REI6Om9wZW5EYXRhYmFzZSgpCiAKIHZvaWQgU2VhcmNoUG9wdXBNZW51REI6OmNs
b3NlRGF0YWJhc2UoKQogewotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAg
IG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAg
bV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX3JlbW92
ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAgbV9kYXRh
YmFzZS5jbG9zZSgpOwotICAgIH0KKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBt
X3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kYXRh
YmFzZS5jbG9zZSgpOwogfQogCiB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjp2ZXJpZnlTY2hlbWFW
ZXJzaW9uKCkKIHsKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNl
LCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJf
cyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNzEsMjMgKzI3MywyNSBAQCB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjpjaGVj
a1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKIAogaW50IFNlYXJjaFBvcHVwTWVudURCOjpl
eGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29sIGlnbm9yZUVycm9yKQogewot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQg
cmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXpl
KCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3Fs
KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUo
c3RhdGVtZW50LmVycm9yKCkpOworICAgICAgICByZXR1cm4gc3RhdGVtZW50LmVycm9yKCk7Cisg
ICAgfQogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7CisgICAgaW50IHJldCA9IHN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYmIHJldCAhPSBTUUxJ
VEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3IpCiAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0
YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLQogICAgIHJldHVybiByZXQ7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVwTWVudURCOjpjcmVh
dGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKK3N0ZDo6dW5pcXVlX3B0cjxT
UUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVwTWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVu
dChBU0NJSUxpdGVyYWwgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxT
UUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVu
dC0+cHJlcGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsK
LSAgICByZXR1cm4gc3RhdGVtZW50OworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQpOworICAgIGlm
ICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmgKaW5kZXggYTI1NWNmNDI2ZTdhN2I5
NGU3NmNjODQ2NWFkZjE4MjQ0YmNmZTYzNi4uZjkxM2Y0M2VhNWQwYTRmNzQzMWE3OTJiMTY4Mzgw
ZDc5ZDcyYTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJj
aFBvcHVwTWVudURCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBv
cHVwTWVudURCLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZlcmlmeVNj
aGVtYVZlcnNpb24oKTsKICAgICBpbnQgZXhlY3V0ZVNpbXBsZVNxbChjb25zdCBTdHJpbmcmIHNx
bCwgYm9vbCBpZ25vcmVFcnJvciA9IGZhbHNlKTsKICAgICB2b2lkIGNoZWNrU1FMaXRlUmV0dXJu
Q29kZShpbnQgYWN0dWFsKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiBj
cmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gY3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQoQVNDSUlMaXRl
cmFsIHNxbCk7CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAgIFNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCmluZGV4IDg5MmMz
ZjQ5ZTkwMTRhMzVmZTkyOTg0ZWY5YTI5MDRhN2JkZWQ1NjAuLmIwYzcxNjFhODA2YTg2OGVjNGZm
NDQ3NjUzYmI4NTNmYzA5Njg0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC0y
ODUsMTEgKzI4NSwxMSBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlk
UmVjb3Jkc1RhYmxlKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAg
IC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0
dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUg
UmVjb3JkcyB0YWJsZS4iOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iX3M7CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFs
bCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0g
U1FMSVRFX0RPTkUpIHsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKICAgICAgICAgaWYgKHNxbGl0ZVJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICAgICAgcmV0dXJuICJFcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIjsKIAotICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAg
QVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC00MjcsMTggKzQyNywxOCBAQCBi
b29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2
aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9u
KCptX2RhdGFiYXNlKTsKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7Ci0gICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LT5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0U3RhdGVtZW50
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBhdXRv
JiBzY3JpcHRTdG9yYWdlID0gdGhpcy0+c2NyaXB0U3RvcmFnZSgpOwogICAgIGZvciAoYXV0byYg
cmVnaXN0cmF0aW9uIDogcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0g
PyIpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IHNxbC5iaW5kVGV4dCgxLCByZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJE
RUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICBpZiAoIWRlbGV0
ZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBy
ZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGRlbGV0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHJlbW92ZSByZWdpc3Ry
YXRpb24gZGF0YSBmcm9tIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtNDU3LDE5ICs0NTcsMTkgQEAgYm9vbCBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRl
eHREYXRhPiYKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBjZXJ0aWZpY2F0ZUlu
Zm9FbmNvZGVyOwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyIDw8IGRhdGEuY2VydGlm
aWNhdGVJbmZvOwogCi0gICAgICAgIGlmIChzcWwuYmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRp
b24ua2V5LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9y
dCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgzLCBkYXRhLnJl
Z2lzdHJhdGlvbi5zY29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoNCwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvcE9yaWdp
bigpLmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5iaW5kRG91YmxlKDUsIGRhdGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmlu
ZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVW
aWFDYWNoZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDcsIGRh
dGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5i
aW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSwg
Y3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3Fs
LmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigp
LCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRh
YmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9y
dCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoMywgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucGF0aCgpLnRvU3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg0LCBkYXRh
LnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kRG91YmxlKDUsIGRh
dGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2Fj
aGUpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53
b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQo
MTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZl
cigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIGNlcnRpZmljYXRl
SW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29y
a2VyLCAiRmFpbGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MDIs
MjYgKzUwMiwyNiBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMo
KQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUkVMRUFTRV9MT0coU2Vydmlj
ZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiIpOwotICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9z
KTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzcWwgPSBt
X2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsK
KyAgICBpZiAoIXNxbCkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZyb20gcmVjb3JkcyB0YWJs
ZSAoIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogCi0gICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgaW50IHJlc3Vs
dCA9IHNxbC0+c3RlcCgpOwogCi0gICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1
bHQgPSBzcWwuc3RlcCgpKSB7CisgICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1
bHQgPSBzcWwtPnN0ZXAoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEltcG9ydGluZyBhIHJlZ2lzdHJh
dGlvbiBmcm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBhdXRvIGtleSA9IFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtleShzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7
Ci0gICAgICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0
KDEpIH07Ci0gICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLmdldENvbHVtblRleHQoMik7Cisg
ICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFi
YXNlS2V5KHNxbC0+Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGF1dG8gb3JpZ2luVVJMID0g
VVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCgxKSB9OworICAgICAgICBhdXRvIHNjb3Bl
UGF0aCA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgyKTsKICAgICAgICAgYXV0byBzY29wZVVSTCA9IFVS
TCB7IG9yaWdpblVSTCwgc2NvcGVQYXRoIH07Ci0gICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC5nZXRDb2x1bW5UZXh0
KDMpKTsKLSAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1lID0gV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKHNxbC5nZXRDb2x1bW5Eb3VibGUoNCkpOwotICAgICAgICBhdXRvIHVwZGF0ZVZp
YUNhY2hlID0gc3RyaW5nVG9VcGRhdGVWaWFDYWNoZShzcWwuZ2V0Q29sdW1uVGV4dCg1KSk7Ci0g
ICAgICAgIGF1dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0KDYp
IH07Ci0gICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmluZ1RvV29ya2VyVHlwZShzcWwuZ2V0
Q29sdW1uVGV4dCg3KSk7CisgICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC0+Z2V0Q29sdW1uVGV4dCgzKSk7CisgICAg
ICAgIGF1dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhz
cWwtPmdldENvbHVtbkRvdWJsZSg0KSk7CisgICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBz
dHJpbmdUb1VwZGF0ZVZpYUNhY2hlKHNxbC0+Z2V0Q29sdW1uVGV4dCg1KSk7CisgICAgICAgIGF1
dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCg2KSB9OworICAg
ICAgICBhdXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLT5nZXRDb2x1bW5U
ZXh0KDcpKTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJp
dHlQb2xpY3lEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOCwgY29u
dGVudFNlY3VyaXR5UG9saWN5RGF0YSk7CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLmRhdGEoKSwgY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YS5zaXplKCkpOwogICAgICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAg
aWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKSB7CkBAIC01MzIsMTAgKzUzMiwx
MCBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC5n
ZXRDb2x1bW5UZXh0KDkpOworICAgICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLT5nZXRD
b2x1bW5UZXh0KDkpOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzY3JpcHRSZXNvdXJjZU1h
cERhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291
cmNlTWFwRGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDEwLCBzY3Jp
cHRSZXNvdXJjZU1hcERhdGEpOwogICAgICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNv
bnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAKICAgICAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0
UmVzb3VyY2VNYXBEYXRhLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhLnNpemUoKSk7CkBA
IC01NTAsNyArNTUwLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNv
cmRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0aWZpY2F0ZUlu
Zm9EYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0
ZUluZm9EYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRp
ZmljYXRlSW5mb0RhdGEpOwogICAgICAgICBPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRp
ZmljYXRlSW5mbzsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmlj
YXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0YS5kYXRhKCksIGNlcnRpZmljYXRlSW5m
b0RhdGEuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IGUyYzc3MTVhMzE1NmEwZmY2OTYyYWRlZjNkOWZmYWE2
MGIxZTA3NmIuLmE4YWVkNzMxNjUxNTVlMGNmMWYyYmQzNjJiMTFlODlmOWIyZGUyOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtMTA2LDcgKzEwNiw3IEBAIGNvbnN0ZXhwciBhdXRvIHRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHNFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFCiBjb25zdGV4cHIg
YXV0byBzdG9yYWdlQWNjZXNzRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEg
RlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/
IEFORCB0b3BMZXZlbERvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKIAogLy8gVVBEQVRFIFF1ZXJp
ZXMKLWNvbnN0ZXhwciBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSA9ID8gIgorY29uc3RleHByIGF1dG8gbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRl
cmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyAiX3MKICAgICAi
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29uc3RleHByIGF1dG8gdXBkYXRlTGFz
dFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29uc3RleHByIGF1dG8gdXBkYXRlRGF0YVJl
Y29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29y
ZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7CkBAIC0xMjcsOCAr
MTI3LDggQEAgY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJT
RUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXIKIGNvbnN0ZXhwciBhdXRvIGhhZFVzZXJJ
bnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNF
TEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9u
UXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVz
ZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJf
czsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNF
TEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyI7
Ci1jb25zdGV4cHIgYXV0byBnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wUXVlcnkgPSAi
U0VMRUNUIE1BWChsYXN0VXBkYXRlZCkgRlJPTSAoU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyBhbmQg
dG9wRnJhbWVEb21haW5JRCA9ID8iCitjb25zdGV4cHIgYXV0byBnZXRSZXNvdXJjZURhdGFCeURv
bWFpbk5hbWVRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBnZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wUXVlcnkgPSAiU0VMRUNUIE1BWChsYXN0VXBkYXRlZCkgRlJPTSAoU0VMRUNU
IGxhc3RVcGRhdGVkIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJG
cmFtZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iX3MKICAgICAiVU5JT04g
QUxMIFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSBX
SEVSRSB0b0RvbWFpbklEID0gPyBhbmQgZnJvbURvbWFpbklEID0gPyIKICAgICAiVU5JT04gQUxM
IFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gYW5kIHRvcEZyYW1lRG9tYWluSUQgPSA/Igog
ICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBhbmQgdG9Eb21haW5JRCA9
ID8pIl9zOwpAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2V0QnVzeVRpbWVvdXQobV9k
YXRhYmFzZSwgIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIik7Ci0gICAgaWYgKHNldEJ1c3lU
aW1lb3V0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgc2V0QnVzeVRpbWVvdXQuc3RlcCgpICE9
IFNRTElURV9ST1cpIHsKKyAgICBhdXRvIHNldEJ1c3lUaW1lb3V0ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAwMCJfcyk7CisgICAgaWYgKCFz
ZXRCdXN5VGltZW91dCB8fCBzZXRCdXN5VGltZW91dC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQw
MSwyMiArNDAxLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5JVFBEYXRhYmFzZSgpCiBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkK
IHsKICAgICBWZWN0b3I8U3RyaW5nPiBtaXNzaW5nVGFibGVzOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVS
RSB0eXBlPSd0YWJsZScgYW5kIHRibF9uYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3Rh
YmxlJyBhbmQgdGJsX25hbWU9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVw
YXJlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
CiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5r
ZXlzKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5iaW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBT
UUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJs
ZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVz
SW5TY2hlbWEgc2NoZW1hIGlzIG1pc3NpbmcgdGFibGU6ICVzIiwgdGhpcywgdGFibGUuYXNjaWko
KS5kYXRhKCkpOwogICAgICAgICAgICAgbWlzc2luZ1RhYmxlcy5hcHBlbmQoU3RyaW5nKHRhYmxl
KSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIHN0YXRl
bWVudC0+cmVzZXQoKTsKICAgICB9CiAgICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtNDI2LDggKzQyNiw4IEBAIE9wdGlvbmFs
PFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hl
Y2tGb3JNaXNzaW5nVGFiCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZW5hYmxlRm9y
ZWlnbktleXMobV9kYXRhYmFzZSwgIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiIpOwotICAgIGlm
IChlbmFibGVGb3JlaWduS2V5cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGVuYWJsZUZvcmVp
Z25LZXlzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktl
eXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBP
TiJfcyk7CisgICAgaWYgKCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3Jl
aWduS2V5cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CkBAIC00MzYsMzEgKzQzNiwzMSBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cygpCiAKIFRhYmxl
QW5kSW5kZXhQYWlyIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50
VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IGdldFRhYmxlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNF
TEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUs
ICInIEFORCB0eXBlID0gJ3RhYmxlJyIpKTsKLSAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZ2V0VGFibGVTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFi
bGUnIikpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IGlmIChnZXRUYWJsZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChn
ZXRUYWJsZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVjdXRpbmcgc3RhdGVt
ZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgU3RyaW5n
IGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIFN0cmluZyBjcmVhdGVUYWJsZVF1ZXJ5ID0gZ2V0VGFibGVTdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0SW5kZXhTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJs
X25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChn
ZXRJbmRleFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBnZXRJ
bmRleFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1l
LCAiJyBBTkQgdHlwZSA9ICdpbmRleCciKSk7CisgICAgaWYgKCFnZXRJbmRleFN0YXRlbWVudCkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJs
ZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4OwotICAgIGlmIChnZXRJ
bmRleFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0lu
ZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgIGlm
IChnZXRJbmRleFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0
byByYXdJbmRleCA9IFN0cmluZyhnZXRJbmRleFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7
CiAgICAgICAgIGlmICghcmF3SW5kZXguaXNFbXB0eSgpKQogICAgICAgICAgICAgaW5kZXggPSBy
YXdJbmRleDsKICAgICB9CkBAIC00ODAsMjAgKzQ4MCwyMCBAQCBib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dFNjaAogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5n
VW5pcXVlSW5kaWNlcygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgn
Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2lu
Z1VuaXF1ZUluZGljZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4
IGNvdW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
aWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0
Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApIDwgZXhw
ZWN0ZWRJbmRleENvdW50KQorICAgIGlmIChzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA8IGV4
cGVjdGVkSW5kZXhDb3VudCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NTQsOCArNTU0LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAo
YXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAg
ICAgICAgIGF1dG8gcXVlcnkgPSBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZSwgIiBS
RU5BTUUgVE8gXyIsIHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGFsdGVyVGFibGUo
bV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAoYWx0ZXJUYWJsZS5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LIHx8IGFsdGVyVGFibGUuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAg
IGF1dG8gYWx0ZXJUYWJsZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7Cisg
ICAgICAgIGlmICghYWx0ZXJUYWJsZSB8fCBhbHRlclRhYmxlLT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDE2ICs1NzAsMTYgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5k
SW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAgIGF1dG8gcXVlcnkgPSBpbnNlcnREaXN0
aW5jdFZhbHVlc0luVGFibGVRdWVyeSh0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBt
aWdyYXRlVGFibGVEYXRhKG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKG1pZ3JhdGVU
YWJsZURhdGEucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBtaWdyYXRlVGFibGVEYXRhLnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVUYWJsZURhdGEgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJs
ZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZh
aWxlZCB0byBtaWdyYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBkcm9wUXVlcnkg
PSBtYWtlU3RyaW5nKCJEUk9QIFRBQkxFIF8iLCB0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBkcm9wVGFibGVRdWVyeShtX2RhdGFiYXNlLCBkcm9wUXVlcnkpOwotICAgICAgICBpZiAo
ZHJvcFRhYmxlUXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBkcm9wVGFibGVRdWVyeS5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChkcm9wUXVlcnkpOworICAgICAgICBpZiAoIWRyb3BU
YWJsZVF1ZXJ5IHx8IGRyb3BUYWJsZVF1ZXJ5LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nhcnkg
ZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTk3LDE3ICs1OTcsMTcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5KCkKIAogVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlBS
QUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2lu
Zm8oIiwgdGFibGVOYW1lLCAiKSIpKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpnZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
VmVjdG9yPFN0cmluZz4gY29sdW1uczsKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICAgICAgY29s
dW1ucy5hcHBlbmQobmFtZSk7CiAgICAgfQogCkBAIC02MjIsMTggKzYyMiwxOCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUoU3RyaW5nJiYgdGFibAogICAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5zLmNvbnRhaW5zKGNv
bHVtbikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwg
dGFibGVOYW1lLCAiIEFERCBDT0xVTU4gIiwgY29sdW1uKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJs
ZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5h
YmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBhZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRh
YmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7
CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiB9CiAKQEAgLTY0OCwxMyArNjQ4
LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zSWZOZWNlc3NhcnkoKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhpc3Rp
bmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUmJiBl
eHBlY3RlZENvbHVtbk5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENP
TFVNTiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7
Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiQUxURVIg
VEFCTEUgIiwgdGFibGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4gIiwgZXhpc3RpbmdDb2x1bW5OYW1l
LCAiIFRPICIsIGV4cGVjdGVkQ29sdW1uTmFtZSkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHBy
ZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nQ29sdW1uc1RvVGFibGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byByZW5hbWUg
Y29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzEyLDE1ICs3MTIsMTUgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNz
YXJ5KCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNo
IHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIik7
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5
cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9tYWlu
cyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2Jz
ZXJ2ZWREb21haW5zIHRhYmxlLiIpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBPYnNlcnZlZERvbWFpbnMgdGFibGUgYXQgYWxsLCBvciB0aGVyZSBpcyBhbiBlcnJvciBl
eGVjdXRpbmcgdGhlIGZldGNoLCBkZWxldGUgdGhlIGZpbGUuCi0gICAgICAgIGlmIChzdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5n
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxl
LiIpOwogICAgICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlm
TmVjZXNzYXJ5KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTc0OCwxNSArNzQ4LDE3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJ
Zk5lY2Vzc2FyeSgpCiAgICAgbWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCk7CiB9
CiAKLVNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3Ry
aW5nJiBsb2dTdHJpbmcpIGNvbnN0CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0ZXJh
bCBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhl
YXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWko
KS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgeyB9OwogICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9y
RXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJh
c2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KQEAgLTEwMDQsOSArMTAwNiw4IEBAIE9wdGlv
bmFsPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlu
SUQoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gU3Rh
dGVtZW50OiAlcy4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBz
Y29wZWRTdGF0ZW1lbnQtPnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTAzOSwyMyArMTA0MCwyMyBAQCBTdHJpbmcgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNv
bnN0IEhhc2hTZQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25z
dCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluTGlzdCwgdW5zaWduZWQgZG9tYWlu
SUQpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3Qo
ZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVu
c3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7IikpOwogICAgIAotICAgIGlm
IChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmluZEludCgxLCBkb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklE
KSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICBpZiAoc3Rh
dGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKLSAgICAgICAgaWYgKGluc2VydFJlbGF0aW9u
c2hpcFN0YXRlbWVudC5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBpZiAoaW5zZXJ0UmVsYXRp
b25zaGlwU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5zZXJ0UmVsYXRpb25z
aGlwU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChpbnNlcnRSZWxh
dGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CkBAIC0xMjI5LDE3ICsxMjMwLDE3IEBAIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
CiAKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIGNvbnN0IGF1dG8gcHJldmFsZW50RG9tYWlu
c0JpbmRQYXJhbWV0ZXIgPSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsID8gIiUiIDogIjEiOwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzb3J0ZWRTdGF0aXN0aWNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBq
b2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwotICAgIGlmIChzb3J0ZWRTdGF0aXN0aWNz
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5k
VGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKLSAgICAgICAgfHwgc29ydGVk
U3RhdGlzdGljcy5iaW5kVGV4dCgyLCAiJSIpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc29y
dGVkU3RhdGlzdGljcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJT
RUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkpKTsKKyAgICBpZiAoIXNvcnRl
ZFN0YXRpc3RpY3MKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMSwgcHJl
dmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCisgICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3Mt
PmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVn
YXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIH0KLSAgICB3aGlsZSAo
c29ydGVkU3RhdGlzdGljcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoaGFz
QmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5JbnQoMSkpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29s
dW1uSW50KDApOworICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgeworICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy0+
Z2V0Q29sdW1uSW50KDEpKSkgeworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluSUQg
PSBzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgICAgICBhdXRvIHRo
aXJkUGFydHlEb21haW4gPSBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJl
Z2lzdHJhYmxlRG9tYWluU3RyaW5nKGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh0aGlyZFBh
cnR5RG9tYWluSUQpKTsKICAgICAgICAgICAgIHRoaXJkUGFydHlEYXRhTGlzdC5hcHBlbmQoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSB7IHRoaXJkUGFydHlE
b21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh0aGly
ZFBhcnR5RG9tYWluSUQsIHRoaXJkUGFydHlEb21haW4pIH0pOwogICAgICAgICB9CkBAIC0xMjY1
LDkgKzEyNjYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucwogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAg
IGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29y
ZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFp
biBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5j
cmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMjg1LDMxICsxMjg1LDMwIEBAIHVu
c2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZp
bmROb25QcmV2YWxlbnREb21haW5zCiAgICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOwogCiAg
ICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOwotICAgIFNRTGl0ZVN0
YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsICJTRUxFQ1QgU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMu
ZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGZpbmRTdWJyZXNvdXJjZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWlu
SUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFN1YnJlc291cmNlcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIg
Sk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURv
bWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7CisgICAg
aWYgKCFmaW5kU3VicmVzb3VyY2VzIHx8IGZpbmRTdWJyZXNvdXJjZXMtPmJpbmRJbnQoMSwgcHJp
bWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50IG5ld0Rv
bWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0
byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5l
d0RvbWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAg
ICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFzZSwgIlNFTEVDVCBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlu
cy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hF
UkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAw
Il9zKTsKLSAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGZpbmRUb3BGcmFtZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJv
bSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMg
T04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
LmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlu
cy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZyYW1lcworICAgICAgICB8
fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09L
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29s
dW1uSW50KDApOworICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5nZXRDb2x1bW5J
bnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rp
b25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQu
c2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9t
YWluSUQpOwpAQCAtMTM0MSwyMSArMTM0MCwyMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbAog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVJl
ZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1
YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
ICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQg
QU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVu
dER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBK
T0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZh
bGVudCA9IDEiX3MpOwotICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUo
KSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGly
ZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Cisg
ICAgYXV0byB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VE
b21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFp
bnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
by50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAg
ICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVl
VG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikp
OwotICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxl
bnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdl
PFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2lu
KCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKCFtYXJr
UHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEz
NjYsMTIgKzEzNjQsMTIgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXM+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IG5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0
cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVy
eVByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3Rh
dGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAgICAgLCBub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKKyAgICBhdXRv
IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAg
IGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CisgICAg
ICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21h
aW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAg
ICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIp
ID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkxvdwogICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKICAgICAgICAgICAgIHJlc3Vs
dHMuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICB9CkBAIC0xMzg2LDQzICsxMzg0LDQzIEBAIEhh
c2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAKICAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIs
IGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7
Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAg
dW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQo
dG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VE
b21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3Vy
Y2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3ViZnJhbWVEb21haW5JRCwg
Q09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9t
YWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1h
a2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21h
aW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAo
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
ICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5J
RCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNTQ5LDEwICsxNTQ3LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWlu
JiYKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbmNyZW1lbnRTdG9y
YWdlQWNjZXNzKG1fZGF0YWJhc2UsICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Iik7
Ci0gICAgaWYgKGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgKnN1YkZyYW1lU3Rh
dHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nl
c3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNj
ZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGlt
ZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9t
YWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAg
fHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vj
b25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNjQ2LDkgKzE2NDQsOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRh
dGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7Ci0gICAg
aWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhl
cmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRv
bWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTE3NzYsMTAgKzE3NzMsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWluSUQg
PSA/Iik7Ci0gICAgaWYgKHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5i
aW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
cmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJfcyk7Cisg
ICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAgICAgICAgfHwgcmVtb3Zl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25k
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTgzMiwxMCArMTgyOSwxMCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25z
dCBSZWdpc3RyYWJsZQogICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxz
ZSwgeyB9KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hF
UkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwg
KnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9y
YWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlU3RvcmFn
ZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAg
aWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Mt
PmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8
fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CkBAIC0xOTE4LDkgKzE5MTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPgogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2
ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxk
TGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFp
bnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+
OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAg
IGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMwMSwxNiAr
MjI5NywxNSBAQCBDb29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBz
dWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpc1ByZXZhbGVudCwg
aGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAot
ICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKLSAg
ICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDApOwotICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3Rh
dGVtZW50LmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsKKyAgICBib29sIGhhc05vRW50
cnkgPSBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XOworICAgIGJvb2wgaXNQcmV2YWxl
bnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOworICAgIGJv
b2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CiAKICAgICBpZiAoIWFyZUFsbFRoaXJkUGFydHlDb29r
aWVzQmxvY2tlZFVuZGVyKHRvcEZyYW1lRG9tYWluKSAmJiAhaXNQcmV2YWxlbnQpCiAgICAgICAg
IHJldHVybiBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xpY3k7CkBAIC0yMzMzLDE0ICsy
MzI4LDE0IEBAIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTCiAKICAgICBhdXRvIGZpcnN0UGFydHlQ
cmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWlu
SUQgPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9t
YWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcmVxdWVzdGluZ0Rv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsIGZp
cnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duOjpObzsKIAotICAgIHJldHVybiAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9t
cHRXYXNTaG93bjo6Tm87CisgICAgcmV0dXJuICEhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkg
PyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6Tm87CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0CkBAIC0yMzQ4LDEyICsyMzQzLDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5k
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDAiX3MpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWlu
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlcklu
dGVyYWN0aW9uID0gMCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNjMsMTIgKzIzNTgsMTIgQEAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluc1RvQmxvY2tCdXQKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAx
Il9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3Ry
YWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5E
IGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAg
ICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNzgsMTIgKzIzNzMsMTIgQEAgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZG9tYWluc1dpdGhVc2VySW4KICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBP
YnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7Ci0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxl
IChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5k
KFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5T
dHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAt
MjM5MywxMyArMjM4OCwxMiBAQCBIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURv
bWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OgogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1YkZyYW1lRG9tYWluLCByZWdp
c3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJsZURvbWFpbiBhcyBzdWJGcmFt
ZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRvcExldmVsRG9tYWluSUQgRlJPTSBPYnNl
cnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRvbWFpbklEKSBhcyB6IElOTkVSIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50b3BMZXZlbERvbWFpbklEOyJfcyk7Ci0K
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzdWJGcmFtZURvbWFp
biwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMg
c3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5F
UiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsi
X3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAg
IHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMu
YWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21h
aW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEp
KSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1
bHRzOwogfQpAQCAtMjQ0NSwxOSArMjQzOSwxOCBAQCBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYQog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxEb21haW5E
YXRhPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9N
IE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQo
KikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21haW5J
RCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9t
YWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBn
cmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3Vu
dE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxF
Q1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBm
cm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5zb3VyY2VEb21haW5JRCA9IGRv
bWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7
CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2Vk
Q3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpKQotICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50Lmdl
dENvbHVtbkRvdWJsZSgyKSkKLSAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCgz
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQp
ID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNSkg
PyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNikpCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAsIFJlZ2lzdHJhYmxl
RG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHMoc3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludCg2KSkKICAgICAgICAgfSk7
CiAgICAgfQogICAgIApAQCAtMjQ3MywxMSArMjQ2NiwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25l
ZD4mJgogCiAgICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFu
Z2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklEc1RvQ2xlYXIuYmVnaW4oKSwg
ZG9tYWluSURzVG9DbGVhci5lbmQoKSkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyR3Jh
bmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwg
bGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmICghY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChjbGVhckdyYW5kZmF0aGVy
aW5nU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTI2
MTcsMjMgKzI2MTAsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIHNpemVfdCBjb3VudExlZnRUb1BydW5l
ID0gY291bnQgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvOwogICAgIEFTU0VSVChj
b3VudExlZnRUb1BydW5lKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZWNvcmRzVG9QcnVuZSht
X2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZ
IGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iKTsKLSAg
ICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZWNvcmRzVG9QcnVuZS5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gcmVjb3Jkc1RvUHJ1bmUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50
ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Il9zKTsKKyAgICBpZiAoIXJl
Y29yZHNUb1BydW5lIHx8IHJlY29yZHNUb1BydW5lLT5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1
bmUpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gZW50
cmllc1RvUHJ1bmU7Ci0gICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQotICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmdldENv
bHVtbkludCgwKSk7CiAKICAgICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KFdURjo6SXRl
cmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZW50cmllc1RvUHJ1bmUuYmVn
aW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwcnVu
ZUNvbW1hbmQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7Ci0gICAgaWYgKHBy
dW5lQ29tbWFuZC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHBydW5lQ29tbWFu
ZC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIpKTsKKyAgICBpZiAo
IXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNywzNSArMjcwOCwzMyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3Qg
UmVnaXN0cgogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0Nv
cnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YmZyYW1l
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50KG1fZGF0YWJhc2UsIGNvdW50
U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbyhtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVy
eSk7CisgICAgYXV0byBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRv
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3Vu
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CiAgICAgCi0gICAgaWYgKHN1YkZy
YW1lVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVz
dGluZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYg
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVE
b21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuYmlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwgZG9tYWlu
SUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSykgeworICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZElu
dCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklEKHRv
cEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4p
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJpbmRJ
bnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzdWJG
cmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAg
ICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIChzdWJGcmFtZVVuZGVy
VG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLmdldENvbHVtbkludCgwKSA9PSAxKTsKKyAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJU
b3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+Z2V0Q29sdW1uSW50KDApID09IDEpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBlbmRC
b29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wg
ZmxhZykKQEAgLTI4MTIsMjcgKzI4MDEsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJgogICAg
IGlmIChxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAgYXV0byBkYXRhID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKICAgICAKLSAgICBpZiAoZGF0YS5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRhdGEuYmluZEludCgxLCBkb21haW5JRChSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9tYWluKSkudmFsdWUoKSkg
IT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEtPmJpbmRJbnQoMSwgZG9tYWlu
SUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZh
bHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxlZCB0byBwcmVwYXJlIG9y
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChkYXRhLnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgIGlmIChkYXRhLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgICIpOwogICAgIGJ1aWxkZXIu
YXBwZW5kKHRhYmxlTmFtZSk7CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6XG4iKTsKICAg
ICAKLSAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLmdl
dENvbHVtbkludCgwKSk7CisgICAgYXV0byByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICBhcHBlbmROZXh0RW50cnkoYnVpbGRl
ciwgcmVzdWx0KTsKICAgICAKLSAgICB3aGlsZSAoZGF0YS5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRD
b2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewor
ICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29s
dW1uSW50KDApKTsKICAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAg
ICAgfQogfQpAQCAtMjk0NiwyOCArMjkzNCwyNiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklEKQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRp
bmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRp
bmdEYXRlczsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRNb3N0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBP
UkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMTsiX3Mp
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVT
QywgbW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CisgICAg
YXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOworICAgIGF1
dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBE
RVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKKyAgICBhdXRvIGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250
aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87Il9zKTsKIAotICAgIGlmIChj
b3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50
T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKTsKKyAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5n
RGF0ZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKIAotICAgIGlmIChnZXRNb3N0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVz
UGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdE
YXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgwKSwg
Z2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgIG1f
bW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogCi0gICAgaWYgKGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIGR1cmluZyB0aGUgY2FsbCB0byBwcmVwYXJlKCkgd2l0
aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4iLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI5NzYsMjYgKzI5NjIsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKICAg
ICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAt
IDEpCiAgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0Owog
ICAgIGVsc2UgewotICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5i
aW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4g
VGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9zaG9y
dFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRD
b2x1bW5JbnQoMikpOworICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJh
dGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
LCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogCiAg
ICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAt
IDEpCiAgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucmVzZXQo
KTsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZEludCgx
LCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+cmVzZXQoKTsKKyAg
ICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRo
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQg
YmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdE
YXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENv
bHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAg
ICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogfQogCkBAIC0zMDExLDIxICsyOTk3
LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVU
b2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBt
X29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAg
aWYgKHJvd3NUb1BydW5lID4gMCkgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlTGVh
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBP
cGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3Mp
OwotICAgICAgICBpZiAoZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkZWxldGVMZWFzdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVU
RSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERheSBMSU1J
VCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNs
dWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVMZWFzdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhE
YXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIHRvZGF5Lm1vbnRo
KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
YXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRo
LCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICBpZiAoIWluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
YmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMs
IHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTMwNjksMTYg
KzMwNTUsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAgICAgICAgZGF5c0Fnb0luU2Vj
b25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlz
VG9TdWJ0cmFjdDsKICAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpm
cm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsK
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBt
b250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgICAgIGlmIChpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCBkYXRlVG9JbnNlcnQu
eWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQuYmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgZGF0
ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
YXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRo
LCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICAgICAgaWYgKCFpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCBkYXRl
VG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0
ZXJzKCk7CkBAIC0zMjAxLDM2ICszMTg3LDM2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDCiAg
ICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2
YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFs
aWQgcmVwb3J0IHRpbWVzLgogICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
ICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKIAotICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0
YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRp
b24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQu
YmluZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xp
Y2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg4LCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5z
aWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoMTEsIGRlc3RpbmF0
aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRp
b25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNSwgcHJpb3JpdHkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDYsIGF0
dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDcsIHNvdXJj
ZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVU
b2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8g
c291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoMTAsIHNv
dXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRV
UkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVy
eSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0YXRlbWVudCA9IFNR
TGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9u
RGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVu
dC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNr
KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3RhdGVtZW50LmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlu
a2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/
IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg3LCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
KnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQo
KS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg0LCBh
dHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg1LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1w
dHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQo
Niwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1
cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Rh
dGVtZW50LT5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmth
YmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBp
bnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNDM1LDE0ICsz
NDIxLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXR0
cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTCiAKIFN0cmluZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZygp
CiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cyhtX2RhdGFiYXNlLCAiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7Ci0gICAgaWYgKHBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8
IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKKyAgICBp
ZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFz
dXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0
Q29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0Q29s
dW1uSW50KDEpKQorICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5n
ZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0
Q29sdW1uSW50KDEpKQogICAgICAgICByZXR1cm4gIlxuTm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnQgZGF0YS5cbiJfczsKIAogICAgIGF1dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQsIGFsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25zUXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nIl9zKTsKQEAgLTM1NzMsMTEgKzM1NTksMTEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6
UHJpdmF0ZUMKICAgICBpZiAoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgfHwgc291cmNl
RWFybGllc3RUaW1lVG9TZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoY2xlYXJBdHRy
aWJ1dGVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5iaW5kSW50KDIsICpk
ZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGNsZWFy
QXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfcyk7CisgICAgaWYg
KCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0byBzdGVwLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNTg3LDE4
ICszNTczLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1h
cmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBleHBpcmVk
VGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAotICAgIGF1dG8gZWFybGllc3RU
aW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvU291cmNlID0gPyIpOwotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0
aW5hdGlvblN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiA9IG51bGwiKTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNl
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9
ID8iX3MpOworICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51
bGwiX3MpOwogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2VTdGF0ZW1lbnQuYmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoIWVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGVhcmxpZXN0
VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRv
U2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0
YXRlbWVudCB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGlu
ZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApp
bmRleCA3NDExYmQ1ZDBiYWZmN2U0ZmRhNThiMmNjYjU2NmNlNDhmMmYwYjMxLi5hMWUzNTE1MzQ0
NmM1N2ZkMzg4NTlhNmRjZjg2MjRiMDE2MDMwOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMTc1LDcgKzE3NSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtaXNzaW5nUmVmZXJlbmNlVG9PYnNlcnZlZERvbWFpbnMoKTsKICAg
ICB2b2lkIG1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgZGVz
dHJveVN0YXRlbWVudHMoKTsKLSAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRT
Y29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBBU0NJSUxpdGVyYWwsIGNvbnN0IFN0
cmluZyYpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25zdDsKICAgICBWZWN0b3I8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQ
YXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2ln
bmVkLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VE
YXRhYmFzZS5jcHAKaW5kZXggNzYwMTFlM2EyOGQ1ZDEzNDk5ODU4ZDNiY2MzMmEyMDEwN2VkM2Ux
Yi4uNGM3OGZjZTk0Nzg5Mjg3MmU1ZGExNjVkZTNmNWFjOTdkYzJlMGQ4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgY29uc3QgY2hhciBnZXRJdGVt
c1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiOworc3Rh
dGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXks
IHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07CiAKIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4g
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShTdHJpbmcmJiBkYXRhYmFzZVBhdGgsIHVuc2ln
bmVkIHF1b3RhSW5CeXRlcykKIHsKQEAgLTk5LDEwICs5OSwxMCBAQCBib29sIExvY2FsU3RvcmFn
ZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgIGlmICghbV9kYXRhYmFz
ZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVt
VGFibGUgTElNSVQgMSIpOworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKIAogICAgIC8v
IFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sg
dGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDAp
KQorICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgd2l0aCB0aGUg
cmlnaHQgdHlwZSwgY29weSBhbGwgdGhlIGRhdGEgb3ZlciB0byBpdCBhbmQgdGhlbiByZXBsYWNl
IHRoZSBuZXcgdGFibGUgd2l0aCB0aGUgb2xkIHRhYmxlLgpAQCAtMzAyLDE5ICszMDIsMTggQEAg
Ym9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gSXRl
bVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikg
RlJPTSBJdGVtVGFibGUiX3MpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgIGlm
IChxdWVyeS0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJObyBy
ZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2Nh
bCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4g
IXF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICByZXR1cm4gIXF1ZXJ5LT5nZXRDb2x1bW5JbnQo
MCk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKQEAg
LTMzMCwxNCArMzI5LDE1IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0
aW5nKCkKICAgICAgICAgc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0
ZW1zUXVlcnlTdHJpbmcpOwogfQogCi1TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVT
dGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0CitTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVt
ZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0
ZXJhbCBxdWVyeSkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBBU1NFUlQobV9kYXRhYmFz
ZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhl
YXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpCiAgICAg
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OworICAgICAg
ICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7
CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKICAgICB9CiAgICAgcmV0dXJu
IFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGRiOGFkOTgzZWVhZDgwZjhjNWU5MGI2ZjAx
YTJmNjMxNDY1MTc3MzIuLjQ2MDM2ZDY1N2ViZTk3NDQ4ZTEyYzBkYThkODU0N2I4ZDRmOTFlZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRhdGFiYXNl
SXNFbXB0eSgpIGNvbnN0OwogCi0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25zdDsKIAog
ICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvSWNvbkRhdGFiYXNlLmNwcAppbmRleCAzMzk2MDJhNDlmMTE0M2Q5ZmZlNDYzMDVhYjFhZDk5
YTY4NzRjYjYzLi42NTA4ODZlZTU2NjE2MjBiODgzMGE2MzUwNmI5N2YzNDQwZDdmNzg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAK
QEAgLTY2LDcgKzY2LDggQEAgSWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBwYXRoLCBBbGxvd0RhdGFiYXNlV3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0g
U1FMaXRlU3RhdGVtZW50KG1fZGIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJhc2VJbmZv
IFdIRVJFIGtleSA9ICdWZXJzaW9uJzsiKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8g
dmVyc2lvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZS
T00gSWNvbkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnVmVyc2lvbic7Il9zKTsKKyAgICAgICAg
YXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVyc2lvblN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgaWYgKGRhdGFiYXNlVmVyc2lv
bk51bWJlciA+IGN1cnJlbnREYXRhYmFzZVZlcnNpb24pIHsKICAgICAgICAgICAgIExPRyhJY29u
RGF0YWJhc2UsICJEYXRhYmFzZSB2ZXJzaW9uIG51bWJlciAlZCBpcyBncmVhdGVyIHRoYW4gb3Vy
IGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgJWQgLSBjbG9zaW5nIHRoZSBkYXRhYmFzZSB0byBwcmV2
ZW50IG92ZXJ3cml0aW5nIG5ld2VyIHZlcnNpb25zIiwKICAgICAgICAgICAgICAgICBkYXRhYmFz
ZVZlcnNpb25OdW1iZXIsIGN1cnJlbnREYXRhYmFzZVZlcnNpb24pOwpAQCAtODQsNyArODUsNyBA
QCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0
YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmVkdWNl
IHNxbGl0ZSBSQU0gY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgMjAwMCBwYWdlcyAofjEuNWtCIHBl
ciBwYWdlKS4gM01CIG9mIGNhY2hlIGZvciBpY29uIGRhdGFiYXNlIGlzIG92ZXJraWxsLgotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyIpLmV4
ZWN1dGVDb21tYW5kKCk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBjYWNo
ZV9zaXplID0gMjAwOyJfcyk7CiAKICAgICAgICAgaWYgKGFsbG93RGF0YWJhc2VXcml0ZSA9PSBB
bGxvd0RhdGFiYXNlV3JpdGU6OlllcykgewogICAgICAgICAgICAgbV9wcnVuZVRpbWVyID0gbWFr
ZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxJY29uRGF0YWJhc2U+PihSdW5Mb29wOjpjdXJyZW50KCks
IHRoaXMsICZJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCk7CkBAIC0xNzUsMTcgKzE3Niwx
NyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGltcG9ydFF1ZXJ5ID0gbWFrZVN0cmluZygiU0VM
RUNUIFBhZ2VVUkwudXJsLCBJY29uSW5mby51cmwsIEljb25JbmZvLnN0YW1wIEZST00gUGFnZVVS
TCBJTk5FUiBKT0lOIEljb25JbmZvIE9OIFBhZ2VVUkwuaWNvbklEPUljb25JbmZvLmljb25JRCBX
SEVSRSBJY29uSW5mby5zdGFtcCA+ICIsIGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBub3RVc2Vk
SWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSksICc7Jyk7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIGltcG9ydFF1ZXJ5KTsKLSAgICBpZiAo
cXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RiLnBy
ZXBhcmVTdGF0ZW1lbnQoaW1wb3J0UXVlcnkpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBpY29uIHVybCBpbXBvcnQgcXVlcnkiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwor
ICAgIGF1dG8gcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICBMb2NrSG9sZGVyIGxvY2tIb2xk
ZXIobV9wYWdlVVJMVG9JY29uVVJMTWFwTG9jayk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnkuZ2V0Q29s
dW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uVGV4dCgxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1
ZXJ5LnN0ZXAoKTsKKyAgICAgICAgbV9wYWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS0+Z2V0
Q29sdW1uVGV4dCgwKSwgcXVlcnktPmdldENvbHVtblRleHQoMSkpOworICAgICAgICByZXN1bHQg
PSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAgIHN0YXJ0UHJ1bmVUaW1lcigpOwpAQCAtMjE0
LDEyICsyMTUsMTIgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAg
QVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX3BydW5lSWNvbnNTdGF0ZW1lbnQp
IHsKLSAgICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Iik7
Ci0gICAgICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgYXV0byBwcnVuZUljb25zU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVh
cFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8pOyJfcyk7
CisgICAgICAgIGlmICghcHJ1bmVJY29uc1N0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHBydW5lSWNvbnMgZmFpbGVkIik7Ci0gICAgICAgICAg
ICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CisgICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9IHBydW5lSWNvbnNTdGF0
ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9wcnVu
ZUljb25zU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5v
dFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSkg
IT0gU1FMSVRFX09LKSB7CkBAIC0yMzAsOCArMjMxLDggQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBy
dW5lVGltZXJGaXJlZCgpCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYik7
CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgi
REVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBG
Uk9NIEljb25JbmZvKTsiKTsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZS
T00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbklu
Zm8pOyIpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJY29uRGF0
YSBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyJfcyk7
CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUg
aWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiX3MpOwogICAgIH0K
ICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnJlc2V0KCk7CiAKQEAgLTI4NSwxMiArMjg2LDEy
IEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6aWNvbklERm9ySWNvblVSTChjb25z
dCBTdHJpbmcmIGljb25VUkwsIGJvb2wmIGV4CiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwog
CiAgICAgaWYgKCFtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9pY29u
SURGb3JJY29uVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIs
ICJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdI
RVJFIEljb25JbmZvLnVybCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbklERm9ySWNvblVS
TFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25J
REZvckljb25VUkxTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJTRUxFQ1Qg
SWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25J
bmZvLnVybCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWljb25JREZvckljb25VUkxTdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBpY29uSURG
b3JJY29uVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVt
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IH0KKyAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gaWNvbklERm9ySWNvblVS
TFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmICht
X2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGljb25VUkwpICE9IFNRTElU
RV9PSykgewpAQCAtMzE1LDEyICszMTYsMTIgQEAgYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25J
REZvclBhZ2VVUkwoaW50NjRfdCBpY29uSUQsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKICAgICBB
U1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwog
CiAgICAgaWYgKCFtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9z
ZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGIsICJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmwsIGljb25JRCkgVkFMVUVTICgoPyksID8p
OyIpOwotICAgICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRl
bWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFBhZ2VVUkwgKHVy
bCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzZXRJY29uSURG
b3JQYWdlVVJMU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBz
dGF0ZW1lbnQgc2V0SWNvbklERm9yUGFnZVVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fc2V0
SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50
ID0gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KIAogICAgIGlmIChtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDEsIHBhZ2VVUkwpICE9IFNRTElURV9PSwpAQCAtMzQyLDEyICszNDMsMTIgQEAgVmVjdG9y
PGNoYXI+IEljb25EYXRhYmFzZTo6aWNvbkRhdGEoaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJU
KG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAg
ICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9k
YiwgIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNv
bklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25EYXRhU3RhdGVtZW50ID0gbV9kYi5w
cmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIEljb25EYXRhLmRhdGEgRlJPTSBJY29uRGF0YSBX
SEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uRGF0YVN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGlj
b25EYXRhIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9IG51bGxw
dHI7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CisgICAgICAgIG1faWNvbkRh
dGFTdGF0ZW1lbnQgPSBpY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KIAogICAgIGlmIChtX2ljb25EYXRhU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgaWNv
bklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTM3MCwyMCArMzcxLDIwIEBAIE9wdGlvbmFsPGludDY0
X3Q+IEljb25EYXRhYmFzZTo6YWRkSWNvbihjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFZl
Y3RvcjxjaGFyCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJh
c2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9hZGRJY29uU3RhdGVtZW50KSB7Ci0gICAgICAg
IG1fYWRkSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAi
SU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Iik7Ci0gICAg
ICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgYXV0byBhZGRJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgi
SU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Il9zKTsKKyAg
ICAgICAgaWYgKCFhZGRJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlBy
ZXBhcmluZyBzdGF0ZW1lbnQgYWRkSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNv
blN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IGFkZEljb25TdGF0ZW1lbnQu
dmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2FkZEljb25EYXRh
U3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVl
PFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRh
dGEpIFZBTFVFUyAoPywgPyk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25EYXRhU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gYWRkSWNvbkRhdGFTdGF0
ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29uRGF0YSAo
aWNvbklELCBkYXRhKSBWQUxVRVMgKD8sID8pOyJfcyk7CisgICAgICAgIGlmICghYWRkSWNvbkRh
dGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVu
dCBhZGRJY29uRGF0YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1l
bnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
fQorICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gYWRkSWNvbkRhdGFTdGF0ZW1lbnQu
dmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9hZGRJY29uU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBTUUxJVEVfT0spIHsKQEAgLTQxMywxMiAr
NDE0LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGltZXN0YW1wKGludDY0X3Qg
aWNvbklELCBpbnQ2NF90IHRpbWVzdGFtcCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3Jp
dGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3VwZGF0ZUljb25U
aW1lc3RhbXBTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVt
ZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJVUERBVEUgSWNvbkluZm8g
U0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyIpOwotICAgICAgICBpZiAobV91cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0
ZW1lbnQoIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAgPSA/IFdIRVJFIGljb25JRCA9ID87Il9z
KTsKKyAgICAgICAgaWYgKCF1cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50KSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgdXBkYXRlSWNvblRpbWVzdGFtcCBm
YWlsZWQiKTsKLSAgICAgICAgICAgIG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG51
bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV91cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50ID0gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC52YWx1
ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3VwZGF0ZUljb25UaW1l
c3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB0aW1lc3RhbXApICE9IFNRTElURV9PSyB8fCBt
X3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBpY29uSUQpICE9IFNR
TElURV9PSykgewpAQCAtNDM3LDI4ICs0MzgsMjggQEAgdm9pZCBJY29uRGF0YWJhc2U6OmRlbGV0
ZUljb24oaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09
IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9kZWxldGVQYWdlVVJMc0Zv
ckljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIFBhZ2VV
UkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZVBh
Z2VVUkxzRm9ySWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBT
dGF0ZW1lbnQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7
Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBkZWxldGVQYWdlVVJMc0Zv
ckljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRl
bWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAg
bV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBkZWxldGVQYWdlVVJMc0Zvckljb25T
dGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2Rl
bGV0ZUljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25E
YXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRl
SWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBkZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiX3MpOworICAg
ICAgICBpZiAoIWRlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAg
IG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBkZWxldGVJ
Y29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBp
ZiAoIW1fZGVsZXRlSWNvblN0YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25TdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25J
bmZvIFdIRVJFIEljb25JbmZvLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRl
SWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRl
bGV0ZUljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYg
KCFkZWxldGVJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmlu
ZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNv
blN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gZGVsZXRlSWNvblN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9y
SWNvblN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25JRCkgIT0gU1FMSVRFX09LCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IGNlNWMy
OWJhYTU4MDVjYTQyZjQ4ZWYwNTBiODMyZDBjZDVjY2UxMWMuLmNhZTA4MmYxM2RjZDM2OGM0ODE5
NWJlMzExZjIwYTViNjY0NDhmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFn
ZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBTdG9yYWdlQXJl
YVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFs
dWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQg
MSJfcyk7CiAgICAgICAgIC8vIHRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZC4KLSAgICAg
ICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCisgICAgICAgIGlmIChxdWVy
eSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTMyNiw4ICszMjYsOCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVy
Zm9ybUltcG9ydCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIik7
Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0
ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAg
ICAgICAgbWFya0ltcG9ydGVkKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSwxMCArMzM1LDEw
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KCkKIAogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgp
OworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIHdoaWxlIChyZXN1bHQgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDAp
LCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkpOwotICAgICAgICByZXN1bHQgPSBxdWVy
eS5zdGVwKCk7CisgICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBx
dWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnkt
PnN0ZXAoKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC00
MTIsMjcgKzQxMiwyNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRl
bXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcwogCiAgICAgLy8gSWYgdGhl
IGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdl
IHdyaXRlIGFueSBuZXcgb25lcyBpbi4KICAgICBpZiAoY2xlYXJJdGVtcykgewotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIp
OwotICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBh
dXRvIGNsZWFyID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJdGVt
VGFibGUiX3MpOworICAgICAgICBpZiAoIWNsZWFyKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0g
Y2xlYXItPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGluc2VydCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3Mp
OworICAgIGlmICghaW5zZXJ0KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVt
b3ZlKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKLSAg
ICBpZiAocmVtb3ZlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJlbW92ZSA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJF
IGtleT0/Il9zKTsKKyAgICBpZiAoIXJlbW92ZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDQzLDIxICs0NDMs
MjEgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRl
bXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBu
dWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBh
biBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBp
dC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7CisgICAgICAgIGF1dG8mIHF1ZXJ5
ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5
LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgICAgICBxdWVyeS0+YmluZFRleHQoMSwgaXQtPmtl
eSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2Un
cmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4KICAgICAgICAgaWYg
KCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+
dmFsdWUpOworICAgICAgICAgICAgcXVlcnktPmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKLSAg
ICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHF1
ZXJ5LT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9y
YWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBxdWVyeS5yZXNldCgpOworICAgICAgICBxdWVyeS0+cmVzZXQoKTsKICAg
ICB9CiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CkBAIC00OTksMzEgKzQ5OSwzMyBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSgpCiAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIpOwotICAg
IGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gY291bnQgPSBbJl0gewor
ICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAoIXF1ZXJ5KSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVt
VGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8gcmVzdWx0
cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKLSAgICBpbnQgcmVz
dWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAg
ICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBp
biBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5n
ZXRDb2x1bW5JbnQoMCk7CisgICAgfSgpOworICAgIGlmIChjb3VudCkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAotICAgIGludCBjb3VudCA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsKLSAgICBp
ZiAoIWNvdW50KSB7Ci0gICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7Ci0gICAgICAgIG1fZGF0YWJh
c2UuY2xvc2UoKTsKLSAgICAgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuaXNBY3Rp
dmUoKSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVy
ID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgICAgICAg
ICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRh
dGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERh
dGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKCFG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQotICAgICAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFz
ZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9CisgICAgbV9kYXRhYmFzZS5jbG9z
ZSgpOworICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlk
ZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0
cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsK
KyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5h
bWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVu
YW1lKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBm
aWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKaW5kZXgg
ZDM1ZDVjMzg1MDAzY2FjZDQ2ZjcwMGQ3YWRlNmUyMGEyOWZmZWRiOS4uM2VjY2ZhNzVkMjAyNmU1
ZDMwZDk3YjAwMzZlM2ZlMjM3ZDRiNzcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0
b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBAIC0xODksOCArMTg5LDggQEAgdm9pZCBTdG9yYWdl
VHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKICAgICAgICAgaWYgKG1fZGF0
YWJhc2UuaXNPcGVuKCkpIHsKICAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAgICAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMi
KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTk5
LDggKzE5OSw4IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlm
aWVycygpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0TXV0ZXgpOwotICAgICAgICAgICAgICAgIHdo
aWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlz
b2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNl
dC5hZGQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVf
RE9ORSkgewpAQCAtMzE2LDE2ICszMTYsMTYgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1Nl
dE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdAogICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxV
RVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRo
ZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9IAogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKICAgICAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBp
biB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAg
ewpAQCAtNDA0LDIzICs0MDQsMjMgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFs
bE9yaWdpbnMoKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIl9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0
YXRlbWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpbnQgcmVzdWx0
OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgw
KSkpCisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKICAgICAgICAgICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgICAgICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDQxLDEyICs0NDEsMTIgQEAgdm9pZCBT
dG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgICAgICBvcGVuVHJhY2tl
ckRhdGFiYXNlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50
KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIik7Ci0gICAgICAgIGlmIChkZWxldGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQu
ZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0
ZUNvbW1hbmQoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBk
ZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBkZWxldGVTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hl
cmUgb3JpZ2luPT8iX3MpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmln
aW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYg
KCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGRlbGV0ZVN0YXRlbWVu
dC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1l
bnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhl
Y3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjE0LDE3ICs2MTQsMTcgQEAgU3Ry
aW5nIFN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKQogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0Nv
dW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49
PyIpOwotICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHBhdGhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCFwYXRoU3Rh
dGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9u
IG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEo
KSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9Ci0gICAgcGF0aFN0YXRlbWVudC5i
aW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRl
bWVudC5zdGVwKCk7CisgICAgcGF0aFN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJl
dHVybiBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgcmV0dXJuIHBhdGhTdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiB9CiAgICAgCiB1aW50NjRfdCBTdG9yYWdlVHJhY2tl
cjo6ZGlza1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2E3NzdlZWQ5NjdlNzZl
YWZhZjc4ZDY2YTM3OTVhYzhlYTU5MDgzZC4uYTdiZWI5N2JiYThiZWFkNjQyNjJiYmVkZmRlZTli
ZmNhNjFjNTNmOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0
YWJhc2UgJiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVz
ZSBtb3JlIEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmFkZFRvRGF0YWJhc2VzVGFibGUpOgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KCkgdG8gRmlsZVN5c3RlbTo6ZmlsZVNpemUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJhY2tlclRlc3QubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQpp
bmRleCBmODIwY2ZlYTIwY2RjOGVmMWYzZWVhMWRhOTM4YTA0Y2Q5YmZlNmFmLi43NTdlYzI0MjU4
NTExYTdmOTEyMTFhYWNjYTE0NTFmM2FiZGUyYjExIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVz
dC5tbQpAQCAtNjUsMTIgKzY1LDEyIEBAIHN0YXRpYyB2b2lkIGFkZFRvRGF0YWJhc2VzVGFibGUo
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIGNvbnN0IFNlY3VyaXR5T3JpZ2luCiAgICAgU1FM
aXRlRGF0YWJhc2UgZGF0YWJhc2U7CiAgICAgZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFkZERhdGFiYXNlU3RhdGVtZW50KGRhdGFiYXNlLCAiSU5T
RVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7
Iik7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQucHJlcGFyZSgpOwotICAgIGFkZERhdGFiYXNl
U3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAg
YWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMiwgbmV3RGF0YWJhc2VOYW1lKTsKLSAgICBh
ZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgzLCBuZXdEYXRhYmFzZVBhdGgpOwotICAgIGFk
ZERhdGFiYXNlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CisgICAgaWYgKGF1dG8gYWRkRGF0
YWJhc2VTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBE
YXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/KTsiX3MpKSB7Cisg
ICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJ
ZGVudGlmaWVyKCkpOworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMiwg
bmV3RGF0YWJhc2VOYW1lKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmJpbmRUZXh0
KDMsIG5ld0RhdGFiYXNlUGF0aCk7CisgICAgICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LT5leGVj
dXRlQ29tbWFuZCgpOworICAgIH0KIAogICAgIGRhdGFiYXNlLmNsb3NlKCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="449620"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428641</attachid>
            <date>2021-05-14 10:55:00 -0700</date>
            <delta_ts>2021-05-14 15:26:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210514105500.patch</filename>
            <type>text/plain</type>
            <size>291395</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NDk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk2YjAzYzE0MTA2NTIzNjM5ZjMxMDFh
NTkzNTE3NzU3ZjYzZGY0NmMuLmVmNWM3ZWUzZDJmYjA4NmNjZjE4Yzc0M2M3YmExODBlOWUzNjZh
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSgpIHRvIEZpbGVTeXN0ZW06OmZpbGVTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNTJmZDRiYzIwNjJh
MTAzNmVmM2NlYzMyZGY3NzJmMjhmZGRkOTEzLi42NmQxYTdlMDc3OGI5NzdmMzE2MWE1ZDRmZjkz
Zjc5ZTFlNjI3OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDIxLTA1LTEzICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0
aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1p
emUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbjoKKyAgICAgICAgLSBU
aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlIHNvIHRoYXQgd2Ug
bmV2ZXIgaGF2ZSBhCisgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHRoYXQgaGFzIG5vdCBiZWVu
ICJwcmVwYXJlZCIuIE9ubHkgdGhlIFNRTGl0ZURhdGFiYXNlCisgICAgICAgICAgY2FuIG5vdyBj
b25zdHJ1Y3QgU1FMaXRlU3RhdGVtZW50IG9iamVjdHMuIFdlIGFscmVhZHkgbmVlZGVkIHRvIHBh
c3MKKyAgICAgICAgICBhIFNRTGl0ZURhdGFiYXNlIHJlZmVyZW5jZSB3aGVuIGNvbnN0cnVjdGlu
ZyB0aGUgU1FMaXRlU3RhdGVtZW50IGFueXdheS4KKyAgICAgICAgLSBUaGUgY29uc3RydWN0IEFO
RCBwcmVwYXJlIGEgU1FMaXRlU3RhdGVtZW50LCB3ZSBub3cgY2FsbAorICAgICAgICAgIFNRTGl0
ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KCkgdG8gZ2V0IGEgc3RhY2sgb2JqZWN0IG9yCisg
ICAgICAgICAgU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVIZWFwU3RhdGVtZW50KCkgdG8gZ2V0IGEg
aGVhcCBvbmUuIFRoZXNlIGZ1bmN0aW9ucworICAgICAgICAgIHJldHVybiBhbiBFeHBlY3RlZDw+
IHR5cGUgc28gdGhleSB3aWxsIGVpdGhlciByZXR1cm4gYSAicHJlcGFyZWQiCisgICAgICAgICAg
U1FMaXRlU3RhdGVtZW50IG9yIGFuIHVuZXhwZWN0ZWQgU1FMaXRlIGVycm9yIGNvZGUuCisgICAg
ICAgIC0gVGhlIHByZXBhcmUqU3RhdGVtZW50KCkgZnVuY3Rpb25zIG5vdyBhdm9pZCBTdHJpbmcg
YWxsb2NhdGlvbnMgaW4gbW9zdAorICAgICAgICAgIGNhc2VzIHRoYW5rcyB0byBvdmVybG9hZHMg
dGFraW5nIGluIHRoZSBxdWVyeSBhcyBhbiBBU0NJSUxpdGVyYWwuCisgICAgICAgIC0gRHJvcCBm
aW5hbGl6ZSgpIGZ1bmN0aW9uIG9uIFNRTGl0ZVN0YXRlbWVudCBzbyBTUUxpdGVTdGF0ZW1lbnQg
b2JqZWN0cworICAgICAgICAgIGFyZSBhbHdheXMgdmFsaWQuIEl0IHNpbXBsaWZpZXMgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFNRTGl0ZVN0YXRlbWVudAorICAgICAgICAgIG1lbWJlciBmdW5jdGlv
bnMuIFRoZSBTUUxpdGVTdGF0ZW1lbnQgZGVzdHJ1Y3RvciAiZmluYWxpemVzIiB0aGUgc3RhdGVt
ZW50CisgICAgICAgICAgc28gdXNlcnMgY2FuIHNpbXBseSBkZXN0cm95IHRoZSBTUUxpdGVTdGF0
ZW1lbnQgaWYgdGhleSBuZWVkIHRoZSBvYmplY3QKKyAgICAgICAgICB0byBiZSBmaW5hbGl6ZSBh
dCBhIGNlcnRhaW4gcG9pbnQgKGUuZy4gYmVmb3JlIGNsb3NpbmcgYSBkYXRhYmFzZSkuCisgICAg
ICAgIC0gRHJvcCB0aGUgcHJlcGFyZSgpICYgcHJlcGFyZUFuZFN0ZXAoKSBTUUxpdGVTdGF0ZW1l
bnQgbWVtYmVyIGZ1bmN0aW9ucyBub3cKKyAgICAgICAgICB0aGF0IFNRTGl0ZVN0YXRlbWVudCBh
cmUgYWx3YXlzIHByZXBhcmVkLgorICAgICAgICAtIFN0b3Agc3RvcmluZyB0aGUgU1FMIHF1ZXJ5
IGFzIGEgU3RyaW5nIGRhdGEgbWVtYmVyIGluIFNRTGl0ZVN0YXRlbWVudCBjbGFzcy4KKyAgICAg
ICAgICBUaGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhleSBpcyBubyBzZXBhcmUg
cHJlcGFyZSBzdGVwIGFmdGVyIHRoZQorICAgICAgICAgIGNvbnN0cnVjdGlvbi4gVGhpcyBtYWtl
cyB0aGUgU1FMaXRlU3RhdGVtZW50IGEgYml0IHNtYWxsZXIuCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6Y3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVu
c3VyZVZhbGlkQmxvYlRhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJ
bmRleFJlY29yZHNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5k
UG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpt
aWdyYXRlSW5kZXhJbmZvVGFibGVGb3JJRFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9y
SURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvbkZy
b21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRl
U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpyZXNldEFuZFJlYmluZFByZUluZGV4U3RhdGVtZW50SWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0UmVj
b3JkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFRleHRWYWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
cmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OmRhdGFiYXNlTmFtZXNOb0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnF1b3RhTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6c2V0UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGREYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFi
YXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNl
RmlsZUlmRW1wdHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6ZXhlY3V0ZSk6CisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhh
c2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVH
cm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmlu
Z1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0ZWRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVP
cmlnaW5SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlTmV3ZXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmxvYWRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjptYW5pZmVzdFVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphckRCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
REI6OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmFsbERv
bWFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OmV4ZWN1dGVTcWwpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZTo6dXNlV0FMSm91cm5hbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6
Om1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRNYXhp
bXVtU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZTo6Y2xlYXJBbGxUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2U6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSk6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
OjpwcmVwYXJlSGVhcFN0YXRlbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0YXRlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVTdGF0ZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpzdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJl
dHVybnNBdExlYXN0T25lUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dDo6YmluZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudDo6YmluZE51bGwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
OjpiaW5kUGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6
OmlzQ29sdW1uTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29s
dW1uRGVjbGFyZWRBc0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29s
dW1uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uRG91Ymxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudURCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoUG9wdXBNZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVTaW1wbGVTcWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KToKKyAgICAgICAgKiB3
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6
CisKIDIwMjEtMDUtMTQgIFppcmFuIFN1biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBX
cm9uZyBzdGF0aWMgcG9zaXRpb24gZm9yIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudCB3
aXRoIGRpZmZlcmVudCB3cml0aW5nLW1vZGUgdGhhbiBpdHMgY29udGFpbmluZyBibG9jawpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCAwZGQyODFhODlmN2U0NzEyMTk2YjFkODEzNTIzZDNiYTRhZTgyMzI5Li43MWI3NTI3
M2U2ZTA1ZDhiOWQ3M2U3Yjg2NjY2NzU4ZDllMzY2OWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcw
IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50IGNyZWF0aW9uIGFuZCBwcmVw
YXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0YWJhc2UgJiBTUUxpdGVTdGF0
ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVzZSBtb3JlIEFTQ0lJTGl0ZXJh
bHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdU
YWJsZXNJblNjaGVtYSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVuYW1lQ29sdW1uSW5U
YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5Rmlu
ZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2
YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291
cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhh
c1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmRE
ZWxldGVDb29raWVzRm9yIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0NvcnJlY3RTdWJTdGF0aXN0aWNzQ291bnQpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5k
U3ViU3RhdGlzdGljTGlzdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhclNlbnRBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0
ZW1lbnQgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6OnBvcHVsYXRlUGFnZVVSTFRvSWNvblVSTE1h
cCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlOjppY29uSURGb3JJY29uVVJMKToKKyAgICAgICAg
KFdlYktpdDo6SWNvbkRhdGFiYXNlOjpzZXRJY29uSURGb3JQYWdlVVJMKToKKyAgICAgICAgKFdl
YktpdDo6SWNvbkRhdGFiYXNlOjppY29uRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRh
YmFzZTo6YWRkSWNvbik6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6dXBkYXRlSWNv
blRpbWVzdGFtcCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6ZGVsZXRlSWNvbik6
CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5lY3Rpb25TdGFydCA9PSAw
IHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggNTJl
MmUyYjQ5ZjIzZGFiOTAwMThkMGE4ZjdhMmNlNmU2NmM1NTJiYS4uMmFjMjc2NjliZGIxYmUwNmVj
ZmMxMDQ1NjNlZGYxZmYwNWRjOTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NSBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJl
cGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3Rh
dGVtZW50IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVy
YWxzLgorCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0
T3JpZ2luSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3lu
Y1NldE9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3lu
Y0RlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3lu
Y0RlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpkYXRhYmFz
ZVBhdGhGb3JPcmlnaW4pOgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKCkgdG8gRmls
ZVN5c3RlbTo6ZmlsZVNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVm
LmggYi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAppbmRleCA0MTVhMjliNjYwY2ZlOWU4MzYw
MGRhNjE5YzFlYzNlNzFjMGYzNzk3Li5jNGVlM2RjMTI4NzRmMTk4ZTFiZjQ1M2YyMzdhOTljZjQ3
Njc2ZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9VbmlxdWVSZWYuaApAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9yZWYpOwogICAgIH0KIAorICAgIGV4cGxpY2l0IFVuaXF1ZVJlZihUJiBvdGhl
cikKKyAgICAgICAgOiBtX3JlZigmb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWYp
OworICAgIH0KKwogICAgIFQmIGdldCgpIHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsg
fQogICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3Jl
ZjsgfQogCkBAIC04MCwxMiArODYsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+
IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0
ZDo6dW5pcXVlX3B0cjxVPik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5kIGNsYXNzIFVu
aXF1ZVJlZjsKIAotICAgIFVuaXF1ZVJlZihUJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZigmb3Ro
ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZWYpOwotICAgIH0KLQogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUPiBtX3JlZjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggOThkYjk4Y2M3M2MxYzA5ODc3NWYzMGI3YTRlYTM3OWRkZGVmZTRlMS4uOWFhYTBmZDUz
ZGVjZDFhZDZmODU1MDA2ZGM3M2E1NzU0Zjc3MjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTI2MywxMyArMjYzLDEzIEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWln
cmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAg
ICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hl
bWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQg
YW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkg
ewpAQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNU
YWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+
Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNF
bXB0eSgpKTsKQEAgLTMzOCwxMyArMzM4LDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAg
IHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNv
cmQgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIs
ICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxv
YlJlY29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdC
bG9iUmVjb3JkcyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZv
ciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
KyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzU4LDcgKzM1
OCw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KQogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRTY2hl
bWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQCBib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKIAogICAgIHsK
ICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRh
YmxlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VM
RUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxl
cyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxl
cyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxv
YkZpbGVzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGlu
dCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
ICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzkxLDcgKzM5
MSw3IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBi
bG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC00MjgsMTMgKzQyOCwxMyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgp
CiAgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUg
c2NoZW1hIGZvciBhbiBleGlzdGluZyBpbmRleCByZWNvcmQgdGFibGUuCi0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyIpOwotICAgICAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyJfcyk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFi
bGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBp
bnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJl
c3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIElu
ZGV4UmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAg
ICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CkBAIC00NTEsNyArNDUxLDcgQEAg
Ym9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUo
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2No
ZW1hID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCgh
Y3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNTAzLDEzICs1MDMsMTMgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBm
b3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIGluZGV4LgotICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIg
V0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRzSW5kZXgnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzSW5k
ZXggaW5kZXggYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNx
bGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRT
Y2hlbWEuaXNFbXB0eSgpKTsKQEAgLTU2MSwxMyArNTYxLDEzIEBAIGJvb2wgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKIAogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5h
bWU9J0luZGV4UmVjb3Jkc1JlY29yZEluZGV4JyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0
ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSBuYW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXgu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
djFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSkpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCBi
b29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJ
bmRleCgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBj
dXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJl
bnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNT
RVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC02MjQsMjAgKzYyNCwyMCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAgIH0KIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMg
KCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0
YVZlcnNpb24pICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24n
LCA/KTsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
KDEsIGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkYXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJ
bmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnRGF0YWJhc2VOYW1lJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgbV9pZGVu
dGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0
YWJhc2VOYW1lJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNx
bC0+YmluZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbmFtZSBpbnRvIElEQkRhdGFi
YXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDYsMTAgKzY0NiwxMCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBv
cHVsYXRlSW5pdGlhbAogICAgIHsKICAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRl
ZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3Vw
cG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgICAgLy8gVGhl
cmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZv
IFZBTFVFUyAoJ0RhdGFiYXNlVmVyc2lvbicsID8pOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmlu
Zzo6bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJz
aW9uJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZFRleHQoMSwgU3RyaW5nOjpudW1iZXIoMCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUg
KCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNjc0LDE5ICs2NzQsMTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRl
ZD4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwK
ICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBz
Y2hlbWEgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3Fs
aXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4iKTsKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9S
T1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNj
aGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAogICAgIEFTU0VSVCghY3Vy
cmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNzM5LDIyICs3MzksMjIgQEAgYm9vbCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhh
c2hNYXA8c3RkOjoKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgs
IGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVu
dCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwgb2JqZWN0U3Rv
cmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRleEluZm87Il9zKTsK
KyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3Ig
cHJlcGFyaW5nIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gSW5kZXhJbmZvIHRhYmxl
ICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAg
ICAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7
CisgICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsK
KyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7
IG9iamVjdFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVBh
dGhCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMs
IGtleVBhdGhCdWZmZXIpOwotICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVj
dG9yKDMsIGtleVBhdGhCdWZmZXIpOworICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1l
bnQtPmdldENvbHVtbkludCg0KTsKKyAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDUpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRl
eEluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFz
cWwKQEAgLTc2OSw3ICs3NjksNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0
ZUluZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OgogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpA
QCAtODA0LDIyICs4MDQsMjIgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJ
bmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3QKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1Qg
aW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBG
Uk9NIEluZGV4UmVjb3JkczsiX3MpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2Jq
ZWN0U3RvcmVSZWNvcmRJRCBGUk9NIEluZGV4UmVjb3JkczsiX3MpOworICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVt
ZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVp
bnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0
KDEpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVj
dFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUJ1ZmZlcjsK
LSAgICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5QnVmZmVy
KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleUJ1
ZmZlcik7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIHZhbHVlQnVmZmVyKTsKLSAg
ICAgICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDQp
OworICAgICAgICAgICAgc3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywgdmFsdWVC
dWZmZXIpOworICAgICAgICAgICAgdWludDY0X3QgcmVjb3JkSUQgPSBzdGF0ZW1lbnQtPmdldENv
bHVtbkludDY0KDQpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChT
UUw6OlB1dFRlbXBJbmRleFJlY29yZCwgIklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBW
QUxVRVMgKD8sID8sIENBU1QoPyBBUyBURVhUKSwgQ0FTVCg/IEFTIFRFWFQpLCA/KTsiX3MpOwog
ICAgICAgICAgICAgaWYgKCFzcWwKQEAgLTgzMyw3ICs4MzMsNyBAQCBib29sIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFz
aE1hcDxzdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkgewpAQCAtOTg5LDEwICs5ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElE
QkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRh
YmFzZUkKIAogICAgIFN0cmluZyBkYXRhYmFzZU5hbWU7CiAgICAgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJ
bmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOwotICAgICAgICBpZiAoc3FsLmlzQ29s
dW1uTnVsbCgwKSkKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFi
YXNlTmFtZSc7Il9zKTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRhdGFiYXNlTmFtZSA9IHNxbC5nZXRDb2x1
bW5UZXh0KDApOworICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMCk7
CiAgICAgICAgIGlmIChkYXRhYmFzZU5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgp
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIGluZm8gZGF0
YWJhc2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lICgnJXMnKSIsIGRh
dGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMDAsMTAgKzEw
MDAsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICB9CiAgICAgdWludDY0X3QgZGF0
YWJhc2VWZXJzaW9uOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxp
dGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0
YWJhc2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAg
ICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFs
dWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9z
KTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLT5nZXRDb2x1bW5UZXh0
KDApOwogICAgICAgICBhdXRvIHBhcnNlZFZlcnNpb24gPSBwYXJzZUludGVnZXI8dWludDY0X3Q+
KHN0cmluZ1ZlcnNpb24pOwogICAgICAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBj
bGVhbmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0
cmluZ1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CkBAIC0xMDIxLDE3ICsxMDIxLDE3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFj
dEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgYm9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gKHJlc3Vs
dC52YWx1ZSgpID09IElzU2NoZW1hVXBncmFkZWQ6Olllcyk7CiAKICAgICB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgs
IGF1dG9JbmMgRlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVj
dFN0b3JlSW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5J
bnQ2NCgwKTsKLSAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBzcWwuZ2V0Q29s
dW1uVGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdl
dENvbHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IHNx
bC0+Z2V0Q29sdW1uVGV4dCgxKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhC
dWZmZXI7Ci0gICAgICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhC
dWZmZXIpOworICAgICAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0
aEJ1ZmZlcik7CiAKICAgICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3Jl
S2V5UGF0aDsKICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1
ZmZlci5zaXplKCksIG9iamVjdFN0b3JlS2V5UGF0aCkpIHsKQEAgLTEwMzksMTEgKzEwMzksMTEg
QEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3Fs
LmdldENvbHVtbkludCgzKTsKKyAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC0+
Z2V0Q29sdW1uSW50KDMpOwogCiAgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5n
T2JqZWN0U3RvcmUoeyBvYmplY3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUob2Jq
ZWN0U3RvcmVLZXlQYXRoKSwgYXV0b0luY3JlbWVudCB9KTsKIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTA1NiwyMCAr
MTA1NiwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIEhhc2hNYXA8c3RkOjpwYWly
PHVpbnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIEhhc2hNYXA8
dWludDY0X3QsIFZlY3RvcjxJREJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBv
YmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5m
bzsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5h
bWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5k
ZXhJbmZvOyJfcyk7CisgICAgICAgIGlmICghc3FsKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIElu
ZGV4SW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
CiAKLSAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQg
PSBzcWwtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLmdldENvbHVtbkludDY0KDApOwotICAg
ICAgICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAg
ICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGluZGV4SUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOworICAg
ICAgICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDIpOwog
CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNx
bC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBz
cWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKIAogICAgICAgICAg
ICAgT3B0aW9uYWw8SURCS2V5UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFk
ZXNlcmlhbGl6ZUlEQktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5
UGF0aEJ1ZmZlci5kYXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkg
ewpAQCAtMTA4MSw4ICsxMDgxLDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4g
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9v
bCB1bmlxdWUgPSBzcWwuZ2V0Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVu
dHJ5ID0gc3FsLmdldENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3Fs
LT5nZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBzcWwtPmdl
dENvbHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IGRhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJRCk7CiAgICAgICAg
ICAgICBpZiAoIW9iamVjdFN0b3JlKSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlz
dGluZ0RhdGFiYXNlSQogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgo
aW5kZXhJbmZvKTsKICAgICAgICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJ
RCA/IGluZGV4SUQgOiBtYXhJbmRleElEOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzcWwuc3Rl
cCgpOworICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC0xMTYyLDExICsxMTYyLDE1IEBA
IE9wdGlvbmFsPElEQkRhdGFiYXNlTmFtZUFuZFZlcnNpb24+IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZGF0YWJhc2VOYW1lQW5kVmVyc2lvCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IG5hbWVzcWwoZGF0YWJhc2UsICJTRUxFQ1QgdmFs
dWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Iik7Ci0g
ICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0
byBuYW1lc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00g
SURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgaWYg
KCFuYW1lc3FsKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVt
ZW50IHRvIGdldCBkYXRhYmFzZSBuYW1lKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisgICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLT5nZXRDb2x1bW5UZXh0KDAp
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHZlcnNxbChkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBG
Uk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwot
ICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gdmVyc3FsLmdldENvbHVtblRleHQoMCk7CisgICAg
YXV0byB2ZXJzcWwgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJP
TSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAg
ICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbCA/IHZlcnNxbC0+Z2V0Q29sdW1uVGV4dCgw
KSA6IFN0cmluZygpOwogICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVp
bnQ2NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICBpZiAoIWRhdGFiYXNlVmVyc2lvbikgewogICAg
ICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9lcyBub3Qg
Y2xlYW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNpb24iLCBz
dHJpbmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTMxMCwxMCArMTMxNCwxMCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJh
bnNhY3Rpb25JbmZvJiBpbmZvKQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgbV9vcmln
aW5hbERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UgPSBtYWtlVW5pcXVlPElEQkRhdGFi
YXNlSW5mbz4oKm1fZGF0YWJhc2VJbmZvKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCptX3NxbGl0ZURCLCAiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJl
IGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVt
YmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+
cHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdo
ZXJlIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAg
ICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lv
bigpKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgewogICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZh
aWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSJfcyB9OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjM0Nyw0MyArMjM1MSwzMyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aQogICAgIGludDY0X3QgcmVjb3JkSUQgPSAwOwogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVy
IGtleVJlc3VsdEJ1ZmZlciwgdmFsdWVSZXN1bHRCdWZmZXI7CiAgICAgewotICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJPcGVuID0gIlNFTEVDVCBrZXksIHZh
bHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+
IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
OwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWQg
PSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRF
WFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93
ZXJDbG9zZWRVcHBlck9wZW4gPSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQg
a2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlckNsb3NlZCA9ICJTRUxFQ1Qga2V5LCB2YWx1
ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
OwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5L
ZXlPbmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/
IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRF
UiBCWSBrZXk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVw
cGVyQ2xvc2VkS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RT
dG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFT
IFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
bG93ZXJDbG9zZWRVcHBlck9wZW5LZXlPbmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkg
PCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZS
T00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzcWw7CiAKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgSURCR2V0UmVjb3JkRGF0YVR5cGU6OktleUFuZFZhbHVlOgog
ICAgICAgICAgICAgaWYgKGtleVJhbmdlLmxvd2VyT3BlbikgewogICAgICAgICAgICAgICAgIGlm
IChrZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVu
VXBwZXJPcGVuKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNR
TDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCAiU0VMRUNUIGtleSwgdmFsdWUs
IFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRT
dGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJP
cGVuVXBwZXJDbG9zZWQpOworICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1l
bnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBrZXks
IHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBr
ZXk7Il9zKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJh
bmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGxvd2VyQ2xvc2VkVXBw
ZXJPcGVuKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6
R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5LCB2YWx1ZSwg
Uk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRT
dGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dl
ckNsb3NlZFVwcGVyQ2xvc2VkKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3Rh
dGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVD
VCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8g
QU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JE
RVIgQlkga2V5OyJfcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBJREJHZXRSZWNvcmREYXRhVHlwZTo6S2V5T25seToKICAgICAgICAgICAgIGlmIChr
ZXlSYW5nZS5sb3dlck9wZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoa2V5UmFuZ2UudXBwZXJP
cGVuKQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRL
ZXlSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5KTsK
KyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVj
b3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9i
amVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1Qo
PyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNM
b3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5KTsKKyAgICAg
ICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xv
d2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBB
UyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGtleVJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVu
LCBsb3dlckNsb3NlZFVwcGVyT3BlbktleU9ubHkpOworICAgICAgICAgICAgICAgICAgICBzcWwg
PSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4s
ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5
ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtl
eTsiX3MpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3FsID0g
Y2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQs
IGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRLZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9z
ZWQsICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7Il9zKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNDU1LDM2ICsyNDQ5
LDI3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zCiAKIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50Rm9yR2V0QWxsT2Jq
ZWN0U3RvcmVSZWNvcmRzKGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRz
RGF0YSkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJPcGVu
S2V5ID0iU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZ
IGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlckNsb3Nl
ZEtleSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBB
TkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVS
IEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVy
T3BlbktleSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0g
PyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9S
REVSIEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVw
cGVyQ2xvc2VkS2V5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRF
WFQpIE9SREVSIEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9w
ZW5VcHBlck9wZW5WYWx1ZSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRz
IFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtl
eSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWRWYWx1ZSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwg
Uk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNU
KD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJPcGVuVmFsdWUgPSAi
U0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQp
IE9SREVSIEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3Nl
ZFVwcGVyQ2xvc2VkVmFsdWUgPSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQg
a2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgIGlmIChnZXRBbGxS
ZWNvcmRzRGF0YS5nZXRBbGxUeXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cykgewog
ICAgICAgICBpZiAoZ2V0QWxsUmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLmxvd2VyT3Blbikgewog
ICAgICAgICAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJl
Y29yZHNMb3dlck9wZW5VcHBlck9wZW4sIGxvd2VyT3BlblVwcGVyT3BlbktleSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyT3Bl
blVwcGVyQ2xvc2VkLCBsb3dlck9wZW5VcHBlckNsb3NlZEtleSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBl
ck9wZW4sICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBB
TkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIg
Qlkga2V5OyJfcyk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0
QWxsS2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29y
ZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQg
a2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dl
ckNsb3NlZFVwcGVyT3BlbiwgbG93ZXJDbG9zZWRVcHBlck9wZW5LZXkpOwotICAgICAgICByZXR1
cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJD
bG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRLZXkpOworICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3Blbiwg
IlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkg
Pj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5
OyJfcyk7CisgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNv
cmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0g
Q0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogICAgIH0KIAogICAgIGlmIChnZXRB
bGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEubG93ZXJPcGVuKSB7CiAgICAgICAgIGlmIChnZXRB
bGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICAgICAgcmV0dXJu
IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3Blbiwg
bG93ZXJPcGVuVXBwZXJPcGVuVmFsdWUpOwotICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50
KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGxvd2VyT3BlblVwcGVy
Q2xvc2VkVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6Okdl
dFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJ
RCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBB
UyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOworICAg
ICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVu
VXBwZXJDbG9zZWQsICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBD
QVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgfQogCiAgICAgaWYgKGdldEFs
bFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgIHJldHVybiBjYWNo
ZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgbG93
ZXJDbG9zZWRVcHBlck9wZW5WYWx1ZSk7Ci0gICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6
OkdldFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJD
bG9zZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1
ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKKyAgICBy
ZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ckNsb3NlZCwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNU
KD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Z2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0
YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQpAQCAtMjc1OCwx
OSArMjc0MywxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlIHN0YXRlbWVudDsKIAogICAgIGlmICghaW5kZXhJZGVudGlmaWVyKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3BlblVwcGVyT3Bl
blJlY29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVY
VCk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGNvdW50TG93ZXJPcGVuVXBw
ZXJDbG9zZWRSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1Qo
PyBBUyBURVhUKTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dl
ckNsb3NlZFVwcGVyT3BlblJlY29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBj
b3VudExvd2VyQ2xvc2VkVXBwZXJDbG9zZWRSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVY
VCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCk7IjsKLQogICAgICAgICBpZiAocmFuZ2UubG93
ZXJPcGVuICYmIHJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgY291bnRMb3dl
ck9wZW5VcHBlck9wZW5SZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBDT1VO
VCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1Qo
PyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVsc2Ug
aWYgKHJhbmdlLmxvd2VyT3BlbiAmJiAhcmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAgc3Rh
dGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJPcGVuVXBwZXJD
bG9zZWQsIGNvdW50TG93ZXJPcGVuVXBwZXJDbG9zZWRSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0
YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVy
Q2xvc2VkLCAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQp
OyJfcyk7CiAgICAgICAgIGVsc2UgaWYgKCFyYW5nZS5sb3dlck9wZW4gJiYgcmFuZ2UudXBwZXJP
cGVuKQotICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRS
ZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGNvdW50TG93ZXJDbG9zZWRVcHBlck9wZW5SZWNv
cmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50
UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3Jk
cyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQg
a2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0
YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2VkVXBw
ZXJDbG9zZWQsIGNvdW50TG93ZXJDbG9zZWRVcHBlckNsb3NlZFJlY29yZHMpOworICAgICAgICAg
ICAgc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJDbG9z
ZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8g
QVMgVEVYVCk7Il9zKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc3RhdGVtZW50CiAgICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9
IFNRTElURV9PSwpAQCAtMjc4MCwxOSArMjc2MCwxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
bwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRv
IGNvdW50IHJlY29yZHMgaW4gb2JqZWN0IHN0b3JlIGR1ZSB0byBiaW5kaW5nIGZhaWx1cmUiX3Mg
fTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBjb3VudExvd2VyT3BlblVwcGVyT3BlbkluZGV4UmVjb3JkcyA9ICJTRUxFQ1QgQ09VTlQo
KikgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBB
UyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzID0gIlNF
TEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5
ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJPcGVuSW5kZXhS
ZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElE
ID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQp
OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBw
ZXJDbG9zZWRJbmRleFJlY29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gSW5kZXhSZWNvcmRz
IFdIRVJFIGluZGV4SUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0g
Q0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIAogICAgICAgICBpZiAocmFuZ2UubG93ZXJPcGVu
ICYmIHJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBjb3VudExvd2Vy
T3BlblVwcGVyT3BlbkluZGV4UmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjYWNo
ZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNF
TEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5
ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAgICAg
ICAgZWxzZSBpZiAocmFuZ2UubG93ZXJPcGVuICYmICFyYW5nZS51cHBlck9wZW4pCi0gICAgICAg
ICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xv
d2VyT3BlblVwcGVyQ2xvc2VkLCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRz
KTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5k
ZXhSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRl
eFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQg
a2V5IDw9IENBU1QoPyBBUyBURVhUKTsiX3MpOwogICAgICAgICBlbHNlIGlmICghcmFuZ2UubG93
ZXJPcGVuICYmIHJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGNv
dW50TG93ZXJDbG9zZWRVcHBlck9wZW5JbmRleFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVt
ZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRJbmRleFJlY29yZHNMb3dlckNsb3NlZFVw
cGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElE
ID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQp
OyJfcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgY291bnRM
b3dlckNsb3NlZFVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVu
dCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ckNsb3NlZCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElE
ID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhU
KTsiX3MpOwogCiAgICAgICAgIGlmICghc3RhdGVtZW50CiAgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCBpbmRleElkZW50aWZpZXIpICE9IFNRTElURV9PSwpAQCAtMzAxNywx
MiArMjk5MiwxMiBAQCB2b2lkIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0
b3JlKCkKICAgICAgICAgYm9vbCBlcnJvcmVkID0gdHJ1ZTsKIAogICAgICAgICBpZiAobV9zcWxp
dGVEQikgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNF
TEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsiX3MpOwotICAgICAgICAgICAgaWYgKHNxbC5w
cmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNx
bC5zdGVwKCk7CisgICAgICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsiX3MpOworICAgICAgICAgICAg
aWYgKHNxbCkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAg
ICAgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYmxvYkZpbGVzLmFwcGVuZChzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICAgICAgICAgIGJs
b2JGaWxlcy5hcHBlbmQoc3FsLT5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKQEAgLTMwNTQsMjEgKzMwMjksMjAgQEAg
dm9pZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vy
c29yJiBjdXJzb3IpCiAgICAgbV9jdXJzb3JzLnJlbW92ZShjdXJzb3IuaWRlbnRpZmllcigpKTsK
IH0KIAotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjYWNoZWRTdGF0ZW1lbnQoU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUwgc3FsLCBjb25zdCBj
aGFyKiBzdGF0ZW1lbnQpCitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTCBz
cWwsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkKIHsKICAgICBpZiAoc3FsID49IFNRTDo6SW52YWxpZCkg
ewogICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgU1FMIHN0YXRlbWVudCBJRCBwYXNzZWQgdG8g
Y2FjaGVkU3RhdGVtZW50KCkiKTsKICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIHsgfTsKICAgICB9CiAKLSAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc3FsKV0pIHsKKyAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc3FsKV0pCiAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRv
UmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCld
LmdldCgpIH07Ci0gICAgfQogCiAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgbV9jYWNo
ZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0gPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4oKm1fc3FsaXRlREIsIHN0YXRlbWVudCk7Ci0gICAgICAgIGlmIChtX2NhY2hl
ZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS0+cHJlcGFyZSgpICE9IFNRTElU
RV9PSykKLSAgICAgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNxbCldID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQpCisgICAg
ICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IHN0
YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIHJldHVybiBT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNxbCldLmdldCgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgK
aW5kZXggOTZkMjhlMmU2M2NhYTRhNWQyOGNlYzRiOTJkY2Q3MjIwZDA3MTRiMy4uNDFkY2JmMzk1
ODU5YmVmNzNhZTMzYTMzM2U0NmZjOGEzY2E0MjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuaApAQCAtMjA0LDcgKzIwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludmFsaWQsCiAg
ICAgfTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVu
dChTUUwsIGNvbnN0IGNoYXIqKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBj
YWNoZWRTdGF0ZW1lbnQoU1FMLCBBU0NJSUxpdGVyYWwpOwogICAgIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudEZvckdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhj
b25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0
ZVN0YXRlbWVudD4gbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PGludD4oU1FMOjpJbnZh
bGlkKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IGMyY2VkODQxOTMwMGI1YThjNThhOGU4
NDAyMjJmMjU1NjEyNWIzNWMuLmYyODkwOGNhNTE1ZTdiOWIyZmZmODQ4OGMwMDZkMmIwZTgxYmJm
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBib29sIFNR
TGl0ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQog
ICAgIEFTU0VSVCghbV9jdXJyZW50VXBwZXJLZXkuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpKTsKIAotICAgIG1fc3RhdGVtZW50ID0gbWFr
ZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9u
KCktPmRhdGFiYXNlKCksIHNxbCk7Ci0KLSAgICBpZiAobV9zdGF0ZW1lbnQtPnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0
ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCkucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUg
Y3Vyc29yIHN0YXRlbWVudCAocHJlcGFyZS9pZCkgLSAnJXMnIiwgbV90cmFuc2FjdGlvbi0+c3Fs
aXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CisgICAgbV9zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKIAogICAgIHJldHVybiBiaW5kQXJndW1lbnRzKCk7CiB9CkBAIC0z
NDEsMTIgKzM0MSwxMiBAQCBib29sIFNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRBbmRSZWJpbmRQcmVJ
bmRleFN0YXRlbWVudElmTmVjZXNzYXJ5KCkKIAogICAgIGF1dG8mIGRhdGFiYXNlID0gbV90cmFu
c2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKTsKICAgICBpZiAoIW1fcHJl
SW5kZXhTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9wcmVJbmRleFN0YXRlbWVudCA9IG1ha2VVbmlx
dWU8U1FMaXRlU3RhdGVtZW50PihkYXRhYmFzZSwgYnVpbGRQcmVJbmRleFN0YXRlbWVudChpc0Rp
cmVjdGlvbk5leHQoKSkpOwotCi0gICAgICAgIGlmIChtX3ByZUluZGV4U3RhdGVtZW50LT5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gcHJlSW5kZXhTdGF0ZW1lbnQgPSBk
YXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChidWlsZFByZUluZGV4U3RhdGVtZW50KGlzRGly
ZWN0aW9uTmV4dCgpKSk7CisgICAgICAgIGlmICghcHJlSW5kZXhTdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgcHJlIHN0YXRlbWVudCAtICclcyci
LCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KKyAgICAgICAgbV9wcmVJbmRleFN0YXRlbWVudCA9IHByZUluZGV4U3RhdGVtZW50
LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJlSW5kZXhT
dGF0ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7CkBAIC01ODgsOSArNTg4LDggQEAgU1FM
aXRlSURCQ3Vyc29yOjpGZXRjaFJlc3VsdCBTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hO
ZXh0UmVjb3JkKFNRTGl0ZUN1cnMKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRP
YmplY3RTdG9yZVN0YXRlbWVudCB8fCBtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5yZXNl
dCgpICE9IFNRTElURV9PSykgewotICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRl
bWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihkYXRhYmFzZSwgIlNFTEVDVCB2YWx1
ZSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFuZCBvYmplY3RTdG9y
ZUlEID0gPzsiKTsKLSAgICAgICAgICAgIGlmIChtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0
U3RvcmVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGF1dG8gY2FjaGVkT2Jq
ZWN0U3RvcmVTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNU
IHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5kIG9iamVj
dFN0b3JlSUQgPSA/OyJfcykpCisgICAgICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0
YXRlbWVudCA9IGNhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVl
UHRyKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0
ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5j
cHAKaW5kZXggYWI0NzgyNmM4M2ViYjU4Yjc3YjRhNjE1MjcxMzkyMTMzY2Y4NDBlNi4uZTc0ZTI4
ZjViOWU1Zjc5ZmM1ZDVjZDBjZTc2NmNhMGRkZjFiZjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKQEAgLTExMywxOCArMTEzLDE1IEBA
IHN0YXRpYyBTdHJpbmcgZm9ybWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGlu
dCBzcWxpdGVFcnJvckNvZGUsIGNvbnN0CiAKIHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0
YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBkYi5wcmVwYXJlU3RhdGVtZW50
KHF1ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1ZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgx
LCB2YWx1ZSk7CiAKLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1
bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8g
c2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMzQsMTcgKzEzMSwxNSBAQCBzdGF0aWMgYm9v
bCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29ucwogCiBzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJh
c2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3Vs
dFN0cmluZykKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0g
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9
IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0
YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwg
cXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFyZVN0
YXRlbWVudChxdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciAoJWkpIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9t
IGRhdGFiYXNlICglcykiLCBzdGF0ZW1lbnQuZXJyb3IoKSwgcXVlcnkuYXNjaWkoKS5kYXRhKCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOworICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocmVzdWx0
ID09IFNRTElURV9ET05FKSB7CkBAIC03MTQsOCArNzA5LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0
YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIHsKICAgICBkaXNhYmxlQXV0aG9yaXplcigp
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChzcWxpdGVEYXRhYmFzZSgpLCAiU0VM
RUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiKTsKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IHNxbGl0ZURhdGFiYXNlKCkucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBz
cWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiX3MpOworICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVz
IGZvciBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICBlbmFibGVBdXRob3JpemVyKCk7CiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwpAQCAtNzIzLDggKzcxOCw4IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3Jt
R2V0VGFibGVOYW1lcygpCiAKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzOwogICAgIGlu
dCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCk7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsK
ICAgICAgICAgaWYgKG5hbWUgIT0gdW5xdWFsaWZpZWRJbmZvVGFibGVOYW1lKQogICAgICAgICAg
ICAgdGFibGVOYW1lcy5hcHBlbmQobmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDViYjkw
NjdhNTBjZDE0Yjc4NTE1NTQyMjUxNmM0MzA2MjgwOTY2MzEuLjc5YTdlOGY5NjRhOWNjNmFkZTY4
YmRhNmM1ODYxMmE4Njc1NDJmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTIzNSwxNSArMjM1LDE1IEBA
IGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyIpOwot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00g
T3JpZ2lucyB3aGVyZSBvcmlnaW49PzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0g
U1FMSVRFX1JPVzsKKyAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVzsK
IH0KIAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVy
KQpAQCAtMjU2LDE1ICsyNTYsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9y
RGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnMKICAgICB9CiAK
ICAgICAvLyBXZSd2ZSBnb3QgYSB0cmFja2VyIGRhdGFiYXNlLiBTZXQgdXAgYSBxdWVyeSB0byBh
c2sgZm9yIHRoZSBkYiBvZiBpbnRlcmVzdDoKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/OyIpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFt
ZT0/OyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisg
ICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRU
ZXh0KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XOwogfQogCiB1aW50NjRfdCBEYXRhYmFzZVRyYWNrZXI6Om1heGltdW1TaXplKERhdGFiYXNl
JiBkYXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6
OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmln
CiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAogICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00g
RGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CiAKLSAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuIFNRTGl0
ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBE
YXRhYmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVy
LnV0ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0
YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCkpOworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3RzKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGZpbGVuYW1lIGZyb20gRGF0YWJh
c2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwgb3JpZ2luSWRlbnRpZmllci51dGY4
KCkuZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAg
U3RyaW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZpbGVOYW1lKCk7CiAKQEAgLTM3Miwx
NiArMzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IERhdGFiYXNlVHJhY2tlcjo6
b3JpZ2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
IG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3RhdGVtZW50
KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0gICAgd2hpbGUgKChzdGVwUmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgb3JpZ2lucy5hcHBl
bmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOworICAgIHdoaWxlICgoc3RlcFJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBvcmlnaW5zLmFw
cGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50
LT5nZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwogICAgIG9yaWdpbnMuc2hyaW5r
VG9GaXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNRTElURV9ET05FKQpAQCAtMzk3LDE2
ICszOTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVz
Tm9Mb2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IKICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9NIERhdGFiYXNlcyB3aGVyZSBvcmln
aW49PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1l
IEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2lu
LmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdp
bi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAg
ICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0g
U1FMSVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApKTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsK
ICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tl
cjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAg
ICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VE
ZXRhaWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBv
cmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNl
cyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7CiAKLSAgICAgICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
dGF0ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAg
ICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKIApAQCAtNDU0LDggKzQ1NCw4IEBA
IERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2lu
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJl
dHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tl
ciBkYXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKICAgICAgICAg
fQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAg
ICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAg
ICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZXhw
ZWN0ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgfQogCiAgICAg
U3RyaW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmFsc2UpOwpA
QCAtNDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0
YWlscyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QKICAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQotICAg
ICAgICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIHN0YXRlbWVudC5m
aW5hbGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewotICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcg
ZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNl
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgb2Nj
dXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRhYmFzZSBkZXRhaWxzIGZvciBhIGRh
dGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRoZSB0cmFja2VyCi0gICAgICAg
ICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJj
ZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBp
bnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQotICAgICAgICAgICAgLy8gU28gd2Un
bGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdGhlIHRy
YWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNldCBkYXRhYmFzZSBkZXRhaWxzIG9u
IGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7CisgICAg
eworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyJfcyk7
CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAg
ICBndWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKworICAgICAgICBpZiAoIWd1
aWQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNl
ICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgp
LCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3Vs
ZCBuZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBk
b2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIKKyAgICAgICAgICAgICAgICAvLyBC
dXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5k
ZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRv
IG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHBy
aW50IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMgZnJvbSB0aGUgdHJh
Y2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0IGRhdGFiYXNlIGRldGFpbHMgb24g
YSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlciIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNl
LCAiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdI
RVJFIGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/
IFdIRVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7Ci0g
ICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKLSAgICB1cGRh
dGVTdGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDIs
IGVzdGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDMsIGd1aWQp
OwogCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICBpZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMgZm9yIGRhdGFiYXNlICVzIGluIG9y
aWdpbiAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3MSwxNSArNjczLDE1IEBAIHVpbnQ2
NF90IERhdGFiYXNlVHJhY2tlcjo6cXVvdGFOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
JiBvcmlnaW4pCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
cXVvdGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9y
aWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAg
ICB9Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkpOwogCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
cXVvdGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQ2NCgwKTsKIAogICAgIHJldHVybiBxdW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEm
IG9yaWdpbiwgdWludDY0X3QgcXVvdGEpCiAKICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0g
aGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhp
c3RzKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/
KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRh
dGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAg
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAg
ICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAo
c3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdp
bi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBpbnNlcnRlZE5ld09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJVUERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBi
b29sIGVycm9yID0gc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lu
cyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAh
c3RhdGVtZW50OwogICAgICAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBv
cmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgcXVvdGEpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1l
bnQuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAgICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhl
Y3V0ZUNvbW1hbmQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwx
NiArNzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNl
IHNob3VsZCBuZXZlciBiZSBhZGRlZCB1bnRpbCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlz
aGVkCiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJh
c2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFi
YXNlcyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1l
KTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+Ymlu
ZFRleHQoMiwgbmFtZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAg
IGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+
ZXhlY3V0ZUNvbW1hbmQoKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0
YWJhc2UgJXMgdG8gb3JpZ2luICVzOiAlc1xuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBA
QCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgb3JpZ2luLCBEZWxldGlvbk1vZAogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFu
c2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBE
YXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3Mp
OworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0
cmFja2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBp
ZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50
LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBl
eGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIi
LCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3Jp
Z2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdp
bj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBhdXRvIG9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAg
IGlmICghb3JpZ2luU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBvcmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3Jp
Z2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3Jp
Z2luU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0
ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJh
Y2tlciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEm
IG9yaWdpbiwgRGVsZXRpb25Nb2QKIAogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRD
cmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7
Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAg
ICAgICAgICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7
CiAgICAgICAgIH0KIApAQCAtMTA4MSwxNyArMTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0
IFN0cgogCiAgICAgTG9ja0hvbGRlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERh
dGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBB
TkQgbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVz
IGZyb20gdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRh
dGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwog
Ci0gICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVt
ZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4
ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2Vy
IiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgICAgIGRvbmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExOTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgZGF0YWJhc2VzIDogKmRhdGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0
YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJh
c2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFt
ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRh
YmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFi
YXNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVO
YW1lID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVs
ZXRlZERhdGFiYXNlID0gZmFsc2U7CkBAIC0xMjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJh
c2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkK
ICAgICAKICAgICAvLyBTcGVjaWZ5IHRoYXQgd2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcg
bW9kZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3JpdGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0
aGUgbG9jayB0byB0aGlzIGRhdGFiYXNlIGZpbGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tT
dGF0ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAg
ICBpZiAobG9ja1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBsb2NrU3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAg
ICAgICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFH
TUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiX3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2Nr
U3RhdGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiBy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
CiAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5T
QUNUSU9OOyIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5
ZGJjZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVkMS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2
MDUxYzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMU3RhdGVtZW50LmNwcApAQCAtMTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0
ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRiKQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFi
YXNlID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnBy
ZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMg
LSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRF
UlJVUFQpCi0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6
REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50
ZXJydXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQobV9zdGF0ZW1lbnQpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBl
cnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJv
cigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJy
b3IoKSA9PSBTUUxJVEVfSU5URVJSVVBUKQorICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRl
bWVudCIsIHN0YXRlbWVudC5lcnJvcigpLCAiaW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9F
UlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50
LmVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMg
c3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2
ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8v
IElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGlu
ZyBmaXNoeSBvciBtYWxpY2lvdXMKLSAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3Vu
dCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkgeworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJh
bWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0
aW9uIG1hcmtzIik7CiAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5v
dCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRz
W2ldKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBt
X2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAg
ICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNDksMjAgKzE0NywyMCBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRh
YmFzZSYgZGIpCiAgICAgYXV0byByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwog
CiAgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAg
ICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50
IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LT5jb2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiBy
b3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b2x1bW5Db3VudDsgaSsrKQotICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50Lmdl
dENvbHVtbk5hbWUoaSkpOworICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5n
ZXRDb2x1bW5OYW1lKGkpKTsKIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1
bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVlKGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFk
ZFJlc3VsdChzdGF0ZW1lbnQtPmdldENvbHVtblZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOwogICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXgg
MGNhYmE5OGNiNTc5YmRjMTRjMTNiYTMxMTMzNTQ2NGFlMmM1MTIxYy4uMDk3NDg4OTJkNmFkN2Iw
ODNjNmE5NGE0MmY2MjY5M2VjYmIxYjE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwx
MyArOTgsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJMJiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2Fj
aGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFu
aWZlc3RVUkw9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdl
c3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAgICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0x
MTMsMTQgKzExMywxNCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAg
ICB1bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2Fj
aGUobmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICAKICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25D
YWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBn
cm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50NjQoMCkpKTsKICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICByZXR1cm4gJmdyb3VwOwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhh
c2ggRlJPTSBDYWNoZUdyb3VwcyIpOyAgICAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RIYXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAg
IGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRl
bWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3
aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhv
c3RTZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0
KDApKSk7CiB9ICAgIAogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIs
MTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2Fj
aGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVybCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUg
ZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4K
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1h
bmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hl
IElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5l
d2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlm
ZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxl
ICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsK
IAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJp
bmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJM
KGNvbnN0IFVSTCYgdXJsKQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhh
dCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3
aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgVVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RD
YWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgy
KSk7CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBs
b2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTI0MCw3ICsyNDAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFuaWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRT
dG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgw
KSkpOworICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2Fj
aGUoY2FjaGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0
KGdyb3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5nKCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5
LDEzIEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZh
bGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBn
cm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENh
Y2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNo
ZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50
IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkp
ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3Rh
dGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9y
eS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8v
IFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5l
d2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFs
bGJhY2sgbmFtZXNwYWNlLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVu
c2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0
Q2FjaGVJRCk7CiAKICAgICAgICAgVVJMIGZhbGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBA
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNr
Q2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVz
dFVSTCk7Ci0gICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJ
RChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwog
ICAgICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNldChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygp
LCAmZ3JvdXApOwpAQCAtNDE2LDE3ICs0MTYsMTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcK
ICAgICAvLyBJZiBhbiBPcmlnaW4gcmVjb3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5U
IHdpbGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBiZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0
byBkZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhpc3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBk
ZXRlcm1pbmUKICAgICAvLyBpZiBhIHF1b3RhIG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3Jk
LCBvciBmcm9tIG51bGwuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIENPVU5UKHF1b3RhKSwgcXVvdGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/
Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVv
dGEpLCBxdW90YSBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0
YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5z
dGVwKCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUg
ZGVmYXVsdC4KICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3
YXNOb1JlY29yZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBx
dW90YSA9IHdhc05vUmVjb3JkID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50NjQoMSk7CisgICAgICAgIGJvb2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgcXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVs
dE9yaWdpblF1b3RhIDogc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC00NDAsMTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2FnZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmCiAKICAgICAvLyBJZiBhbiBPcmlnaW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVu
IHRoZSBTVU0gd2lsbCBiZSBudWxsLAogICAgIC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4
cGVjdGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8gYSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9y
aWdpbnMgT04gQ2FjaGVHcm91cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENh
Y2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNo
ZUdyb3VwcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9y
aWdpbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVS
RSBPcmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X1JPVykgewotICAgICAgICB1c2FnZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAg
ICAgICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQ3MCw0MCArNDcwLDQwIEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNo
ZShjb25zCiAKICAgICAvLyBSZW1haW5pbmcgc2l6ZSA9IHRvdGFsIG9yaWdpbiBxdW90YSAtIHNp
emUgb2YgYWxsIGNhY2hlcyB3aXRoIG9yaWdpbiBleGNsdWRpbmcgdGhlIHByb3ZpZGVkIGNhY2hl
LgogICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBjYWNoZXMgc28gd2UgY2FuIHRl
bGwgaWYgdGhlIHJlc3VsdCB3YXMgYSBjYWxjdWxhdGlvbiBvciBub3QuCi0gICAgY29uc3QgY2hh
ciogcXVlcnk7CiAgICAgaW50NjRfdCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIgPSBjYWNoZSA/
IGNhY2hlLT5zdG9yYWdlSUQoKSA6IDA7Ci0gICAgaWYgKGV4Y2x1ZGluZ0NhY2hlSWRlbnRpZmll
ciAhPSAwKSB7Ci0gICAgICAgIHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChDYWNoZXMuc2l6ZSksIE9y
aWdpbnMucXVvdGEgLSBTVU0oQ2FjaGVzLnNpemUpIgotICAgICAgICAgICAgICAgICIgIEZST00g
Q2FjaGVHcm91cHMiCi0gICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2Fj
aGVHcm91cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgIiBJTk5F
UiBKT0lOIENhY2hlcyBPTiBDYWNoZUdyb3Vwcy5pZCA9IENhY2hlcy5jYWNoZUdyb3VwIgotICAg
ICAgICAgICAgICAgICIgV0hFUkUgT3JpZ2lucy5vcmlnaW49PyIKLSAgICAgICAgICAgICAgICAi
ICAgQU5EIENhY2hlcy5pZCE9PyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcXVlcnkgPSAiU0VM
RUNUIENPVU5UKENhY2hlcy5zaXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSki
Ci0gICAgICAgICAgICAgICAgIiAgRlJPTSBDYWNoZUdyb3VwcyIKLSAgICAgICAgICAgICAgICAi
IElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdp
biIKLSAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlk
ID0gQ2FjaGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9y
aWdpbj0/IjsKLSAgICB9Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsIHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisg
ICAgYXV0byBxdWVyeSA9IFtleGNsdWRpbmdDYWNoZUlkZW50aWZpZXJdKCkgeworICAgICAgICBp
ZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZXR1cm4gIlNFTEVD
VCBDT1VOVChDYWNoZXMuc2l6ZSksIE9yaWdpbnMucXVvdGEgLSBTVU0oQ2FjaGVzLnNpemUpIgor
ICAgICAgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAg
ICAgICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5z
Lm9yaWdpbiIKKyAgICAgICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIENhY2hlcyBPTiBDYWNo
ZUdyb3Vwcy5pZCA9IENhY2hlcy5jYWNoZUdyb3VwIgorICAgICAgICAgICAgICAgICAgICAiIFdI
RVJFIE9yaWdpbnMub3JpZ2luPT8iCisgICAgICAgICAgICAgICAgICAgICIgICBBTkQgQ2FjaGVz
LmlkIT0/Il9zOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKENhY2hl
cy5zaXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAg
ICAiICBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdp
bnMgT04gQ2FjaGVHcm91cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCisgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3Jv
dXAiCisgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3M7CisgICAgfSgp
OworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVl
cnkpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDApCi0gICAgICAg
IHN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKLSAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50
NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0aGVuIHdlIGhh
dmUgdG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZvciBpdHMgcXVv
dGEuIE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgIGlmIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVzID0g
c3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2Fj
aGVzID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYgKG51bWJlck9m
Q2FjaGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdpbihvcmlnaW4s
IHJlbWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1haW5pbmdTaXpl
ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVtYWluaW5nU2l6
ZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG8KICAg
ICBpZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERB
VEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmICh1cGRhdGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3Rh
PT8gV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3Rh
KTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0YWJh
c2VJZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDEsIHF1b3Rh
KTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KHVwZGF0ZVN0
YXRlbWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3RhdGVtZW50LnZh
bHVlKCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29t
bWFuZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBBU1NFUlQoU1FM
aXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKLSAgICBp
bnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVy
c2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGlu
dCB2ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAg
cmV0dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0ZXMgPSBzbnBy
aW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBSQUdNQSB1c2Vy
X3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE51
bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkpID49IHVudXNl
ZE51bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
dXNlclZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCh1c2Vy
VmVyc2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0YXRlbWVudChz
dGF0ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1pdCgpOwogfQog
ICAgIApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4
ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAgQVNTRVJUKFNR
TGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIGJv
b2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTogZmFpbGVkIHRv
IGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZh
aWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBAIC02NzAsMTUg
KzY3MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5IHRvIHJlcGFp
ciBpdC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVzdFVSTCgpLnN0
cmluZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVzdFVSTCwgb3Jp
Z2luKSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwgbWFuaWZlc3RV
UkwsIG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgdXJsSG9z
dEhhc2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwg
Z3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgz
LCBncm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0
ZW1lbnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkpOwor
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkp
OworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRhdGEoKS5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50
KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAgLTY5OCwxNCAr
Njk4LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNhY2hlLT5ncm91
cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91cm5hbCk7CiAg
ICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElO
VE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAs
IHNpemUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+ZXN0aW1h
dGVkU2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNoZS0+
Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hl
LT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50
KHN0YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNhY2hlU3RvcmFn
ZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkp
OwpAQCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICBjb25z
dCBWZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFsbG93bGlzdCgp
OwogICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxpbmVBbGxvd2xp
c3QpIHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFMVUVTICg/LCA/
KSIpOwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAgICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNo
ZVdoaXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOworICAgICAgICAg
ICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmluZygpKTsKLSAg
ICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOworICAgICAg
ICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAg
ICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUgb25saW5lIGFs
bG93bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVx
dWVzdHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBzdGF0ZW1l
bnQucHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgKHdp
bGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoMSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAgICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRlbWVudC0+Ymlu
ZEludDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7CisgICAgICAgIHN0
YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAgICBpZiAoIWV4
ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50
KHN0YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNv
bnN0IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFsbGJhY2tVUkxz
KCk7CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFsbGJhY2tVUkxz
KSB7Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwsIGNhY2hlKSBW
QUxVRVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAg
ICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUpIFZB
TFVFUyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0
ZW1lbnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAgICAgICAgICAg
c3RhdGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5nKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAg
ICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlm
ICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQsMTQgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmly
c3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFM
VUVTICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/
KSJfcyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+cGF0aCgpLmlz
RW1wdHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpw
YXRoRmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRhU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoRmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOwog
ICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKHJlc291cmNlKSkgewog
ICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5nIHRoZSBmbGF0IGZpbGUg
d291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2UgZG9uJ3QgbmVlZAogICAg
ICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJlLCBhcyBpdCB3YXMgYWxy
ZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgxMywxMyArODE2LDEzIEBA
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAgICBmdWxsUGF0aCA9IEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0
aCk7CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsKLSAgICAgICAgZGF0YVN0
YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZFRl
eHQoMiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJlc291cmNlLT5kYXRhKCku
c2l6ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+
ZGF0YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgZGF0
YVN0YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5kYXRhKCksIHJlc291cmNl
LT5kYXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5k
KCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3Jp
dHRlbiB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0MywzNiArODQ2LDM2IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhlYWRlcnMgPSBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlc291cmNlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0
dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGlu
Z05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAgICBpZiAocmVzb3VyY2VT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHJlc291cmNlU3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291
cmNlcyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3MpOwor
ICAgIGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgYXJlIHVzZWQgaW4gQXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIGFw
cHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlIG9iamVjdC4gSWYK
ICAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2UgYWxzbyBjaGFuZ2UgQXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Ci0g
ICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJs
KCkuc3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDQsIGhlYWRlcnMp
OwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRhSWQpOwotICAgIHJlc291
cmNlU3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkp
OwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291cmNlLT5yZXNwb25zZSgp
LnRleHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQocmVzb3Vy
Y2VTdGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCByZXNvdXJj
ZS0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwg
cmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgcmVzb3VyY2VTdGF0
ZW1lbnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVybCgpLnN0cmluZygpKTsK
KyAgICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVycyk7CisgICAgcmVzb3Vy
Y2VTdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJlc291cmNlU3RhdGVtZW50
LT5iaW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKKyAgICByZXNv
dXJjZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29k
aW5nTmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChyZXNvdXJjZVN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgcmVzb3Vy
Y2VJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgp
KTsKICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hlIGVudHJ5Ci0gICAgU1FM
aXRlU3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNo
ZUVudHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/LCA/LCA/KSIpOwotICAg
IGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50
cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENh
Y2hlRW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMgKD8sID8sID8pIl9zKTsK
KyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFnZUlEKTsKLSAgICBlbnRy
eVN0YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0
ZW1lbnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5k
SW50NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQo
MiwgcmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgzLCBy
ZXNvdXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1l
bnQpKQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudC52YWx1ZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3ZSBzdWNjZXNzZnVsbHkg
d3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywKQEAgLTg5MywxNCArODk2
LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFR5cGUoQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJUKHJlc291cmNlLT5zdG9y
YWdlSUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVFbnRyaWVzIFNF
VCB0eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VUIHR5cGU9PyBXSEVSRSBy
ZXNvdXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnR5cGUo
KSk7Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQo
KSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+dHlwZSgpKTsK
KyAgICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7
CiAKLSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CisgICAgcmV0
dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUoKSk7CiB9CiAKIGJvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSog
cmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2LDE0ICs5MjksMTQgQEAg
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBBIHJlc291cmNlIHdhcyBh
ZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBzaXplIGZvciB0aGUgY2Fj
aGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoc2l6
ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc2l6ZVVw
ZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENhY2hl
cyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzaXplVXBkYXRlU3Rh
dGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKLSAgICBz
aXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworICAg
IHNpemVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6
ZUluU3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2Fj
aGUtPnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRl
U3RhdGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6ZVVwZGF0ZVN0YXRlbWVu
dC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN0b3JlUmVzb3Vy
Y2VUcmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEzIEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3Vy
Y2UsIEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5S
ZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBBU1NFUlQoU1FMaXRl
RGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8g
T3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnRP
cmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGluc2VydE9y
aWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8g
T3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNl
cnRPcmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGluc2VydE9y
aWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZp
ZXIoKSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRP
cmlnaW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRl
bWVudCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4tPmRh
dGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5i
aW5kSW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwxNiBAQCBib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCYgZ3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3ZXN0IGNhY2hlIGluIHRo
ZSBncm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQ2FjaGVHcm91cHMgU0VU
IG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAg
ICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91
cC5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgy
LCBncm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3JvdXAu
bmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIs
IGdyb3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3Rh
dGVtZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkp
IHsKICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2LDM0IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7CiAgICAgQVNTRVJUKFNR
TGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgIFNR
TGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENh
Y2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJl
c291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNl
RGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENh
Y2hlRW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWlt
ZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEs
IENhY2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNo
ZVJlc291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgor
ICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0
YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Il9zKTsK
KyAgICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIGNh
Y2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGNhY2hlU3RhdGVtZW50
LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2FjaGUgPSBBcHBsaWNhdGlv
bkNhY2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBtX2ZsYXRG
aWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVz
dWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFVS
TCB1cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAo
KHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgVVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAg
ICAgCi0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVt
bkludCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2FjaGVTdGF0ZW1lbnQtPmdl
dENvbHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWdu
ZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwotICAgICAgICBjYWNoZVN0
YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CisgICAgICAgIGNhY2hlU3Rh
dGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAgICAgICAgIAogICAgICAg
ICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJsb2IpKTsKICAgICAg
ICAgCi0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg3
KTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg3
KTsKICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAtMTEyOSwxMyArMTEzMiwx
MyBAQCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Omxv
YWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBzaXplID0gRmlsZVN5c3Rl
bTo6ZmlsZVNpemUocGF0aCkudmFsdWVPcigwKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgzKTsKLSAg
ICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29s
dW1uVGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7CiAgICAg
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAotICAgICAg
ICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7CisgICAg
ICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoNSk7CiAg
ICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAogICAgICAg
ICBhdXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBy
ZXNwb25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsxMTU4LDE0
IEBAIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9h
ZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBvbmxp
bmUgYWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBjYWNoZT0/
Iik7Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOwor
ICAgIGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBhbGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgYWxsb3ds
aXN0U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBWZWN0b3I8
VVJMPiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQu
c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0s
IGFsbG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKChyZXN1
bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAg
YWxsb3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3IgXCIlc1wi
IiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5IEBAIFJl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hl
KHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0KGFsbG93
bGlzdCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZy4KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzIFdIRVJF
IGNhY2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNoZUFsbG93
c0FsbE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFsbG93bGlz
dFdpbGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhbGxvd2xp
c3RXaWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBhbGxvd2xp
c3RXaWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAgCi0gICAg
cmVzdWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJlc3VsdCA9
IGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hlIG9ubGlu
ZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBjYWNoZS0+
c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBtYW55IHJv
d3MgZm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8gTG9hZCBm
YWxsYmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFja1VSTHMg
V0hFUkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFsbGJhY2tV
UkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBz
dG9yYWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlE
KTsKICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAgd2hpbGUg
KChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIAotICAg
ICAgICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNr
U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tTdGF0ZW1l
bnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgw
KSksIFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkpOwogCiAg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChjYWNoZS0+
Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0YSB3aWxs
IGJlIGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8iKTsKLSAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlcyBXSEVS
RSBpZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAgICBleGVj
dXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2Fj
aGUtPnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgp
KTsKIAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hlLT5ncm91
cCgpLT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhl
cmUgYXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5IHRoZSBj
YWNoZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3Jv
dXBzIFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iX3MpOwor
ICAgICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5z
dG9yYWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOwor
ICAgICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9y
YWdlSUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQudmFsdWUo
KSk7CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgfQpA
QCAtMTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHNl
bGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hlR3JvdXBz
Iik7Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1
dG8gc2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlm
ZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0gICAgd2hp
bGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMuYXBwZW5k
KFVSTCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzZWxl
Y3RVUkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQoVVJMKHsg
fSwgc2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVybHM7CiB9
CkBAIC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKIHsK
ICAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jl
c3MoKSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKGlk
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVHcm91cHMg
V0hFUkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZlc3RVUkwp
OworICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAgICBpbnQg
cmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0YXRlbWVu
dC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoMCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVtbkludDY0
KDApOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNhY2hlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGNh
Y2hlR3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdyb3VwU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hF
UkUgaWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwotICAgIGV4
ZWN1dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50LmJpbmRJ
bnQ2NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50KTsK
KyAgICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVT
dGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1lbnQtPmJp
bmRJbnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50
LnZhbHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDExLDIwIEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBpbiBEZWxl
dGVkQ2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVSZXNvdXJj
ZURhdGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxF
Q1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0aHMgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMu
cGF0aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAgICAgICJM
RUZUIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENhY2hlUmVz
b3VyY2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldIRVJFIChT
RUxFQ1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURhdGEucGF0
aCkgSVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJj
ZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAgICAKLSAg
ICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAoIXNlbGVj
dFBhdGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhzLnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNRTElURV9S
T1cpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmluZyBwYXRo
ID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBz
ZWxlY3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3LDcgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgpID09IFNR
TElURV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FMSVRFX1JP
Vyk7CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0ZWRDYWNo
ZVJlc291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50
IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VE
YXRhIFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBw
YXRoIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEsIGVycm9y
IFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcgZmxhdEZp
bGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNo
ZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxlIChzZWxl
Y3RQYXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIGZ1bGxQYXRoID0g
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBz
ZWxlY3RQYXRocy5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZnVsbFBhdGggPSBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHNlbGVjdFBhdGhz
LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgdG90YWxTaXplICs9IEZpbGVTeXN0ZW06OmZp
bGVTaXplKGZ1bGxQYXRoKS52YWx1ZU9yKDApOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IGY4
ZWM5Y2Y0N2Q0YzFmYjAzOGZmNTc3NjNjMTJhZGJiODc5NTIwZDMuLjJiZjM5MTJiZDRiNzE3MjIz
YjQwY2M0OWMxNjZjMWM5OTA1NTI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTgxLDggKzE4MSw2IEBAIGJv
b2wgQ29va2llSmFyREI6Om9wZW5EYXRhYmFzZSgpCiB2b2lkIENvb2tpZUphckRCOjpjbG9zZURh
dGFiYXNlKCkKIHsKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN0YXRlbWVudCA6IG1fc3RhdGVtZW50cykKLSAgICAgICAgICAgIHN0YXRl
bWVudC52YWx1ZS5nZXQoKS0+ZmluYWxpemUoKTsKICAgICAgICAgbV9zdGF0ZW1lbnRzLmNsZWFy
KCk7CiAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKICAgICB9CkBAIC0xOTMsNyArMTkxLDgg
QEAgdm9pZCBDb29raWVKYXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYgKGlzT25N
ZW1vcnkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdN
QSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVt
ZW50LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNp
b24pCiAgICAgICAgIHJldHVybjsKIApAQCAtMjczLDI1ICsyNzIsMjUgQEAgYm9vbCBDb29raWVK
YXJEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVF
eGlzdHMoIkNvb2tpZSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgaW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAg
aWYgKGludGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3Jp
dHkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3Mp
OworICAgIGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4
ZWN1dGUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50
IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBT
UUxJVEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0
ZXAgcmV0dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50
IGNvbHVtbnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0g
MSkgewogICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBp
bnRlZ3JpdHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1
bW5UZXh0KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5U
ZXh0KDApOwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJS
T1IoIkNvb2tpZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1bHRU
ZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTM4NiwyMCArMzg1LDE2IEBAIE9wdGlvbmFsPFZlY3Rv
cjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0CiAKICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IHJl
cXVlc3RVcmwgfTsKIAotICAgIGNvbnN0IFN0cmluZyBzcWwgPQotICAgICAgICAiU0VMRUNUIG5h
bWUsIHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Np
b24gRlJPTSBDb29raWUgV0hFUkUgIlwKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywg
aHR0cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSBXSEVSRSAiXAogICAgICAgICAi
KE5PVCAoKHNlc3Npb24gPSAwKSBBTkQgKGV4cGlyZXMgPCA/KSkpIgogICAgICAgICAiQU5EICho
dHRwb25seSA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIGh0dHBvbmx5KSkgIlwKICAgICAgICAg
IkFORCAoc2VjdXJlID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2VjdXJlKSkgIlwKICAgICAg
ICAgIkFORCAoc2Vzc2lvbiA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlc3Npb24pKSAiXAog
ICAgICAgICAiQU5EICgoZG9tYWluID0gPykgT1IgKGRvbWFpbiBHTE9CID8pKSAiXAotICAgICAg
ICAiT1JERVIgQlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIjsKLQotICAgIGF1dG8g
cHN0bXQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKyAg
ICAgICAgIk9SREVSIEJZIGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCJfcyk7CiAgICAg
aWYgKCFwc3RtdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBzdG10LT5w
cmVwYXJlKCk7CiAgICAgcHN0bXQtPmJpbmRJbnQ2NCgxLCBXYWxsVGltZTo6bm93KCkuc2Vjb25k
c1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMiwgaHR0
cE9ubHkgPyAqaHR0cE9ubHkgOiAtMSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMywgc2VjdXJlID8g
KnNlY3VyZSA6IC0xKTsKQEAgLTQxMSw5ICs0MDYsNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2ll
Pj4gQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dAogICAgIGVsc2UKICAgICAgICAgcHN0bXQtPmJpbmRUZXh0KDYsIFN0cmluZygiKi4iKSArIHJl
Z2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKIAotICAgIGlmICghcHN0bXQpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwogCiAgICAg
d2hpbGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewpAQCAtNDUzLDcgKzQ0NSw2IEBA
IE9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gY29va2ll
U2Vzc2lvbjsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsKICAgICB9
Ci0gICAgcHN0bXQtPmZpbmFsaXplKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTQ2
MywxMSArNDU0LDExIEBAIFZlY3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxDb29raWVz
KCkKICAgICBWZWN0b3I8Q29va2llPiByZXN1bHQ7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAh
bV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjb25zdCBT
dHJpbmcgc3FsID0gIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBo
dHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIl9zOwotICAgIGF1dG8gcHN0bXQg
PSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKworICAgIGF1
dG8gcHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lLCB2YWx1
ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00g
Q29va2llIl9zKTsKICAgICBpZiAoIXBzdG10KQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHBzdG10LT5wcmVwYXJlKCk7CisKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7CiAgICAgICAgIENvb2tpZSBjb29raWU7CiAgICAgICAgIGNvb2tpZS5uYW1lID0gcHN0
bXQtPmdldENvbHVtblRleHQoMCk7CkBAIC00ODIsNyArNDczLDYgQEAgVmVjdG9yPENvb2tpZT4g
Q29va2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IChw
c3RtdC0+Z2V0Q29sdW1uSW50KDcpID09IDEpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoY29va2llKSk7CiAgICAgfQotICAgIHBzdG10LT5maW5hbGl6ZSgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTU3MSwxNiArNTYxLDE1IEBAIGJvb2wgQ29va2llSmFyREI6OnNldENv
b2tpZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcm
CiAKIEhhc2hTZXQ8U3RyaW5nPiBDb29raWVKYXJEQjo6YWxsRG9tYWlucygpCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBTRUxFQ1RfQUxMX0RPTUFJTlNfU1FM
KTsKLSAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOworICAgIGlmICgh
c3RhdGVtZW50KQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IGRv
bWFpbnM7Ci0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICBhdXRvIGRvbWFpbiA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHdoaWxl
IChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZG9tYWlu
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBkb21haW5zLmFkZChkb21h
aW4pOwogICAgIH0KLQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgIHJldHVybiBkb21h
aW5zOwogfQogCkBAIC02MzcsMTAgKzYyNiw5IEBAIGJvb2wgQ29va2llSmFyREI6OmRlbGV0ZUFs
bENvb2tpZXMoKQogCiB2b2lkIENvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNv
bnN0IFN0cmluZyYgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+
cHJlcGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAg
ICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgV1RGTW92ZShzdGF0ZW1lbnQpKTsKKyAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBBU1NF
UlQoc3RhdGVtZW50KTsKKyAgICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgc3RhdGVtZW50LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCkpOwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRC
OjpwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQxLDEz
IEBAIFNRTGl0ZVN0YXRlbWVudCYgQ29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0
IFN0cmluZyYgc3FsKQogCiBib29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmlu
ZyYgc3FsKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3Fs
KTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVt
ZW50LmZpbmFsaXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5D
b2RlKHN0YXRlbWVudC5lcnJvcigpKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBw
cmVwYXJlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0
KSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIs
IHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwCmluZGV4IGMyMzliNDQyMGIzMjViMDA2NGM0ZjZhYjY5YjFiODFiN2EwYWQ3YmYu
LjMwNzU4OGI4YjZiY2Q0MmUyYzgyMTA2ZGU2ZTYxZTM4YjNlMDZjNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChq
aGF5Z29vZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0Miw3ICsxNDIsNyBA
QCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5N
b2RlIG9wZW5Nb2RlKQogCiAgICAgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jl
c3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGlmICghU1FMaXRlU3Rh
dGVtZW50KCp0aGlzLCAiUFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7Il9zKS5leGVjdXRlQ29t
bWFuZCgpKQorICAgICAgICBpZiAoIWV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgdGVtcF9zdG9yZSA9
IE1FTU9SWTsiX3MpKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291
bGQgbm90IHNldCB0ZW1wX3N0b3JlIHRvIG1lbW9yeSIpOwogICAgIH0KIApAQCAtMTk3LDEwICsx
OTcsMTAgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogewogICAg
IG1fdXNlV0FMID0gdHJ1ZTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCB3YWxTdGF0
ZW1lbnQoKnRoaXMsICJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3MpOwotICAgICAgICBpZiAo
d2FsU3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIHdhbFN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBqb3VybmFsX21vZGU9
V0FMOyJfcyk7CisgICAgICAgIGlmICh3YWxTdGF0ZW1lbnQgJiYgd2FsU3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIFN0cmluZyBt
b2RlID0gd2FsU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgICAgICBTdHJpbmcg
bW9kZSA9IHdhbFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgICAgIGlmICgh
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobW9kZSwgIndhbCIpKQogICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiam91cm5hbF9tb2RlIG9mIGRhdGFiYXNlIHNob3VsZCBiZSAnV0FMJywg
YnV0IGlzICclcyciLCBtb2RlLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCkBAIC0yMTAsOSArMjEw
LDkgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogCiAgICAgewog
ICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBjaGVja3BvaW50U3RhdGVtZW50KCp0
aGlzLCAiUFJBR01BIHdhbF9jaGVja3BvaW50KFRSVU5DQVRFKSJfcyk7Ci0gICAgICAgIGlmIChj
aGVja3BvaW50U3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQorICAgICAg
ICBhdXRvIGNoZWNrcG9pbnRTdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgd2Fs
X2NoZWNrcG9pbnQoVFJVTkNBVEUpIl9zKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1l
bnQgJiYgY2hlY2twb2ludFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgICAgIGlmIChjaGVja3BvaW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCiAgICAgICAg
ICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlIGRhdGFiYXNlIGNoZWNrcG9pbnQgaXMg
YmxvY2tlZCIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRl
IGRhdGFiYXNlIGZhaWxlZCB0byBjaGVja3BvaW50OiAlcyIsIGxhc3RFcnJvck1zZygpKTsKQEAg
LTI3Miw4ICsyNzIsOCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjptYXhpbXVtU2l6ZSgpCiAg
ICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAg
ICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQoKnRoaXMsICJQUkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOwotICAgICAgICBtYXhQYWdl
Q291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVt
ZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKKyAgICAg
ICAgbWF4UGFnZUNvdW50ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KSA6IDA7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0yOTMs
OSArMjkzLDggQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUoaW50NjRfdCBz
aXplKQogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgIGVuYWJs
ZUF1dGhvcml6ZXIoZmFsc2UpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhp
cywgbWFrZVN0cmluZygiUFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50
KSk7Ci0gICAgc3RhdGVtZW50LnByZXBhcmUoKTsKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQorICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChtYWtl
U3RyaW5nKCJQUkFHTUEgbWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgbWF4aW11bSBzaXplIG9mIGRhdGFiYXNlIHRv
ICVsbGkgYnl0ZXMiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNpemUpKTsKIAogICAgIGVuYWJs
ZUF1dGhvcml6ZXIodHJ1ZSk7CkBAIC0zMTAsOCArMzA5LDggQEAgaW50IFNRTGl0ZURhdGFiYXNl
OjpwYWdlU2l6ZSgpCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2sp
OwogICAgICAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgcGFnZV9zaXplIl9zKTsKLSAg
ICAgICAgbV9wYWdlU2l6ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1
dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7Cisg
ICAgICAgIG1fcGFnZVNpemUgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgw
KSA6IDA7CiAgICAgICAgIAogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0K
QEAgLTMyNyw4ICszMjYsOCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXpl
KCkKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAg
IGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOwogICAgICAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3Vu
dCB3YXMgYWRkZWQgaW4gU1FMaXRlIDMuNC4xLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KCp0aGlzLCAiUFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKLSAgICAgICAgZnJlZWxp
c3RDb3VudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0
ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgZnJlZWxpc3RfY291bnQiX3MpOworICAg
ICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2
NCgwKSA6IDA7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0z
NDIsOCArMzQxLDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6dG90YWxTaXplKCkKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBl
bmFibGVBdXRob3JpemVyKGZhbHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqdGhpcywgIlBSQUdNQSBwYWdlX2NvdW50Il9zKTsKLSAgICAgICAgcGFnZUNvdW50ID0gc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBh
cmVTdGF0ZW1lbnQoIlBSQUdNQSBwYWdlX2NvdW50Il9zKTsKKyAgICAgICAgcGFnZUNvdW50ID0g
c3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAgICAgIGVu
YWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0zNzEsMTQgKzM3MCwyMiBAQCB2b2lk
IFNRTGl0ZURhdGFiYXNlOjpzZXRCdXN5SGFuZGxlcihpbnQoKmhhbmRsZXIpKHZvaWQqLCBpbnQp
KQogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJCdXN5IGhhbmRsZXIgc2V0IG9uIG5vbi1vcGVu
IGRhdGFiYXNlIik7CiB9CiAKLWJvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNv
bnN0IFN0cmluZyYgc3FsKQorYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29u
c3QgU3RyaW5nJiBxdWVyeSkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBz
cWwpLmV4ZWN1dGVDb21tYW5kKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVt
ZW50KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNv
bW1hbmQoKTsKK30KKworYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoQVNDSUlM
aXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChx
dWVyeSk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5k
KCk7CiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KGNv
bnN0IFN0cmluZyYgc3FsKQogewotICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNx
bCkucmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBh
cmVTdGF0ZW1lbnQoc3FsKTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+cmV0
dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsKIH0KIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dGFibGVF
eGlzdHMoY29uc3QgU3RyaW5nJiB0YWJsZW5hbWUpCkBAIC0zODYsMTggKzM5MywxNSBAQCBib29s
IFNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRhYmxlbmFtZSkKICAg
ICBpZiAoIWlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgc3Rh
dGVtZW50ID0gIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3Rh
YmxlJyBBTkQgbmFtZSA9ICciICsgdGFibGVuYW1lICsgIic7IjsKLQotICAgIFNRTGl0ZVN0YXRl
bWVudCBzcWwoKnRoaXMsIHN0YXRlbWVudCk7Ci0gICAgc3FsLnByZXBhcmUoKTsKLSAgICByZXR1
cm4gc3FsLnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAn
dGFibGUnIEFORCBuYW1lID0gJyIgKyB0YWJsZW5hbWUgKyAiJzsiX3MpOworICAgIHJldHVybiBz
dGF0ZW1lbnQgJiYgc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogdm9pZCBT
UUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJsZXMoKQogewotICAgIFN0cmluZyBxdWVyeSA9ICJT
RUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfczsKICAg
ICBWZWN0b3I8U3RyaW5nPiB0YWJsZXM7Ci0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMs
IHF1ZXJ5KS5yZXR1cm5UZXh0UmVzdWx0cygwLCB0YWJsZXMpKSB7CisgICAgYXV0byBzdGF0ZW1l
bnQgPSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgdHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgIXN0YXRlbWVudC0+
cmV0dXJuVGV4dFJlc3VsdHMoMCwgdGFibGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2Us
ICJVbmFibGUgdG8gcmV0cmlldmUgbGlzdCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNTgzLDEwICs1ODcsMTAgQEAgYm9vbCBTUUxpdGVEYXRh
YmFzZTo6aXNBdXRvQ29tbWl0T24oKSBjb25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0dXJu
T25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoKnRoaXMsICJQUkFHTUEgYXV0b192YWN1dW0iX3MpOwotICAgIGludCBhdXRvVmFjdXVtTW9k
ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaW50IGF1dG9WYWN1dW1Nb2RlID0g
MDsKKyAgICBpZiAoYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYXV0
b192YWN1dW0iX3MpKQorICAgICAgICBhdXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApOwogICAgIGludCBlcnJvciA9IGxhc3RFcnJvcigpOwotICAgIHN0YXRlbWVudC5m
aW5hbGl6ZSgpOwogCiAgICAgLy8gQ2hlY2sgaWYgd2UgZ290IGFuIGVycm9yIHdoaWxlIHRyeWlu
ZyB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBhdXRvX3ZhY3V1bSBmbGFnLgogICAgIC8vIElmIHdl
IGdvdCBhIFNRTElURV9CVVNZIGVycm9yLCB0aGVuIHRoZXJlJ3MgcHJvYmFibHkgYW5vdGhlciB0
cmFuc2FjdGlvbiBpbgpAQCAtNjQzLDQgKzY0Nyw3MiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpy
ZWxlYXNlTWVtb3J5KCkKICAgICBzcWxpdGUzX2RiX3JlbGVhc2VfbWVtb3J5KG1fZGIpOwogfQog
CitzdGF0aWMgRXhwZWN0ZWQ8c3FsaXRlM19zdG10KiwgaW50PiBjb25zdHJ1Y3RBbmRQcmVwYXJl
U3RhdGVtZW50KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgY2hhciogcXVlcnksIHNp
emVfdCBxdWVyeUxlbmd0aCkKK3sKKyAgICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhkYXRhYmFz
ZS5kYXRhYmFzZU11dGV4KCkpOworICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUg
LSAlcyIsIHF1ZXJ5KTsKKworICAgIC8vIFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlu
Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOworICAgIC8v
IHRoaXMgbGV0cyBTUUxpdGUgYXZvaWQgYW4gZXh0cmEgc3RyaW5nIGNvcHkuCisgICAgc2l6ZV90
IGxlbmd0aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIgPSBxdWVyeUxlbmd0aCArIDE7CisKKyAgICBz
cWxpdGUzX3N0bXQqIHN0YXRlbWVudCB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiB0YWls
ID0gbnVsbHB0cjsKKyAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGF0YWJhc2Uu
c3FsaXRlM0hhbmRsZSgpLCBxdWVyeSwgbGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciwgJnN0
YXRlbWVudCwgJnRhaWwpOworICAgIGlmIChlcnJvciAhPSBTUUxJVEVfT0spCisgICAgICAgIExP
RyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBl
cnJvciwgcXVlcnksIHNxbGl0ZTNfZXJybXNnKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwor
CisgICAgaWYgKHRhaWwgJiYgKnRhaWwpCisgICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOwor
CisgICAgaWYgKGVycm9yICE9IFNRTElURV9PSykgeworICAgICAgICBzcWxpdGUzX2ZpbmFsaXpl
KHN0YXRlbWVudCk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvcik7CisgICAg
fQorCisgICAgcmV0dXJuIHN0YXRlbWVudDsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50
LCBpbnQ+IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgcXVl
cnlTdHJpbmcpCit7CisgICAgQ1N0cmluZyBxdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0cmlwV2hpdGVT
cGFjZSgpLnV0ZjgoKTsKKyAgICBhdXRvIHNxbFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBh
cmVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5LmRhdGEoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlm
ICghc3FsU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNl
LCAiU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0
YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0
ZVN0YXRlbWVudCB7ICp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3Rl
ZDxTUUxpdGVTdGF0ZW1lbnQsIGludD4gU1FMaXRlRGF0YWJhc2U6OnByZXBhcmVTdGF0ZW1lbnQo
QVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0gY29uc3RydWN0
QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVycygpLCBxdWVyeS5sZW5n
dGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRlbWVudDogRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50ICV7cHVibGljfXMiLCBxdWVyeS5jaGFyYWN0ZXJzKCkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAg
IH0KKyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50IHsgKnRoaXMsIHNxbFN0YXRlbWVudC52YWx1
ZSgpIH07Cit9CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IFNR
TGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3Ry
aW5nKQoreworICAgIENTdHJpbmcgcXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2Uo
KS51dGY4KCk7CisgICAgYXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3Rh
dGVtZW50KCp0aGlzLCBxdWVyeS5kYXRhKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNx
bFN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNR
TGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50ICV7cHVibGljfXMiLCBxdWVyeS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5pcXVl
UmVmPFNRTGl0ZVN0YXRlbWVudD4oKm5ldyBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbFN0YXRl
bWVudC52YWx1ZSgpKSk7Cit9CisKK0V4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+
LCBpbnQ+IFNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwg
cXVlcnkpCit7CisgICAgYXV0byBzcWxTdGF0ZW1lbnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3Rh
dGVtZW50KCp0aGlzLCBxdWVyeS5jaGFyYWN0ZXJzKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICBp
ZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTUUxEYXRhYmFz
ZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudDogRmFpbGVkIHRvIHByZXBh
cmUgc3RhdGVtZW50ICV7cHVibGljfXMiLCBxdWVyeS5jaGFyYWN0ZXJzKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3FsU3RhdGVtZW50LmVycm9yKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFNRTGl0ZVN0YXRlbWVudD4oKm5ldyBTUUxpdGVTdGF0ZW1lbnQoKnRo
aXMsIHNxbFN0YXRlbWVudC52YWx1ZSgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggZDNk
MDY5NmRiZjViMGYwZDY2MGI3MDg1MjBmYTYzYTk5ODAyOGU1Ny4uYzA0NWZlNTkzZDc5OWQ1MjA4
MGRkYjkzOTZjNDkzNDIxM2U3Y2Q4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KICNpbmNsdWRlIDxzcWxpdGUzLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjEsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsKTsKKwogICAgIGJvb2wg
cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoY29uc3QgU3RyaW5nJik7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKQEAgLTcwLDYgKzc0LDEx
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCBFeHBlY3RlZDxTUUxpdGVTdGF0ZW1lbnQsIGludD4gcHJlcGFyZVN0YXRlbWVudChjb25zdCBT
dHJpbmcmIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxTUUxpdGVTdGF0ZW1l
bnQsIGludD4gcHJlcGFyZVN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworICAgIFdFQkNP
UkVfRVhQT1JUIEV4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IHByZXBh
cmVIZWFwU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgcXVlcnkpOworICAgIFdFQkNPUkVfRVhQT1JU
IEV4cGVjdGVkPFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+LCBpbnQ+IHByZXBhcmVIZWFwU3Rh
dGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSk7CisKICAgICAvLyBBYm9ydHMgdGhlIGN1cnJlbnQg
ZGF0YWJhc2Ugb3BlcmF0aW9uLiBUaGlzIGlzIHRocmVhZCBzYWZlLgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaW50ZXJydXB0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5jcHAKaW5kZXggZGVhOGZmZjhhNWVhNGZkZTQxNjhiZDlkM2VmNGZk
ZTJlYzZmNTVhOC4uNDhmOWFlZTJkNzFkOTFmYjQ1NzAyMjJkNGU1YjA3ODhhMGJlMTVkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDEsODcgKzQxLDQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1FMaXRl
U3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJp
bmcmIHNxbCkKK1NRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURhdGFiYXNl
JiBkYiwgc3FsaXRlM19zdG10KiBzdGF0ZW1lbnQpCiAgICAgOiBtX2RhdGFiYXNlKGRiKQotICAg
ICwgbV9xdWVyeShzcWwpCi0gICAgLCBtX3N0YXRlbWVudCgwKQorICAgICwgbV9zdGF0ZW1lbnQo
c3RhdGVtZW50KQogeworICAgIEFTU0VSVChzdGF0ZW1lbnQpOwogfQogCi1TUUxpdGVTdGF0ZW1l
bnQ6On5TUUxpdGVTdGF0ZW1lbnQoKQorU1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQo
U1FMaXRlU3RhdGVtZW50JiYgb3RoZXIpCisgICAgOiBtX2RhdGFiYXNlKG90aGVyLmRhdGFiYXNl
KCkpCisgICAgLCBtX3N0YXRlbWVudChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fc3RhdGVtZW50LCBu
dWxscHRyKSkKIHsKLSAgICBmaW5hbGl6ZSgpOwogfQogCi1pbnQgU1FMaXRlU3RhdGVtZW50Ojpw
cmVwYXJlKCkKK1NRTGl0ZVN0YXRlbWVudDo6flNRTGl0ZVN0YXRlbWVudCgpCiB7Ci0gICAgQVNT
RVJUKCFtX2lzUHJlcGFyZWQpOwotCi0gICAgTG9ja0hvbGRlciBkYXRhYmFzZUxvY2sobV9kYXRh
YmFzZS5kYXRhYmFzZU11dGV4KCkpOwotCi0gICAgQ1N0cmluZyBxdWVyeSA9IG1fcXVlcnkuc3Ry
aXBXaGl0ZVNwYWNlKCkudXRmOCgpOwotICAgIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAt
IHByZXBhcmUgLSAlcyIsIHF1ZXJ5LmRhdGEoKSk7Ci0KLSAgICAvLyBQYXNzIHRoZSBsZW5ndGgg
b2YgdGhlIHN0cmluZyBpbmNsdWRpbmcgdGhlIG51bGwgY2hhcmFjdGVyIHRvIHNxbGl0ZTNfcHJl
cGFyZV92MjsKLSAgICAvLyB0aGlzIGxldHMgU1FMaXRlIGF2b2lkIGFuIGV4dHJhIHN0cmluZyBj
b3B5LgotICAgIHNpemVfdCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFjdGVyID0gcXVlcnkubGVu
Z3RoKCkgKyAxOwotCi0gICAgY29uc3QgY2hhciogdGFpbCA9IG51bGxwdHI7Ci0gICAgaW50IGVy
cm9yID0gc3FsaXRlM19wcmVwYXJlX3YyKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBxdWVy
eS5kYXRhKCksIGxlbmd0aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIsICZtX3N0YXRlbWVudCwgJnRh
aWwpOwotCi0gICAgaWYgKGVycm9yICE9IFNRTElURV9PSykKLSAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAic3FsaXRlM19wcmVwYXJlMTYgZmFpbGVkICglaSlcbiVzXG4lcyIsIGVycm9yLCBxdWVy
eS5kYXRhKCksIHNxbGl0ZTNfZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0K
LSAgICBpZiAodGFpbCAmJiAqdGFpbCkKLSAgICAgICAgZXJyb3IgPSBTUUxJVEVfRVJST1I7Ci0K
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGVycm9yID09IFNRTElURV9P
SzsKLSNlbmRpZgotICAgIHJldHVybiBlcnJvcjsKKyAgICBzcWxpdGUzX2ZpbmFsaXplKG1fc3Rh
dGVtZW50KTsKIH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6c3RlcCgpCiB7CiAgICAgTG9ja0hv
bGRlciBkYXRhYmFzZUxvY2sobV9kYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwogCi0gICAgaWYg
KCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQogICAgIC8vIFRoZSBk
YXRhYmFzZSBuZWVkcyB0byB1cGRhdGUgaXRzIGxhc3QgY2hhbmdlcyBjb3VudCBiZWZvcmUgZWFj
aCBzdGF0ZW1lbnQKICAgICAvLyBpbiBvcmRlciB0byBjb21wdXRlIHByb3Blcmx5IHRoZSBsYXN0
Q2hhbmdlcygpIHJldHVybiB2YWx1ZS4KICAgICBtX2RhdGFiYXNlLnVwZGF0ZUxhc3RDaGFuZ2Vz
Q291bnQoKTsKIAotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHN0ZXAgLSAlcyIsIG1fcXVl
cnkuYXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBlcnJvciA9IHNxbGl0ZTNfc3RlcChtX3N0YXRl
bWVudCk7Ci0gICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElURV9S
T1cpIHsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19zdGVwIGZhaWxlZCAoJWkp
XG5RdWVyeSAtICVzXG5FcnJvciAtICVzIiwgCi0gICAgICAgICAgICBlcnJvciwgbV9xdWVyeS5h
c2NpaSgpLmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkp
KTsKLSAgICB9CisgICAgaWYgKGVycm9yICE9IFNRTElURV9ET05FICYmIGVycm9yICE9IFNRTElU
RV9ST1cpCisgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfc3RlcCBmYWlsZWQgKCVp
KVxuRXJyb3IgLSAlcyIsIGVycm9yLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNI
YW5kbGUoKSkpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQotICAgIAotaW50IFNRTGl0ZVN0YXRl
bWVudDo6ZmluYWxpemUoKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1ByZXBhcmVk
ID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICByZXR1cm4g
U1FMSVRFX09LOwotICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIGZpbmFsaXplIC0gJXMiLCBt
X3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBpbnQgcmVzdWx0ID0gc3FsaXRlM19maW5hbGl6
ZShtX3N0YXRlbWVudCk7Ci0gICAgbV9zdGF0ZW1lbnQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7
Ci19CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkgCiB7Ci0gICAgQVNTRVJUKG1faXNQ
cmVwYXJlZCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9P
SzsKLSAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSByZXNldCAtICVzIiwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQobV9zdGF0ZW1lbnQp
OwogICAgIHNxbGl0ZTNfY2xlYXJfYmluZGluZ3MobV9zdGF0ZW1lbnQpOwogICAgIHJldHVybiBz
dGF0dXM7CkBAIC0xMjksNDIgKzgzLDIxIEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnJlc2V0KCkK
IAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmV4ZWN1dGVDb21tYW5kKCkKIHsKLSAgICBpZiAoIW1f
c3RhdGVtZW50ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9E
T05FKSB7Ci0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgZmluYWxpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RlcCgpID09
IFNRTElURV9ET05FOwogfQogCiBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuc0F0TGVhc3RP
bmVSZXN1bHQoKQogewotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJlcGFyZSgpICE9IFNRTElU
RV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwot
ICAgIGlmIChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0KKyAgICByZXR1cm4gc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIGludCBTUUxpdGVT
dGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwgaW50IHNpemUp
CiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNv
dW50KCkpOwogICAgIEFTU0VSVChibG9iIHx8ICFzaXplKTsKICAgICBBU1NFUlQoc2l6ZSA+PSAw
KTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7
Ci0KICAgICByZXR1cm4gc3FsaXRlM19iaW5kX2Jsb2IobV9zdGF0ZW1lbnQsIGluZGV4LCBibG9i
LCBzaXplLCBTUUxJVEVfVFJBTlNJRU5UKTsKIH0KIApAQCAtMTg1LDcgKzExOCw2IEBAIGludCBT
UUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
dGV4dCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAw
KTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1l
dGVyQ291bnQoKSk7CiAKQEAgLTIwNCw3ICsxMzYsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpi
aW5kVGV4dChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRl
bWVudDo6YmluZEludChpbnQgaW5kZXgsIGludCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lz
UHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjEzLDcg
KzE0NCw2IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50
ZWdlcikKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRf
dCBpbnRlZ2VyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRl
eCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQ
YXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjIyLDcgKzE1Miw2IEBAIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIAogaW50IFNRTGl0ZVN0
YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgQVNT
RVJUKG1faXNQcmVwYXJlZCk7CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBA
IC0yMzEsNyArMTYwLDYgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZERvdWJsZShpbnQgaW5k
ZXgsIGRvdWJsZSBudW1iZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmROdWxsKGludCBp
bmRleCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAw
KTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1l
dGVyQ291bnQoKSk7CiAKQEAgLTI0OSwyNiArMTc3LDE5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmRWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSkKIAogdW5zaWduZWQg
U1FMaXRlU3RhdGVtZW50OjpiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdAogewotICAgIEFTU0VS
VChtX2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KG1fc3RhdGVtZW50KTsK
IH0KIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIEFTU0VSVCht
X2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBzcWxpdGUzX2RhdGFfY291bnQobV9zdGF0ZW1lbnQpOwogfQogCiBib29sIFNR
TGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+
PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGFz
U3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMjc4LDE5ICsxOTksMTQgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29s
dW1uTnVsbChpbnQgY29sKQogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uRGVjbGFyZWRB
c0Jsb2IoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0
ZW1lbnQpIHsKLSAgICAgICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShTdHJpbmdWaWV3KHNxbGl0ZTNfY29sdW1uX2RlY2x0eXBlKG1fc3RhdGVtZW50LCBj
b2wpKSwgImJsb2IiKTsKIH0KIAogU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFt
ZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVu
dCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKGNv
bHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJu
IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3FsaXRlM19jb2x1bW5fbmFt
ZTE2KG1fc3RhdGVtZW50LCBjb2wpKSk7CkBAIC0yOTksOSArMjE1LDggQEAgU3RyaW5nIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogU1FMVmFsdWUgU1FMaXRlU3RhdGVt
ZW50OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0g
ICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FM
SVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaGFzU3RhcnRl
ZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTMzMCw5ICsyNDUsOCBAQCBTUUxWYWx1ZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENv
bHVtblZhbHVlKGludCBjb2wpCiBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5UZXh0
KGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50
KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3Rl
cCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoY29s
dW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzcWxpdGUzX2NvbHVtbl90ZXh0
MTYobV9zdGF0ZW1lbnQsIGNvbCkpLCBzcWxpdGUzX2NvbHVtbl9ieXRlczE2KG1fc3RhdGVtZW50
LCBjb2wpIC8gc2l6ZW9mKFVDaGFyKSk7CkBAIC0zNDEsOSArMjU1LDggQEAgU3RyaW5nIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogZG91YmxlIFNRTGl0ZVN0YXRlbWVu
dDo6Z2V0Q29sdW1uRG91YmxlKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKLSAg
ICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVw
cGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gMC4wOwogICAg
IGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICByZXR1
cm4gc3FsaXRlM19jb2x1bW5fZG91YmxlKG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzUyLDkgKzI2
NSw4IEBAIGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQgY29sKQog
aW50IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50KGludCBjb2wpCiB7CiAgICAgQVNTRVJU
KGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJlcGFyZUFu
ZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFo
YXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4gMDsK
ICAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzYz
LDkgKzI3NSw4IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludChpbnQgY29sKQog
aW50NjRfdCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KGludCBjb2wpCiB7CiAgICAg
QVNTRVJUKGNvbCA+PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAgICBpZiAocHJl
cGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5faW50NjQobV9zdGF0ZW1lbnQsIGNvbCk7
CkBAIC0zNzUsNyArMjg2LDcgQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxv
YkFzU3RyaW5nKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICgh
bV9zdGF0ZW1lbnQgJiYgcHJlcGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmICgh
aGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKQEAgLTM5Nyw3
ICszMDgsNyBAQCB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKGlu
dCBjb2wsIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CiAK
LSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MjMsNyArMzM0LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1ZlY3Rv
cihpbnQgY29sLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoY29sID49
IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElU
RV9ST1cpIHsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CiAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDUxLDE5ICszNjIsMTYgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVyblRleHRS
ZXN1bHRzKGludCBjb2wsIFZlY3RvcjxTdHJpbmc+JiB2KQogCiAgICAgdi5jbGVhcigpOwogCi0g
ICAgaWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0
ZWRTdGVwcGluZygpKQorICAgICAgICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRDb2x1bW5UZXh0KGNvbCkpOwogICAgIGJv
b2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3Rh
dGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0czogRXJyb3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAg
fQotICAgIGZpbmFsaXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDcxLDE5ICsz
NzksMTYgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJlc3VsdHMoaW50IGNvbCwg
VmVjdG9yPGludD4mIHYpCiB7CiAgICAgdi5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50
KQotICAgICAgICBmaW5hbGl6ZSgpOwotICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQorICAg
ICAgICByZXNldCgpOwogCiAgICAgd2hpbGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAg
ICB2LmFwcGVuZChnZXRDb2x1bW5JbnQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwog
ICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
IHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5n
IHJlc3VsdHMgZnJvbSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludFJl
c3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ5MSwxOSArMzk2LDE2IEBAIGJvb2wgU1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnQ2NFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGludDY0X3Q+JiB2
KQogewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmlu
YWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsK
IAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0
Q29sdW1uSW50NjQoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2Rh
dGFiYXNlLmxhc3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZh
bHNlOwotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJv
bSBkYXRhYmFzZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBM
T0coU1FMRGF0YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkludDY0UmVzdWx0czogRXJy
b3IgcmVhZGluZyByZXN1bHRzIik7CiAgICAgfQotICAgIGZpbmFsaXplKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNTExLDI1ICs0MTMsMjIgQEAgYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6
OnJldHVybkRvdWJsZVJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPGRvdWJsZT4mIHYpCiB7CiAgICAg
di5jbGVhcigpOwogCi0gICAgaWYgKG1fc3RhdGVtZW50KQotICAgICAgICBmaW5hbGl6ZSgpOwot
ICAgIGlmIChwcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGhhc1N0YXJ0ZWRTdGVwcGluZygpKQorICAgICAgICByZXNldCgpOwogCiAgICAgd2hp
bGUgKHN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICB2LmFwcGVuZChnZXRDb2x1bW5Eb3Vi
bGUoY29sKSk7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGlmIChtX2RhdGFiYXNlLmxh
c3RFcnJvcigpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAg
ICAgICBMT0coU1FMRGF0YWJhc2UsICJFcnJvciByZWFkaW5nIHJlc3VsdHMgZnJvbSBkYXRhYmFz
ZSBxdWVyeSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coU1FMRGF0
YWJhc2UsICJTUUxpdGVTdGF0ZW1lbnQ6OnJldHVybkRvdWJsZVJlc3VsdHM6IEVycm9yIHJlYWRp
bmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWJvb2wgU1FMaXRlU3RhdGVtZW50Ojppc0V4cGlyZWQoKQorYm9vbCBTUUxpdGVTdGF0
ZW1lbnQ6Omhhc1N0YXJ0ZWRTdGVwcGluZygpCiB7Ci0gICAgcmV0dXJuICFtX3N0YXRlbWVudDsK
KyAgICByZXR1cm4gc3FsaXRlM19zdG10X2J1c3kobV9zdGF0ZW1lbnQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmgKaW5kZXggYTdhY2RlNWNmYzViMmQzNTYyYjFmYjUxZmQ2YTcxYmQ5NWNjZTQwOC4u
NjM1MTJiYjZlYjQ5YTZlZTE5ZTcxZjFjNjdiMWZlOGYyOWY2NWM4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMCAr
MzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTUUxpdGVTdGF0ZW1lbnQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNRTGl0ZVN0YXRlbWVudCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZVN0YXRlbWVudChTUUxp
dGVEYXRhYmFzZSYsIGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5TUUxpdGVT
dGF0ZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlU3Rh
dGVtZW50JiYpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIGludCBwcmVwYXJlKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgaW50IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3Qgdm9pZCogYmxvYiwg
aW50IHNpemUpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kVGV4dChpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYpOwpAQCAtNTAsMjMgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCB1bnNpZ25lZCBiaW5kUGFyYW1ldGVyQ291bnQoKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIGludCBzdGVwKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IGZpbmFsaXplKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHJlc2V0KCk7CiAgICAgCi0gICAgaW50IHByZXBhcmVB
bmRTdGVwKCkgeyBpZiAoaW50IGVycm9yID0gcHJlcGFyZSgpKSByZXR1cm4gZXJyb3I7IHJldHVy
biBzdGVwKCk7IH0KLSAgICAKLSAgICAvLyBwcmVwYXJlcywgc3RlcHMsIGFuZCBmaW5hbGl6ZXMg
dGhlIHF1ZXJ5LgorICAgIC8vIHN0ZXBzIGFuZCBmaW5hbGl6ZXMgdGhlIHF1ZXJ5LgogICAgIC8v
IHJldHVybnMgdHJ1ZSBpZiBhbGwgMyBzdGVwcyBzdWNjZWVkIHdpdGggc3RlcCgpIHJldHVybmlu
ZyBTUUxJVEVfRE9ORQogICAgIC8vIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlICAKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKCk7CiAgICAgCi0gICAgLy8gcHJlcGFyZXMs
IHN0ZXBzLCBhbmQgZmluYWxpemVzLiAgCisgICAgLy8gc3RlcHMsIGFuZCBmaW5hbGl6ZXMuCiAg
ICAgLy8gcmV0dXJucyB0cnVlIGlzIHN0ZXAoKSByZXR1cm5zIFNRTElURV9ST1cKICAgICAvLyBy
ZXR1cm5zIGZhbHNlIG90aGVyd2lzZQogICAgIGJvb2wgcmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQo
KTsKIAotICAgIGJvb2wgaXNFeHBpcmVkKCk7Ci0KICAgICAvLyBSZXR1cm5zIC0xIG9uIGxhc3Qt
c3RlcCBmYWlsaW5nLiAgT3RoZXJ3aXNlLCByZXR1cm5zIG51bWJlciBvZiByb3dzCiAgICAgLy8g
cmV0dXJuZWQgaW4gdGhlIGxhc3Qgc3RlcCgpCiAgICAgaW50IGNvbHVtbkNvdW50KCk7CkBAIC05
MCwxNSArODQsMTUgQEAgcHVibGljOgogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkg
eyByZXR1cm4gbV9kYXRhYmFzZTsgfQogICAgIAotICAgIGNvbnN0IFN0cmluZyYgcXVlcnkoKSBj
b25zdCB7IHJldHVybiBtX3F1ZXJ5OyB9Ci0gICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBTUUxpdGVEYXRhYmFzZTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBz
cWxpdGUzX3N0bXQqKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJlcGFyZWQgc3Rh
dGVtZW50IGhhcyBiZWVuIHN0ZXBwZWQgYXQgbGVhc3Qgb25jZSB1c2luZyBzdGVwKCkgYnV0IGhh
cyBuZWl0aGVyIHJ1biB0byBjb21wbGV0aW9uIChyZXR1cm5lZCBTUUxJVEVfRE9ORSBmcm9tIHN0
ZXAoKSkgbm9yIGJlZW4gcmVzZXQoKS4KKyAgICBib29sIGhhc1N0YXJ0ZWRTdGVwcGluZygpOwor
CiAgICAgU1FMaXRlRGF0YWJhc2UmIG1fZGF0YWJhc2U7Ci0gICAgU3RyaW5nIG1fcXVlcnk7CiAg
ICAgc3FsaXRlM19zdG10KiBtX3N0YXRlbWVudDsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJv
b2wgbV9pc1ByZXBhcmVkIHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBv
cHVwTWVudURCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1l
bnVEQi5jcHAKaW5kZXggZjljMjRiOGVkNTcxODJlYTU3ODg3YTAwMzA3ZWQ4ZGI4YTNkMGZmZC4u
YTE5MzlhYWQxYjBjODZmMDM1ZGEwMDkyNWZmZWNmMTc5ZDk2N2RiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCkBAIC0xMzAsMjUg
KzEzMCwyNSBAQCBib29sIFNlYXJjaFBvcHVwTWVudURCOjpjaGVja0RhdGFiYXNlVmFsaWRpdHko
KQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiU2VhcmNoIikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnRlZ3JpdHkobV9kYXRhYmFzZSwg
IlBSQUdNQSBxdWlja19jaGVjazsiKTsKLSAgICBpZiAoaW50ZWdyaXR5LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIGludGVncml0eSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiUFJBR01BIHF1aWNrX2NoZWNrOyJfcyk7CisgICAgaWYgKCFpbnRlZ3JpdHkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hl
Y2siKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCByZXN1bHRDb2Rl
ID0gaW50ZWdyaXR5LnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS0+c3Rl
cCgpOwogICAgIGlmIChyZXN1bHRDb2RlICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlZ3JpdHkgcXVpY2tfY2hlY2sgc3RlcCByZXR1cm5lZCAlZCIsIHJlc3VsdENvZGUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IGNvbHVtbnMgPSBpbnRl
Z3JpdHkuY29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sdW1ucyA9IGludGVncml0eS0+Y29sdW1u
Q291bnQoKTsKICAgICBpZiAoY29sdW1ucyAhPSAxKSB7CiAgICAgICAgIExPR19FUlJPUigiUmVj
ZWl2ZWQgJWkgY29sdW1ucyBwZXJmb3JtaW5nIGludGVncml0eSBjaGVjaywgc2hvdWxkIGJlIDEi
LCBjb2x1bW5zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0cmluZyBy
ZXN1bHRUZXh0ID0gaW50ZWdyaXR5LmdldENvbHVtblRleHQoMCk7CisgICAgU3RyaW5nIHJlc3Vs
dFRleHQgPSBpbnRlZ3JpdHktPmdldENvbHVtblRleHQoMCk7CiAKICAgICBpZiAocmVzdWx0VGV4
dCAhPSAib2siKSB7CiAgICAgICAgIExPR19FUlJPUigiU2VhcmNoIGF1dG9zYXZlIGRhdGFiYXNl
IGludGVncml0eSBjaGVjayBmYWlsZWQgLSAlcyIsIHJlc3VsdFRleHQuYXNjaWkoKS5kYXRhKCkp
OwpAQCAtMjI0LDE3ICsyMjQsMTkgQEAgYm9vbCBTZWFyY2hQb3B1cE1lbnVEQjo6b3BlbkRhdGFi
YXNlKCkKIAogdm9pZCBTZWFyY2hQb3B1cE1lbnVEQjo6Y2xvc2VEYXRhYmFzZSgpCiB7Ci0gICAg
aWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgbV9sb2FkU2VhcmNoVGVybXNGb3JO
YW1lU3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX2luc2VydFNlYXJjaFRlcm1TdGF0
ZW1lbnQtPmZpbmFsaXplKCk7Ci0gICAgICAgIG1fcmVtb3ZlU2VhcmNoVGVybXNGb3JOYW1lU3Rh
dGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgfQor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9s
b2FkU2VhcmNoVGVybXNGb3JOYW1lU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2luc2VydFNl
YXJjaFRlcm1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVtb3ZlU2VhcmNoVGVybXNGb3JO
YW1lU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CiB9CiAKIHZv
aWQgU2VhcmNoUG9wdXBNZW51REI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewotICAgIGludCB2
ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9u
IikuZ2V0Q29sdW1uSW50KDApOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICBpbnQgdmVyc2lvbiA9
IHN0YXRlbWVudCA/IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICBpZiAodmVy
c2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MSwyMyArMjcz
LDI1IEBAIHZvaWQgU2VhcmNoUG9wdXBNZW51REI6OmNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQg
YWN0dWFsKQogCiBpbnQgU2VhcmNoUG9wdXBNZW51REI6OmV4ZWN1dGVTaW1wbGVTcWwoY29uc3Qg
U3RyaW5nJiBzcWwsIGJvb2wgaWdub3JlRXJyb3IpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCBzcWwpOwotICAgIGludCByZXQgPSBzdGF0ZW1lbnQucHJlcGFy
ZUFuZFN0ZXAoKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGlmICghc3RhdGVtZW50
KSB7CisgICAgICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQuZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0ZW1lbnQuZXJyb3IoKTsKKyAgICB9CiAKLSAgICBjaGVja1NRTGl0
ZVJldHVybkNvZGUocmV0KTsKKyAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAg
aWYgKHJldCAhPSBTUUxJVEVfT0sgJiYgcmV0ICE9IFNRTElURV9ET05FICYmIHJldCAhPSBTUUxJ
VEVfUk9XICYmICFpZ25vcmVFcnJvcikKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAlcyBlcnJvcjogJXMiLCBzcWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwotCiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNRTGl0
ZVN0YXRlbWVudD4gU2VhcmNoUG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KGNv
bnN0IFN0cmluZyYgc3FsKQorc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gU2VhcmNo
UG9wdXBNZW51REI6OmNyZWF0ZVByZXBhcmVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBzcWwpCiB7
Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRh
YmFzZSwgc3FsKTsKLSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LT5wcmVwYXJlKCk7Ci0gICAgQVNT
RVJUX1VOVVNFRChyZXQsIHJldCA9PSBTUUxJVEVfT0spOwotICAgIHJldHVybiBzdGF0ZW1lbnQ7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVIZWFwU3RhdGVtZW50KHNx
bCk7CisgICAgQVNTRVJUKHN0YXRlbWVudCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9Vbmlx
dWVQdHIoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1NlYXJjaFBvcHVwTWVudURCLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNo
UG9wdXBNZW51REIuaAppbmRleCBhMjU1Y2Y0MjZlN2E3Yjk0ZTc2Y2M4NDY1YWRmMTgyNDRiY2Zl
NjM2Li5mOTEzZjQzZWE1ZDBhNGY3NDMxYTc5MmIxNjgzODBkNzlkNzJhNjE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaApAQCAtNTEsNyAr
NTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmVyaWZ5U2NoZW1hVmVyc2lvbigpOwogICAgIGlu
dCBleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29sIGlnbm9yZUVycm9yID0g
ZmFsc2UpOwogICAgIHZvaWQgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKGludCBhY3R1YWwpOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IGNyZWF0ZVByZXBhcmVkU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgc3FsKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50
PiBjcmVhdGVQcmVwYXJlZFN0YXRlbWVudChBU0NJSUxpdGVyYWwgc3FsKTsKIAogICAgIFN0cmlu
ZyBtX2RhdGFiYXNlRmlsZW5hbWU7CiAgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0
aW9uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9S
ZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKaW5kZXggODkyYzNmNDllOTAxNGEzNWZlOTI5ODRlZjlh
MjkwNGE3YmRlZDU2MC4uYjBjNzE2MWE4MDZhODY4ZWM0ZmY0NDc2NTNiYjg1M2ZjMDk2ODQ1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKQEAgLTI4NSwxMSArMjg1LDExIEBAIFN0cmlu
ZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKQogICAgIFN0
cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBm
b3IgYW4gZXhpc3RpbmcgcmVjb3JkcyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudCgqbV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVy
IFdIRVJFIHRibF9uYW1lPSdSZWNvcmRzJyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiI7CisgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIl9z
KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0
byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxl
LiJfczsKIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8v
IElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4g
YmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzAx
LDcgKzMwMSw3IEBAIFN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNv
cmRzVGFibGUoKQogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAg
ICAgICAgICByZXR1cm4gIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iOwogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEu
aXNFbXB0eSgpKTsKQEAgLTQyNywxOCArNDI3LDE4IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4m
CiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fZGF0YWJhc2UpOwogICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8pIl9zKTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIGluc2VydFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnRTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBz
dG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9k
YXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGF1dG8mIHNjcmlwdFN0b3JhZ2UgPSB0aGlz
LT5zY3JpcHRTdG9yYWdlKCk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiByZW1vdmVk
UmVnaXN0cmF0aW9ucykgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX2RhdGFiYXNl
LCAiREVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSA/Iik7Ci0gICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIHJl
Z2lzdHJhdGlvbi50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
c3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGRlbGV0ZVN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFJlY29yZHMgV0hF
UkUga2V5ID0gPyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50CisgICAgICAgICAg
ICB8fCBkZWxldGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHJlZ2lzdHJhdGlvbi50b0RhdGFiYXNl
S2V5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZp
Y2VXb3JrZXIsICJGYWlsZWQgdG8gcmVtb3ZlIHJlZ2lzdHJhdGlvbiBkYXRhIGZyb20gcmVjb3Jk
cyB0YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC00NTcsMTkgKzQ1NywxOSBAQCBib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFu
Z2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgICAgICBXVEY6
OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGNlcnRpZmljYXRlSW5mb0VuY29kZXI7CiAgICAgICAgIGNl
cnRpZmljYXRlSW5mb0VuY29kZXIgPDwgZGF0YS5jZXJ0aWZpY2F0ZUluZm87CiAKLSAgICAgICAg
aWYgKHNxbC5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRhYmFzZUtleSgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lz
dHJhdGlvbi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDMsIGRhdGEucmVnaXN0cmF0aW9uLnNjb3BlVVJMLnBh
dGgoKS50b1N0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4
dCg0LCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVy
KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmREb3VibGUoNSwgZGF0YS5y
ZWdpc3RyYXRpb24ubGFzdFVwZGF0ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCg2LCB1cGRhdGVWaWFDYWNo
ZVRvU3RyaW5nKGRhdGEucmVnaXN0cmF0aW9uLnVwZGF0ZVZpYUNhY2hlKSkgIT0gU1FMSVRFX09L
Ci0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDgsIHdvcmtlclR5cGVU
b1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5iaW5kQmxvYig5LCBjc3BFbmNvZGVyLmJ1ZmZlcigpLCBjc3BFbmNvZGVyLmJ1ZmZlclNpemUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMTAsIGRhdGEucmVm
ZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDEx
LCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFwRW5j
b2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRC
bG9iKDEyLCBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyLmJ1ZmZlcigpLCBjZXJ0aWZpY2F0ZUluZm9F
bmNvZGVyLmJ1ZmZlclNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGlmIChpbnNlcnRTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDEsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b0RhdGFiYXNlS2V5KCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhLnJlZ2lz
dHJhdGlvbi5zY29wZVVSTC5wcm90b2NvbEhvc3RBbmRQb3J0KCkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgzLCBkYXRhLnJlZ2lzdHJhdGlv
bi5zY29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGRhdGEucmVnaXN0cmF0aW9uLmtleS50b3BP
cmlnaW4oKS5kYXRhYmFzZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmREb3VibGUoNSwgZGF0YS5yZWdpc3RyYXRpb24ubGFzdFVw
ZGF0ZVRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0
cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg3LCBkYXRhLnNjcmlwdFVSTC5z
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJp
bmRUZXh0KDgsIHdvcmtlclR5cGVUb1N0cmluZyhkYXRhLndvcmtlclR5cGUpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoOSwgY3NwRW5jb2Rl
ci5idWZmZXIoKSwgY3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgZGF0YS5yZWZlcnJlclBvbGlj
eSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRCbG9i
KDExLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyKCksIHNjcmlwdFJlc291cmNlTWFw
RW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0
U3RhdGVtZW50LT5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXIoKSwg
Y2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gc3RvcmUg
cmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUwMiwyNiArNTAyLDI2IEBAIFN0cmluZyBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CiAKICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9u
RGF0YWJhc2U6OmltcG9ydFJlY29yZHM6Iik7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9k
YXRhYmFzZSwgIlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3MpOwotICAgIGlmIChzcWwucHJlcGFy
ZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHNxbCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCAqIEZST00gUmVjb3JkczsiX3MpOworICAgIGlmICghc3FsKQogICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJldHJp
ZXZlIHJlZ2lzdHJhdGlvbnMgZnJvbSByZWNvcmRzIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0
RXJyb3IoKSwgIikgLSAiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CiAKLSAgICBpbnQg
cmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAKLSAg
ICBmb3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNxbC5zdGVwKCkpIHsKKyAg
ICBmb3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNxbC0+c3RlcCgpKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdpc3RyYXRpb25EYXRhYmFzZTo6
aW1wb3J0UmVjb3JkczogSW1wb3J0aW5nIGEgcmVnaXN0cmF0aW9uIGZyb20gdGhlIGRhdGFiYXNl
Iik7Ci0gICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJv
bURhdGFiYXNlS2V5KHNxbC5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICAgICAgYXV0byBvcmlnaW5V
UkwgPSBVUkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQoMSkgfTsKLSAgICAgICAgYXV0byBz
Y29wZVBhdGggPSBzcWwuZ2V0Q29sdW1uVGV4dCgyKTsKKyAgICAgICAgYXV0byBrZXkgPSBTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5Ojpmcm9tRGF0YWJhc2VLZXkoc3FsLT5nZXRDb2x1bW5U
ZXh0KDApKTsKKyAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5nZXRD
b2x1bW5UZXh0KDEpIH07CisgICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLT5nZXRDb2x1bW5U
ZXh0KDIpOwogICAgICAgICBhdXRvIHNjb3BlVVJMID0gVVJMIHsgb3JpZ2luVVJMLCBzY29wZVBh
dGggfTsKLSAgICAgICAgYXV0byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21E
YXRhYmFzZUlkZW50aWZpZXIoc3FsLmdldENvbHVtblRleHQoMykpOwotICAgICAgICBhdXRvIGxh
c3RVcGRhdGVDaGVja1RpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3FsLmdldENvbHVt
bkRvdWJsZSg0KSk7Ci0gICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBzdHJpbmdUb1VwZGF0
ZVZpYUNhY2hlKHNxbC5nZXRDb2x1bW5UZXh0KDUpKTsKLSAgICAgICAgYXV0byBzY3JpcHRVUkwg
PSBVUkwgeyBVUkwoKSwgc3FsLmdldENvbHVtblRleHQoNikgfTsKLSAgICAgICAgYXV0byB3b3Jr
ZXJUeXBlID0gc3RyaW5nVG9Xb3JrZXJUeXBlKHNxbC5nZXRDb2x1bW5UZXh0KDcpKTsKKyAgICAg
ICAgYXV0byB0b3BPcmlnaW4gPSBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50
aWZpZXIoc3FsLT5nZXRDb2x1bW5UZXh0KDMpKTsKKyAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hl
Y2tUaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHNxbC0+Z2V0Q29sdW1uRG91YmxlKDQp
KTsKKyAgICAgICAgYXV0byB1cGRhdGVWaWFDYWNoZSA9IHN0cmluZ1RvVXBkYXRlVmlhQ2FjaGUo
c3FsLT5nZXRDb2x1bW5UZXh0KDUpKTsKKyAgICAgICAgYXV0byBzY3JpcHRVUkwgPSBVUkwgeyBV
UkwoKSwgc3FsLT5nZXRDb2x1bW5UZXh0KDYpIH07CisgICAgICAgIGF1dG8gd29ya2VyVHlwZSA9
IHN0cmluZ1RvV29ya2VyVHlwZShzcWwtPmdldENvbHVtblRleHQoNykpOwogCiAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhOwotICAgICAgICBzcWwuZ2V0
Q29sdW1uQmxvYkFzVmVjdG9yKDgsIGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEpOworICAgICAg
ICBzcWwtPmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRh
KTsKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBjc3BEZWNvZGVyKGNvbnRlbnRT
ZWN1cml0eVBvbGljeURhdGEuZGF0YSgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLnNpemUo
KSk7CiAgICAgICAgIE9wdGlvbmFsPENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
cz4gY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICAgICBpZiAoY29udGVudFNlY3VyaXR5UG9s
aWN5RGF0YS5zaXplKCkpIHsKQEAgLTUzMiwxMCArNTMyLDEwIEBAIFN0cmluZyBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLmdldENvbHVtblRleHQoOSk7CisgICAg
ICAgIGF1dG8gcmVmZXJyZXJQb2xpY3kgPSBzcWwtPmdldENvbHVtblRleHQoOSk7CiAKICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHNjcmlwdFJlc291cmNlTWFwRGF0YTsKLSAgICAgICAgc3FsLmdl
dENvbHVtbkJsb2JBc1ZlY3RvcigxMCwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhKTsKKyAgICAgICAg
c3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291cmNlTWFwRGF0YSk7CiAg
ICAgICAgIEhhc2hNYXA8VVJMLCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE6OkltcG9ydGVkU2Ny
aXB0PiBzY3JpcHRSZXNvdXJjZU1hcDsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIHNjcmlwdFJlc291cmNlTWFwRGVjb2RlcihzY3JpcHRSZXNvdXJjZU1hcERhdGEuZGF0YSgp
LCBzY3JpcHRSZXNvdXJjZU1hcERhdGEuc2l6ZSgpKTsKQEAgLTU1MCw3ICs1NTAsNyBAQCBTdHJp
bmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAgICB9CiAKICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlSW5mb0RhdGE7Ci0gICAgICAgIHNxbC5n
ZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRpZmljYXRlSW5mb0RhdGEpOworICAgICAgICBz
cWwtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigxMSwgY2VydGlmaWNhdGVJbmZvRGF0YSk7CiAgICAg
ICAgIE9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvOwogCiAgICAgICAg
IFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgY2VydGlmaWNhdGVJbmZvRGVjb2RlcihjZXJ0aWZp
Y2F0ZUluZm9EYXRhLmRhdGEoKSwgY2VydGlmaWNhdGVJbmZvRGF0YS5zaXplKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5k
ZXggZTJjNzcxNWEzMTU2YTBmZjY5NjJhZGVmM2Q5ZmZhYTYwYjFlMDc2Yi4uYThhZWQ3MzE2NTE1
NWUwY2YxZjJiZDM2MmIxMWU4OWY5YjJkZTI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAg
Y29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4aXN0c1F1ZXJ5
ID0gIlNFTEVDVCBFWElTVFMgKFNFTEUKIGNvbnN0ZXhwciBhdXRvIHN0b3JhZ2VBY2Nlc3NFeGlz
dHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQg
PSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPykpIl9zOwogCiAvLyBVUERBVEUgUXVlcmllcwotY29uc3RleHByIGF1dG8gbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VU
IGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0g
PyAiCitjb25zdGV4cHIgYXV0byBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uUXVlcnkgPSAiVVBE
QVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaGFkVXNlckludGVyYWN0aW9uID0gPywgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUgPSA/ICJfcwogICAgICJXSEVSRSByZWdpc3RyYWJsZURvbWFp
biA9ID8iX3M7CiBjb25zdGV4cHIgYXV0byB1cGRhdGVMYXN0U2VlblF1ZXJ5ID0gIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGxhc3RTZWVuID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7CiBjb25zdGV4cHIgYXV0byB1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRRdWVyeSA9ICJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSA/IFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluID0gPyJfczsKQEAgLTEyNyw4ICsxMjcsOCBAQCBjb25zdGV4cHIgYXV0
byBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlNFTEVDVCBpc1ZlcnlQcmV2YWxlbnQg
RlJPTSBPYnNlcgogY29uc3RleHByIGF1dG8gaGFkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29uc3Rl
eHByIGF1dG8gaXNHcmFuZGZhdGhlcmVkUXVlcnkgPSAiU0VMRUNUIGdyYW5kZmF0aGVyZWQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29uc3Rl
eHByIGF1dG8gZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSBBTkQg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPCA/Il9zOwotY29uc3RleHByIGF1dG8gZ2V0
UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lUXVlcnkgPSAiU0VMRUNUICogRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/IjsKLWNvbnN0ZXhwciBhdXRvIGdldE1v
c3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFYKGxhc3RVcGRhdGVk
KSBGUk9NIChTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IGFuZCB0b3BGcmFtZURvbWFpbklEID0gPyIK
K2NvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNFTEVD
VCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsK
K2NvbnN0ZXhwciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBRdWVyeSA9ICJT
RUxFQ1QgTUFYKGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IGFuZCB0
b3BGcmFtZURvbWFpbklEID0gPyJfcwogICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVk
IEZST00gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRvRG9tYWluSUQgPSA/IGFu
ZCBmcm9tRG9tYWluSUQgPSA/IgogICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZS
T00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFp
bklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCiAgICAgIlVOSU9OIEFMTCBTRUxFQ1Qg
bGFzdFVwZGF0ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJl
c291cmNlRG9tYWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7CkBAIC0zODIsOCArMzgy
LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERh
dGFiYXNlKCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzZXRCdXN5VGltZW91dChtX2RhdGFiYXNlLCAiUFJBR01BIGJ1c3lf
dGltZW91dCA9IDUwMDAiKTsKLSAgICBpZiAoc2V0QnVzeVRpbWVvdXQucHJlcGFyZSgpICE9IFNR
TElURV9PSyB8fCBzZXRCdXN5VGltZW91dC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGF1
dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBi
dXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1c3lUaW1lb3V0IHx8IHNldEJ1
c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0QnVzeVRpbWVvdXQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDIyICs0MDEsMjIgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKIE9w
dGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQogewogICAgIFZlY3RvcjxTdHJpbmc+
IG1pc3NpbmdUYWJsZXM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgdGJs
X25hbWU9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
MSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCB0YmxfbmFtZT0/Il9z
KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3
b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JN
aXNzaW5nVGFibGVzSW5TY2hlbWEgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICUi
IFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRhYmxl
IDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBpZiAo
c3RhdGVtZW50LmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgaWYg
KHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewogICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBi
aW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMgbWlz
c2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAg
ICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKICAgICAgICAgfQotICAgICAg
ICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0K
ICAgICBpZiAobWlzc2luZ1RhYmxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CkBAIC00MjYsOCArNDI2LDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWIKIAogdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMo
KQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBlbmFibGVGb3JlaWduS2V5cyhtX2RhdGFiYXNlLCAi
UFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIik7Ci0gICAgaWYgKGVuYWJsZUZvcmVpZ25LZXlzLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgZW5hYmxlRm9yZWlnbktleXMuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgYXV0byBlbmFibGVGb3JlaWduS2V5cyA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiUFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OIl9zKTsKKyAgICBpZiAoIWVuYWJs
ZUZvcmVpZ25LZXlzIHx8IGVuYWJsZUZvcmVpZ25LZXlzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTQzNiwzMSArNDM2LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKIAogVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0VGFibGVT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9t
YXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFibGUn
IikpOwotICAgIGlmIChnZXRUYWJsZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFt
ZT0nIiwgdGFibGVOYW1lLCAiJyBBTkQgdHlwZSA9ICd0YWJsZSciKSk7CisgICAgaWYgKCFnZXRU
YWJsZVN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5k
ZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50
LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2No
ZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdl
dFRhYmxlU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxl
UXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBnZXRJbmRleFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxF
Q1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1lLCAi
JyBBTkQgdHlwZSA9ICdpbmRleCciKSk7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGdldEluZGV4U3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUsICInIEFORCB0eXBlID0gJ2luZGV4
JyIpKTsKKyAgICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIGluZGV4IGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIE9w
dGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gcmF3SW5kZXggPSBTdHJpbmcoZ2V0SW5kZXhT
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgaWYgKGdldEluZGV4U3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3RyaW5nKGdl
dEluZGV4U3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgaWYgKCFyYXdJbmRl
eC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwogICAgIH0KQEAgLTQ4
MCwyMCArNDgwLDIwIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoCiAKIGJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKIHsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciKSk7Ci0g
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCciX3MpOworICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5nVW5pcXVlSW5kaWNlcyBVbmFibGUg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6
ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGlj
ZXMgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3Ig
bWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAg
aWYgKHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291bnQpCisgICAg
aWYgKHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDwgZXhwZWN0ZWRJbmRleENvdW50KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTU1NCw4ICs1NTQsOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRv
TmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVk
VGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKICAgICAgICAgYXV0byBxdWVyeSA9IG1h
a2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpOwot
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgYWx0ZXJUYWJsZShtX2RhdGFiYXNlLCBxdWVyeSk7Ci0g
ICAgICAgIGlmIChhbHRlclRhYmxlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgYWx0ZXJUYWJs
ZS5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBhbHRlclRhYmxlID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAgICAgaWYgKCFhbHRlclRhYmxl
IHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gcmVu
YW1lIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC01NzAsMTYgKzU3MCwxNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiAgICAg
Zm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkp
IHsKICAgICAgICAgYXV0byBxdWVyeSA9IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVF1ZXJ5
KHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IG1pZ3JhdGVUYWJsZURhdGEobV9kYXRh
YmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAobWlncmF0ZVRhYmxlRGF0YS5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LIHx8IG1pZ3JhdGVUYWJsZURhdGEuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIGF1dG8gbWlncmF0ZVRhYmxlRGF0YSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dChxdWVyeSk7CisgICAgICAgIGlmICghbWlncmF0ZVRhYmxlRGF0YSB8fCBtaWdyYXRlVGFibGVE
YXRhLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
aWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIG1pZ3JhdGUgc2NoZW1h
LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBhdXRvIGRyb3BRdWVyeSA9IG1ha2VTdHJpbmcoIkRST1AgVEFC
TEUgXyIsIHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRyb3BUYWJsZVF1ZXJ5KG1f
ZGF0YWJhc2UsIGRyb3BRdWVyeSk7Ci0gICAgICAgIGlmIChkcm9wVGFibGVRdWVyeS5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LIHx8IGRyb3BUYWJsZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICBhdXRvIGRyb3BUYWJsZVF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KGRyb3BRdWVyeSk7CisgICAgICAgIGlmICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxl
UXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gZHJvcCB0ZW1wb3Jh
cnkgdGFibGVzLCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC01OTcsMTcgKzU5NywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKQogCiBWZWN0
b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29sdW1uc0Zv
clRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2luZm8oIiwgdGFi
bGVOYW1lLCAiKSIpKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0YWJsZU5hbWUsICIpIikp
OwogCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYg
KCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdldENvbHVtbnNGcm9tVGFibGVJ
bmZvU3RhdGVtZW50IFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEg
Zm9yIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5z
OwotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
YXV0byBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgd2hpbGUgKHN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0byBuYW1lID0gc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgICAgICBjb2x1bW5zLmFwcGVuZChuYW1lKTsKICAg
ICB9CiAKQEAgLTYyMiwxOCArNjIyLDE4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZShTdHJpbmcmJiB0YWJsCiAgICAg
ICAgIGlmIChleGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgQUREIENPTFVN
TiAiLCBjb2x1bW4pKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIs
IGNvbHVtbikpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgc3RhdGVtZW50LT5y
ZXNldCgpOwogICAgIH0KIH0KIApAQCAtNjQ4LDEzICs2NDgsMTMgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgp
CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbmFtZUNvbHVt
bkluVGFibGUoU3RyaW5nJiYgdGFibGVOYW1lLCBFeGlzdGluZ0NvbHVtbk5hbWUmJiBleGlzdGlu
Z0NvbHVtbk5hbWUsIEV4cGVjdGVkQ29sdW1uTmFtZSYmIGV4cGVjdGVkQ29sdW1uTmFtZSkKIHsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkFM
VEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1u
TmFtZSwgIiBUTyAiLCBleHBlY3RlZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIg
UkVOQU1FIENPTFVNTiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1
bW5OYW1lKSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFk
ZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmVu
YW1lIGNvbHVtbiBpbiB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHN0YXRlbWVudC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBl
cnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CkBAIC03MTIsMTUgKzcxMiwxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogICAgIFN0cmluZyBjdXJy
ZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhp
c3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIg
V0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9tYWlucyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7CisgICAgICAgIGlmICgh
c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0
YWJsZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRl
bGV0ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CiAgICAgICAgICAgICBjbG9z
ZSgpOwogICAgICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoKTsKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0Vt
cHR5KCkpOwpAQCAtNzQ4LDE1ICs3NDgsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKICAgICBtaWdy
YXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKIH0KIAotU1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNjb3BlZFN0
YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVt
ZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIGxvZ1N0cmluZykgY29uc3QK
K1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgQVNDSUlMaXRlcmFsIHF1ZXJ5LCBjb25zdCBTdHJpbmcm
IGxvZ1N0cmluZykgY29uc3QKIHsKICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwg
cXVlcnkpOwotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgICAgIGlm
IChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0
ZW1lbnRPckVycm9yID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7Cisg
ICAgICAgIGlmICghc3RhdGVtZW50T3JFcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OiVzIGZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElD
X0xPR19TVFJJTkcsIHRoaXMsIGxvZ1N0cmluZy5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CiAgICAgICAg
IH0KKyAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50T3JFcnJvci52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOworICAgICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgfQog
ICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IHN0YXRlbWVudC5nZXQo
KSB9OwogfQpAQCAtMTAwNCw5ICsxMDA2LDggQEAgT3B0aW9uYWw8dW5zaWduZWQ+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpc3RyYWIKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LCBk
b21haW5JREZyb21TdHJpbmdRdWVyeSwgImRvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0
YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5z
dHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpkb21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBTdGF0ZW1lbnQ6ICVzLiBFcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIHNjb3BlZFN0YXRlbWVudC0+cXVlcnko
KS51dGY4KCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICBpZiAoIXNj
b3BlZFN0YXRlbWVudCB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpkb21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBA
IC0xMDM5LDIzICsxMDQwLDIzIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNlCiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5MaXN0LCB1bnNpZ25lZCBkb21haW5JRCkKIHsKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
c3RhdGVtZW50LCBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChkb21haW5MaXN0KSwgIiApOyIpKTsK
KyAgICBhdXRvIGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3Qo
ZG9tYWluTGlzdCksICIgKTsiKSk7CiAgICAgCi0gICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluc2VydFJlbGF0aW9u
c2hpcFN0YXRlbWVudC5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICBp
ZiAoIWluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudAorICAgICAgICB8fCBpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewogICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3QgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExB
Q0UiKSkgewotICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LmJpbmREb3Vi
bGUoMiwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPmJpbmRE
b3VibGUoMiwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0g
U1FMSVRFX09LKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMjksMTcg
KzEyMzAsMTcgQEAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQ
YXJ0eURhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXQKIAogICAgIFZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxp
c3Q7CiAgICAgY29uc3QgYXV0byBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
OjpBbGwgPyAiJSIgOiAiMSI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNvcnRlZFN0YXRpc3RpY3Mo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUICIsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29y
dGluZygpKSk7Ci0gICAgaWYgKHNvcnRlZFN0YXRpc3RpY3MucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLmJpbmRUZXh0KDEsIHByZXZhbGVudERvbWFp
bnNCaW5kUGFyYW1ldGVyKQotICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNzLmJpbmRUZXh0KDIs
ICIlIikgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBqb2luU3ViU3RhdGlz
dGljc0ZvclNvcnRpbmcoKSkpOworICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8
fCBzb3J0ZWRTdGF0aXN0aWNzLT5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFt
ZXRlcikKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBT
UUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB0aGly
ZFBhcnR5RGF0YUxpc3Q7CiAgICAgfQotICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGlmIChoYXNCZWVuVGhpcmRQYXJ0eShzb3J0ZWRT
dGF0aXN0aWNzLmdldENvbHVtbkludCgxKSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0
eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUg
KHNvcnRlZFN0YXRpc3RpY3MtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmICho
YXNCZWVuVGhpcmRQYXJ0eShzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMSkpKSB7Cisg
ICAgICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MtPmdl
dENvbHVtbkludCgwKTsKICAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbiA9IFJlZ2lz
dHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmco
Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHRoaXJkUGFydHlEb21haW5JRCkpOwogICAgICAg
ICAgICAgdGhpcmRQYXJ0eURhdGFMaXN0LmFwcGVuZChXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OlRoaXJkUGFydHlEYXRhIHsgdGhpcmRQYXJ0eURvbWFpbiwgZ2V0VGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHRoaXJkUGFydHlEb21haW5JRCwgdGhpcmRQ
YXJ0eURvbWFpbikgfSk7CiAgICAgICAgIH0KQEAgLTEyNjUsOSArMTI2Niw4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVk
Q291bnRGb3JEb21haW5zCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1h
a2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9
IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRv
bWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGRvbWFpbnNUb1Vw
ZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jk
c1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJp
bmcoZG9tYWlucyksICIpIikpOworICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8
IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9yRG9t
YWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTEyODUsMzEgKzEyODUsMzAgQEAgdW5zaWduZWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnMK
ICAgICArK251bWJlck9mUmVjdXJzaXZlQ2FsbHM7CiAKICAgICBTdGRTZXQ8dW5zaWduZWQ+IG5l
d2x5SWRlbnRpZmllZERvbWFpbnM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNvdXJj
ZXMobV9kYXRhYmFzZSwgIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJv
bURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5J
RCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChm
aW5kU3VicmVzb3VyY2VzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFN1
YnJlc291cmNlcy5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgYXV0byBmaW5kU3VicmVzb3VyY2VzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBP
TiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20uZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZl
ZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAoIWZpbmRTdWJyZXNvdXJjZXMg
fHwgZmluZFN1YnJlc291cmNlcy0+YmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElU
RV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlG
aW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICB3aGlsZSAoZmluZFN1YnJlc291cmNlcy5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3Vy
Y2VzLmdldENvbHVtbkludCgwKTsKKyAgICB3aGlsZSAoZmluZFN1YnJlc291cmNlcy0+c3RlcCgp
ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaW50IG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291
cmNlcy0+Z2V0Q29sdW1uSW50KDApOwogICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblBy
ZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWluSUQpOwogICAgICAgICBp
ZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKICAgICAgICAgICAgIG5ld2x5SWRlbnRpZmllZERvbWFp
bnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZmlu
ZFRvcEZyYW1lcyhtX2RhdGFiYXNlLCAiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJv
bS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9J
TiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8g
QU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChmaW5kVG9w
RnJhbWVzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFRvcEZyYW1lcy5i
aW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBmaW5k
VG9wRnJhbWVzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRh
cmdldERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7
CisgICAgaWYgKCFmaW5kVG9wRnJhbWVzCisgICAgICAgIHx8IGZpbmRUb3BGcmFtZXMtPmJpbmRJ
bnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0
UmVkaXJlY3RlZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAg
d2hpbGUgKGZpbmRUb3BGcmFtZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50
IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUg
KGZpbmRUb3BGcmFtZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRUb3BGcmFtZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0byBp
bnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0Rv
bWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAgICBu
ZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7CkBAIC0xMzQxLDIxICsx
MzQwLDIwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
c1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsCiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBTdGRTZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1ZVRvUmVkaXJlY3Q7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJl
c291cmNlRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2Jz
ZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50
ID0gMSJfcyk7Ci0gICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgp
ID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRl
bWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVk
aXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDAp
KTsKKyAgICBhdXRvIHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLnN1YnJlc291cmNlRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
IEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlz
UHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQp
IHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQo
c3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICB9CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWlu
SUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9O
IE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9E
b21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYg
KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAg
ICAgICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JP
VykKLSAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVk
aXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBhdXRvIHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBESVNUSU5D
VCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMu
ZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3Qu
aW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAg
fQogCi0gICAgU1FMaXRlU3RhdGVtZW50IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAx
IFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNl
dDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7Ci0gICAgaWYgKG1hcmtQcmV2YWxl
bnRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gbWFya1ByZXZh
bGVudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQg
SU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRl
cmF0b3I+KHByZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRp
cmVjdC5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgfHwg
bWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0
ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTM2NiwxMiArMTM2NCwxMiBAQCBIYXNo
TWFwPHVuc2lnbmVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVy
eVByZXZhbGVudFJlc291cmNlcwogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxl
bnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7Ci0g
ICAgaWYgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TElURV9PSykgewotICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRl
bWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDApKTsKLSAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMg
dmFsdWUoeyBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxl
RG9tYWluU3RyaW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgxKSkKLSAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJl
c291cmNlTG9hZFByZXZhbGVuY2U6OkxvdworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291
cmNlc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFp
bklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKG5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNl
c1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXMgdmFsdWUoeyBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1l
bnQtPmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50
UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93CiAgICAgICAgICAgICAgICAg
LCAwLCAwLCAwLCAwIH0pOwogICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5LCB2YWx1ZSk7CiAg
ICAgICAgIH0KQEAgLTEzODYsNDMgKzEzODQsNDMgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMK
IAogICAgIGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVt
ZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBD
T1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwg
IikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKLSAgICBpZiAoc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0g
ICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVt
ZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9N
IFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5J
RCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21h
aW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVu
dCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFp
bklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3Vs
dHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0
b0RvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3Vi
cmVzb3VyY2VEb21haW5JRCIpKTsKLSAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
b0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUg
KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENv
bHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNU
IHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5J
RHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlm
IChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAg
d2hpbGUgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5m
aW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkK
LSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQtPnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdl
dENvbHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1h
a2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklE
KSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5J
RCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5J
RCIpKTsKLSAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50
LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Cisg
ICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHN1YmZyYW1lRG9tYWlu
SUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyBXSEVSRSBzdWJmcmFtZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAi
KSBHUk9VUCBCWSBzdWJmcmFtZURvbWFpbklEIikpOworICAgIGlmIChzdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
KTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAg
ICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICBy
ZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb0NvdW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzb3Vy
Y2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBH
Uk9VUCBCWSBzb3VyY2VEb21haW5JRCIpKTsKLSAgICBpZiAodG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hp
bGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVt
bkludCgwKSk7CisgICAgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNvdXJj
ZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApKTsKICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKICAgICAgICAgICAgIGlmIChy
ZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NDks
MTAgKzE1NDcsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwg
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdl
QWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iKTsKLSAgICBpZiAoaW5jcmVtZW50U3Rv
cmFnZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0
b3JhZ2VBY2Nlc3MuYmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICBhdXRvIGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlm
ICghaW5jcmVtZW50U3RvcmFnZUFjY2VzcworICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNj
ZXNzLT5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTE2NDYsOSArMTY0NCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFz
aFNlCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJE
YXRhRm9yRG9tYWlucyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IiwgdGhpcyk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9t
YWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRl
U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlm
ICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTc3NiwxMCArMTc3MywxMCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZShtX2RhdGFiYXNl
LCAiREVMRVRFIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudCBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iKTsKLSAgICBpZiAocmVtb3Zl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLmJpbmRJbnQoMSwgKnRhcmdldFJlc3Vs
dC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGUuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byByZW1vdmVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBG
Uk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnQgV0hFUkUgc291cmNlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVJlZGlyZWN0
c1RvU2luY2VTYW1lU2l0ZQorICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGUtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IGZhaWxlZCB0byBi
aW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xODMyLDEwICsxODI5LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlCiAgICAgfQog
ICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIGZhbHNlLCB7IH0pOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHJlbW92ZVN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iKTsKLSAg
ICBpZiAocmVtb3ZlU3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MuYmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgYXV0byByZW1vdmVTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURv
bWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVN0b3JhZ2VBY2Nl
c3MKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqdGFyZ2V0UmVz
dWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Mt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9B
TExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE5MTgsOSArMTkxNSw4
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNB
c1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFs
ZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5n
ZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVu
ZCgpKSksICIpIikpOwotICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3Qo
V1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJl
Z2luKCksIGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1By
ZXZhbGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CkBAIC0yMzAxLDE2ICsyMjk3LDE1IEBAIENvb2tpZUFjY2Vz
cyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llQWNjZXNzKGNvbnN0
IFN1YlJlc291cmNlCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaXNQcmV2YWxlbnQs
IGhhZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0cmlu
ZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNvb2tpZUFjY2VzcyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgYm9vbCBoYXNOb0VudHJ5ID0g
c3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XOwotICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAh
aGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRV
c2VySW50ZXJhY3Rpb24gPSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEp
ID8gdHJ1ZSA6IGZhbHNlOworICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1c7CisgICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYmICEh
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7CisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxz
ZTsKIAogICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJh
bWVEb21haW4pICYmICFpc1ByZXZhbGVudCkKICAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6
QmFzZWRPbkNvb2tpZVBvbGljeTsKQEAgLTIzMzMsMTQgKzIzMjgsMTQgQEAgU3RvcmFnZUFjY2Vz
c1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNV
c2VyR3JhbnRlZFMKIAogICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9ICpyZXN1
bHQuc2Vjb25kOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIGRvbWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8iKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoMSwgcmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVt
ZW50LmJpbmRJbnQoMiwgZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENPVU5UKCopIEZST00g
U3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyBBTkQg
dG9wTGV2ZWxEb21haW5JRCA9ID8iX3MpOworICAgIGlmICghc3RhdGVtZW50CisgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZmlyc3RQYXJ0eVByaW1hcnlEb21haW5J
RCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpCiAgICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOwogCi0g
ICAgcmV0dXJuICEhc3RhdGVtZW50LmdldENvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9t
cHRXYXNTaG93bjo6WWVzIDogU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKyAgICBy
ZXR1cm4gISFzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6WWVzIDogU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKIH0KIAogVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yKCkgY29uc3QKQEAgLTIzNDgsMTIg
KzIzNDMsMTIgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmQKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHJlZ2lz
dHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBB
TkQgaGFkVXNlckludGVyYWN0aW9uID0gMCJfcyk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hp
bGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hcHBl
bmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1l
bnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3Ry
YWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0
YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHRzOwog
fQpAQCAtMjM2MywxMiArMjM1OCwxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9ja0J1dAogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZh
bGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwotICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0g
MSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAg
IAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJl
c3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0
cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGls
ZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBl
bmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1
bHRzOwogfQpAQCAtMjM3OCwxMiArMjM3MywxMiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zV2l0aFVzZXJJbgog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxl
RG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBo
YWRVc2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVS
RSBoYWRVc2VySW50ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3Jl
YXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgw
KSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yMzkzLDEzICsyMzg4LDEyIEBAIEhh
c2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
ICAgICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gKFNF
TEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVsRG9t
YWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElOTkVS
IEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5kb21h
aW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gZG9t
YWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHN1YkZyYW1lRG9tYWluLCByZWdpc3RyYWJsZURvbWFpbiBG
Uk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJsZURvbWFpbiBhcyBzdWJGcmFtZURvbWFpbiwgcy50b3BM
ZXZlbERvbWFpbklEIGFzIHRvcExldmVsRG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgYXMg
byBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBhcyBzIFdIRVJF
IG8uZG9tYWluSUQgPSBzLmRvbWFpbklEKSBhcyB6IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5z
IE9OIGRvbWFpbklEID0gei50b3BMZXZlbERvbWFpbklEOyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgxKSksIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3
aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5h
ZGQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Z2V0
Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0yNDQ1LDE5ICsy
NDM5LDE4IEBAIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6RG9t
YWluRGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhCiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgVmVjdG9yPERvbWFpbkRhdGE+IHJlc3VsdHM7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdp
c3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRl
cmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQg
Sk9JTiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVS
ZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9t
YWluSUQgPSBkb21haW5JRCJfcyk7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBG
Uk9NIE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09V
TlQoKikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21h
aW5JRCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3MpOworICAgIGlmICgh
c3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCi0gICAgICAg
ICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVE
b21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAsIFdh
bGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQotICAg
ICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCi0gICAg
ICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKLSAgICAg
ICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCg1KSA/IHRydWUgOiBmYWxzZQotICAgICAg
ICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludCg2KSkK
KyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBy
ZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSkKKyAgICAgICAgICAgICwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0
ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSkp
CisgICAgICAgICAgICAsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQtPmdldENv
bHVtbkRvdWJsZSgyKSkKKyAgICAgICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMykg
PyB0cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNCkg
PyB0cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoNSkg
PyB0cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDYpKQogICAgICAgICB9KTsKICAgICB9CiAgICAgCkBAIC0yNDcz
LDExICsyNDY2LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmCiAKICAgICBhdXRvIGxpc3RU
b0NsZWFyID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+Ojpp
dGVyYXRvcj4oZG9tYWluSURzVG9DbGVhci5iZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgp
KSk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZh
dGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOwotICAg
IGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
CisgICAgYXV0byBjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5k
ZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIikiKSk7Cisg
ICAgaWYgKCFjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJHcmFuZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMjYxNywyMyArMjYxMCwyMSBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCgpCiAgICAgc2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMo
KS5wcnVuZUVudHJpZXNEb3duVG87CiAgICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IHJlY29yZHNUb1BydW5lKG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9t
YWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBp
c1ByZXZhbGVudCwgbGFzdFNlZW4gTElNSVQgPyIpOwotICAgIGlmIChyZWNvcmRzVG9QcnVuZS5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlY29yZHNUb1BydW5lLmJpbmRJbnQo
MSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byByZWNvcmRzVG9Q
cnVuZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQs
IGxhc3RTZWVuIExJTUlUID8iX3MpOworICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwgcmVjb3Jk
c1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAgICB3aGls
ZSAocmVjb3Jkc1RvUHJ1bmUuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGVudHJpZXNU
b1BydW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS5nZXRDb2x1bW5JbnQoMCkpOworICAgIHdoaWxl
IChyZWNvcmRzVG9QcnVuZS0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGVudHJpZXNU
b1BydW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS0+Z2V0Q29sdW1uSW50KDApKTsKIAogICAgIGF1
dG8gbGlzdFRvUHJ1bmUgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNp
Z25lZD46Oml0ZXJhdG9yPihlbnRyaWVzVG9QcnVuZS5iZWdpbigpLCBlbnRyaWVzVG9QcnVuZS5l
bmQoKSkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBydW5lQ29tbWFuZChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4g
KCIsIGxpc3RUb1BydW5lLCAiKSIpKTsKLSAgICBpZiAocHJ1bmVDb21tYW5kLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgcHJ1bmVDb21tYW5kLnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgIGF1dG8gcHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJ
TiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOworICAgIGlmICghcHJ1bmVDb21tYW5kIHx8IHBydW5l
Q29tbWFuZC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0y
NzE3LDM1ICsyNzA4LDMzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyCiAKIGJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3Vu
dChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViZnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQobV9kYXRhYmFzZSwgY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVR
dWVyeSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50
KG1fZGF0YWJhc2UsIGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIGNv
dW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5KTsKKyAgICBhdXRvIHN1YkZyYW1l
VW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5KTsKICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVDb3VudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8ucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghc3ViRnJh
bWVVbmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8
ICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBwcmVwYXJl
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1l
Q291bnQuYmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwg
ZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZy
YW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lQ291bnQuYmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFs
dWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8uYmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYmluZEludCgyLCBk
b21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYg
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1l
RG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRv
cEZyYW1lQ291bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+
YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRv
bWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFt
ZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8tPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVl
KCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8u
c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmdldENvbHVt
bkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmdldENvbHVtbklu
dCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uZ2V0Q29sdW1uSW50KDAp
ID09IDEpOworICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmdldENvbHVt
bkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5nZXRDb2x1bW5J
bnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5nZXRDb2x1bW5JbnQo
MCkgPT0gMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVuZEJvb2xlYW4oU3RyaW5nQnVpbGRlciYg
YnVpbGRlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCBmbGFnKQpAQCAtMjgxMiwyNyArMjgw
MSwyNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRT
dWJTdGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxkZXImCiAgICAgaWYgKHF1ZXJ5LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhKG1fZGF0YWJh
c2UsIHF1ZXJ5KTsKKyAgICBhdXRvIGRhdGEgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
cXVlcnkpOwogICAgIAotICAgIGlmIChkYXRhLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgZGF0YS5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKKyAgICBp
ZiAoIWRhdGEgfHwgZGF0YS0+YmluZEludCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNM
aXN0LiBTdGF0ZW1lbnQgZmFpbGVkIHRvIHByZXBhcmUgb3IgYmluZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKGRhdGEuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgaWYgKGRhdGEtPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgICAgIik7CiAgICAgYnVpbGRlci5hcHBlbmQodGFibGVOYW1lKTsKICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjpcbiIpOwogICAgIAotICAgIGF1dG8gcmVzdWx0ID0g
Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEuZ2V0Q29sdW1uSW50KDApKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5nZXRDb2x1bW5J
bnQoMCkpOwogICAgIGFwcGVuZE5leHRFbnRyeShidWlsZGVyLCByZXN1bHQpOwogICAgIAotICAg
IHdoaWxlIChkYXRhLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLmdldENvbHVtbkludCgwKSk7CisgICAgd2hp
bGUgKGRhdGEtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdCA9IGdldERv
bWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICBh
cHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKICAgICB9CiB9CkBAIC0yOTQ2LDI4ICsy
OTM0LDI2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQpCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpCiB7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIE9wZXJhdGluZ0RhdGVzOyJfcyk7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9u
dGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7Ci0gICAgU1FMaXRlU3RhdGVtZW50
IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAqIEZS
T00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERh
eSBERVNDIExJTUlUIDEgT0ZGU0VUID87Il9zKTsKKyAgICBhdXRvIGNvdW50T3BlcmF0aW5nRGF0
ZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIE9wZXJhdGluZ0RhdGVzOyJfcyk7CisgICAgYXV0byBnZXRNb3N0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICog
RlJPTSBPcGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRo
RGF5IERFU0MgTElNSVQgMTsiX3MpOworICAgIGF1dG8gZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICogRlJPTSBPcGVy
YXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0Mg
TElNSVQgMSBPRkZTRVQgPzsiX3MpOwogCi0gICAgaWYgKGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjb3VudE9wZXJhdGluZ0Rh
dGVzU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFjb3VudE9wZXJh
dGluZ0RhdGVzU3RhdGVtZW50IHx8IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVu
dCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX29wZXJhdGluZ0RhdGVzU2l6
ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgIG1f
b3BlcmF0aW5nRGF0ZXNTaXplID0gY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApOwogCi0gICAgaWYgKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWdldE1vc3RS
ZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IHx8IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldEZpcnN0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9t
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRNb3N0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdl
dENvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgxKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgyKSk7CiAKLSAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3Rh
dGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVy
YXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWls
ZWQgZHVyaW5nIHRoZSBjYWxsIHRvIHByZXBhcmUoKSB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORyAiLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3Niwy
NiArMjk2MiwyNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogICAgIGlmIChtX29wZXJhdGluZ0RhdGVz
U2l6ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkKICAgICAgICAgbV9zaG9ydFdp
bmRvd09wZXJhdGluZ0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlm
IChnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0
ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBp
ZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+YmluZEludCgxLCBvcGVyYXRpbmdE
YXRlc1dpbmRvd1Nob3J0IC0gMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4g
dGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9
IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgyKSk7CisgICAgICAg
IG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDIpKTsKICAgICB9CiAKICAgICBpZiAobV9vcGVyYXRpbmdEYXRl
c1NpemUgPD0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkKICAgICAgICAgbV9sb25nV2lu
ZG93T3BlcmF0aW5nRGF0ZSA9IFdURjo6bnVsbG9wdDsKICAgICBlbHNlIHsKLSAgICAgICAgZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5yZXNldCgpOwotICAgICAgICBpZiAoZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LT5yZXNldCgpOworICAgICAgICBpZiAoZ2V0T3BlcmF0aW5n
RGF0ZVdpbmRvd1N0YXRlbWVudC0+YmluZEludCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcg
LSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJh
dGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HICIuIFRoZSBlcnJvciBjb3VsZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmlu
ZCgpIG9yIHN0ZXAoKS4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgICAgICBtX2xvbmdXaW5kb3dPcGVy
YXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50
KDIpKTsKICAgICB9CiB9CiAKQEAgLTMwMTEsMjEgKzI5OTcsMjEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkKIAogICAgIGludCByb3dzVG9QcnVuZSA9IG1fb3BlcmF0aW5nRGF0ZXNTaXplIC0g
b3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nICsgMTsKICAgICBpZiAocm93c1RvUHJ1bmUgPiAwKSB7
Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZ
IHllYXIsIG1vbnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmIChkZWxldGVM
ZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJp
bmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZGVsZXRl
TGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICBhdXRvIGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMg
T1JERVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKKyAgICAgICAgaWYg
KCFkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8
IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCByb3dz
VG9QcnVuZSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0
ZUlmTmVjZXNzYXJ5IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWls
ZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgT1IgSUdOT1JFIElOVE8g
T3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9z
KTsKLSAgICBpZiAoaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgx
LCB0b2RheS55ZWFyKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LmJpbmRJbnQoMiwgdG9kYXkubW9udGgoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgzLCB0b2RheS5tb250
aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGluc2VydE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05P
UkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywg
PywgPzsiX3MpOworICAgIGlmICghaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAg
ICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDEsIHRvZGF5LnllYXIo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PmJpbmRJbnQoMiwgdG9kYXkubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkgaW5zZXJ0T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzA2OSwxNiArMzA1NSwxNiBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9y
VGVzdGluZyhjb25zdAogICAgICAgICBkYXlzQWdvSW5TZWNvbmRzID0gV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSAtIGRheXNUb1N1YnRyYWN0OwogICAgICAgICBh
dXRvIGRhdGVUb0luc2VydCA9IE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHMoZGF5c0Fnb0luU2Vjb25kcykpOwogCi0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgT1Ig
SUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNU
ID8sID8sID87Il9zKTsKLSAgICAgICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0
ZVN0YXRlbWVudC5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIGRh
dGVUb0luc2VydC5tb250aCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgzLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIGluc2VydE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05P
UkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywg
PywgPzsiX3MpOworICAgICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAg
ICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZGF0
ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJp
bmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJl
ZFN0YXRpc3RpY0ZvclRlc3RpbmcgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQg
dG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9Ci0gICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQucmVzZXQo
KTsKKyAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9
CiAKICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKQEAgLTMyMDEsMzYgKzMx
ODcsMzYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoUHJpdmF0ZUMKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5l
dmVyIGJlIGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHByaXZhdGUgY2xpY2sgbWVhc3VyZW1lbnQg
dmFsdWUgaW50byB0aGUgZGF0YWJhc2Ugd2l0aG91dCB2YWxpZCByZXBvcnQgdGltZXMuCiAgICAg
ICAgIEFTU0VSVChzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEgJiYgZGVzdGluYXRpb25F
YXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEpOwogCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gU1FM
aXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudFF1ZXJ5KTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZEludCgxLCAqc291cmNlRGF0YS5zZWNv
bmQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0
dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQuYmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDQsIGF0dHJpYnV0aW9u
VHJpZ2dlckRhdGEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoNSwgcHJpb3JpdHkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJp
bmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZERv
dWJsZSg3LCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJj
ZVVubGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg5LCBzb3VyY2VVbmxpbmth
YmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVt
cHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRU
ZXh0KDEwLCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtl
eUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudChpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAg
ICAgIGlmICghc3RhdGVtZW50CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
KnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5z
b3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+Ymlu
ZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
IHx8IHN0YXRlbWVudC0+YmluZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGlj
aygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNl
VW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6
IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCg5LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4t
PnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8g
c291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0
aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gc3RhdGVtZW50ID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJh
c2UsIGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1l
bnQuYmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25k
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRp
b24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5k
RG91YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoNSwg
c291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2
NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQu
YmluZFRleHQoNiwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDcsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJj
ZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydFVuYXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgIGlmICghc3RhdGVtZW50
CisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9u
RGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xp
Y2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9r
ZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3Ry
aW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIHNv
dXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRV
UkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTM0MzUsMTQgKzM0MjEsMTQgQEAgU3RyaW5nIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphdHRyaWJ1dGlvblRvU3RyaW5nKFdlYkNv
cmU6OlNRTGl0ZVMKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzKG1fZGF0YWJhc2UsICJTRUxFQ1Qg
KFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKLSAgICBpZiAocHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRE
YXRhRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgcHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnREYXRhRXhpc3RzLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgYXV0byBwcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudERhdGFFeGlzdHMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCAoU0VMRUNUIENPVU5UKCopIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQpIGFzIGNudDEsIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQpIGFzIGNudDIiX3MpOworICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnREYXRhRXhpc3RzIHx8IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+c3Rl
cCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01l
YXN1cmVtZW50VG9TdHJpbmcgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpZiAoIXBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5nZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZh
dGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5nZXRDb2x1bW5JbnQoMSkpCisgICAgaWYgKCFw
cml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmdldENvbHVtbkludCgwKSAmJiAhcHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5nZXRDb2x1bW5JbnQoMSkpCiAgICAgICAg
IHJldHVybiAiXG5ObyBzdG9yZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9z
OwogCiAgICAgYXV0byB1bmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9hbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0
aW9uc1N0YXRlbWVudCwgYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvbnNRdWVyeSwgInByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmciX3MpOwpAQCAt
MzU3MywxMSArMzU1OSwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQwogICAgIGlmIChkZXN0
aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckF0dHJpYnV0ZWRTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVE
b21haW5JRCA9ID8iX3MpOwotICAgIGlmIChjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQuYmlu
ZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xl
YXJBdHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWNsZWFyQXR0cmlidXRlZFN0YXRl
bWVudAorICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNv
dXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRl
ZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50
QXR0cmlidXRpb24gZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTM1ODcsMTggKzM1NzMsMTcgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudHMKIHsKICAgICBhdXRvIGV4cGlyZWRUaW1lVG9TZW5kID0gV2FsbFRpbWU6
Om5vdygpIC0gMV9oOwogCi0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRl
bWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Iik7
Ci0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gU1FM
aXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCIpOwor
ICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyJfcyk7CisgICAgYXV0byBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCJfcyk7CiAKLSAgICBpZiAoZWFy
bGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEs
IGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VT
dGF0ZW1lbnQKKyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGly
ZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiAKLSAgICBpZiAoZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2Vu
ZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYg
KCFlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50IHx8IGVhcmxpZXN0VGlt
ZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCmluZGV4IDc0MTFiZDVkMGJhZmY3ZTRm
ZGE1OGIyY2NiNTY2Y2U0OGYyZjBiMzEuLmExZTM1MTUzNDQ2YzU3ZmQzODg1OWE2ZGNmODYyNGIw
MTYwMzA5N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oCkBAIC0xNzUsNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1pc3Np
bmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpOwogICAgIHZvaWQgbWlncmF0ZURhdGFUb05l
d1RhYmxlc0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBkZXN0cm95U3RhdGVtZW50cygpOwotICAg
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBi
b29sIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBTdWJGcmFt
ZURvbWFpbiYpIGNvbnN0OwogICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5PiBnZXRUaGlyZFBhcnR5RGF0
YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModW5zaWduZWQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAppbmRleCA3NjAx
MWUzYTI4ZDVkMTM0OTk4NThkM2JjYzMyYTIwMTA3ZWQzZTFiLi40Yzc4ZmNlOTQ3ODkyODcyZTVk
YTE2NWRlM2Y1YWM5N2RjMmUwZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAK
QEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGdldEl0ZW1zUXVlcnlTdHJpbmdbXSA9ICJTRUxF
Q1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSI7CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFs
IGdldEl0ZW1zUXVlcnlTdHJpbmcgeyAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUi
X3MgfTsKIAogUmVmPExvY2FsU3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
Y3JlYXRlKFN0cmluZyYmIGRhdGFiYXNlUGF0aCwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewpA
QCAtOTksMTAgKzk5LDEwIEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1pZ3JhdGVJdGVt
VGFibGVJZk5lZWRlZCgpCiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJJdGVtVGFi
bGUiKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIik7CisgICAg
YXV0byBxdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZS
T00gSXRlbVRhYmxlIExJTUlUIDEiX3MpOwogCiAgICAgLy8gVGhpcyBxdWVyeSBpc24ndCBldmVy
IGV4ZWN1dGVkLCBpdCdzIGp1c3QgdXNlZCB0byBjaGVjayB0aGUgY29sdW1uIHR5cGUuCi0gICAg
aWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCisgICAgaWYgKHF1ZXJ5ICYmIHF1
ZXJ5LT5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIC8vIENyZWF0ZSBhIG5ldyB0YWJsZSB3aXRoIHRoZSByaWdodCB0eXBlLCBjb3B5IGFsbCB0
aGUgZGF0YSBvdmVyIHRvIGl0IGFuZCB0aGVuIHJlcGxhY2UgdGhlIG5ldyB0YWJsZSB3aXRoIHRo
ZSBvbGQgdGFibGUuCkBAIC0zMDIsMTkgKzMwMiwxOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFi
YXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBpZiAocXVl
cnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfcyk7Cisg
ICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3VudCBudW1i
ZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7Ci0gICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKHF1ZXJ5LT5zdGVwKCkgIT0gU1FM
SVRFX1JPVykgewogICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGluZyBu
dW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiAhcXVlcnkuZ2V0Q29sdW1uSW50KDAp
OworICAgIHJldHVybiAhcXVlcnktPmdldENvbHVtbkludCgwKTsKIH0KIAogdm9pZCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6b3BlbklmRXhpc3RpbmcoKQpAQCAtMzMwLDE0ICszMjksMTUgQEAgdm9p
ZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6b3BlbklmRXhpc3RpbmcoKQogICAgICAgICBzY29wZWRT
dGF0ZW1lbnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CiB9CiAK
LVNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29w
ZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3QKK1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
IExvY2FsU3RvcmFnZURhdGFiYXNlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFNR
TGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25zdAogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGlmICghc3RhdGVtZW50KSB7Ci0g
ICAgICAgIHN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNl
LCBxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICAgICAg
aWYgKHN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgYXV0byBzdGF0
ZW1lbnRPckVycm9yID0gbV9kYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7Cisg
ICAgICAgIGlmICghc3RhdGVtZW50T3JFcnJvcikKICAgICAgICAgICAgIHJldHVybiBTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IH07CisgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVu
dE9yRXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0
YWJhc2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNl
LmgKaW5kZXggZGI4YWQ5ODNlZWFkODBmOGM1ZTkwYjZmMDFhMmY2MzE0NjUxNzczMi4uNDYwMzZk
NjU3ZWJlOTc0NDhlMTJjMGRhOGQ4NTQ3YjhkNGY5MWVmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1pZ3JhdGVJdGVt
VGFibGVJZk5lZWRlZCgpOwogICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5KCkgY29uc3Q7CiAKLSAg
ICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQo
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5KSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4mLCBBU0NJSUxpdGVyYWwgcXVlcnkpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VQ
YXRoOwogICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCmlu
ZGV4IDMzOTYwMmE0OWYxMTQzZDlmZmU0NjMwNWFiMWFkOTlhNjg3NGNiNjMuLjY1MDg4NmVlNTY2
MTYyMGI4ODMwYTYzNTA2Yjk3ZjM0NDBkN2Y3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcApAQCAtNjYsNyArNjYsOCBAQCBJY29u
RGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0YWJhc2VX
cml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYiwg
IlNFTEVDVCB2YWx1ZSBGUk9NIEljb25EYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ1ZlcnNpb24n
OyIpLmdldENvbHVtbkludCgwKTsKKyAgICAgICAgYXV0byB2ZXJzaW9uU3RhdGVtZW50ID0gbV9k
Yi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJhc2VJbmZvIFdI
RVJFIGtleSA9ICdWZXJzaW9uJzsiX3MpOworICAgICAgICBhdXRvIGRhdGFiYXNlVmVyc2lvbk51
bWJlciA9IHZlcnNpb25TdGF0ZW1lbnQgPyB2ZXJzaW9uU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCkgOiAwOwogICAgICAgICBpZiAoZGF0YWJhc2VWZXJzaW9uTnVtYmVyID4gY3VycmVudERhdGFi
YXNlVmVyc2lvbikgewogICAgICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkRhdGFiYXNlIHZl
cnNpb24gbnVtYmVyICVkIGlzIGdyZWF0ZXIgdGhhbiBvdXIgY3VycmVudCB2ZXJzaW9uIG51bWJl
ciAlZCAtIGNsb3NpbmcgdGhlIGRhdGFiYXNlIHRvIHByZXZlbnQgb3ZlcndyaXRpbmcgbmV3ZXIg
dmVyc2lvbnMiLAogICAgICAgICAgICAgICAgIGRhdGFiYXNlVmVyc2lvbk51bWJlciwgY3VycmVu
dERhdGFiYXNlVmVyc2lvbik7CkBAIC04NCw3ICs4NSw3IEBAIEljb25EYXRhYmFzZTo6SWNvbkRh
dGFiYXNlKGNvbnN0IFN0cmluZyYgcGF0aCwgQWxsb3dEYXRhYmFzZVdyaXRlIGFsbG93RGF0YWJh
c2VXCiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWR1Y2Ugc3FsaXRlIFJBTSBjYWNoZSBzaXpl
IGZyb20gZGVmYXVsdCAyMDAwIHBhZ2VzICh+MS41a0IgcGVyIHBhZ2UpLiAzTUIgb2YgY2FjaGUg
Zm9yIGljb24gZGF0YWJhc2UgaXMgb3ZlcmtpbGwuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCht
X2RiLCAiUFJBR01BIGNhY2hlX3NpemUgPSAyMDA7IikuZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAg
ICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIGNhY2hlX3NpemUgPSAyMDA7Il9zKTsKIAog
ICAgICAgICBpZiAoYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVz
KSB7CiAgICAgICAgICAgICBtX3BydW5lVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVy
PEljb25EYXRhYmFzZT4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkljb25EYXRhYmFzZTo6
cHJ1bmVUaW1lckZpcmVkKTsKQEAgLTE3NSwxNyArMTc2LDE3IEBAIHZvaWQgSWNvbkRhdGFiYXNl
Ojpwb3B1bGF0ZVBhZ2VVUkxUb0ljb25VUkxNYXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBT
dHJpbmcgaW1wb3J0UXVlcnkgPSBtYWtlU3RyaW5nKCJTRUxFQ1QgUGFnZVVSTC51cmwsIEljb25J
bmZvLnVybCwgSWNvbkluZm8uc3RhbXAgRlJPTSBQYWdlVVJMIElOTkVSIEpPSU4gSWNvbkluZm8g
T04gUGFnZVVSTC5pY29uSUQ9SWNvbkluZm8uaWNvbklEIFdIRVJFIEljb25JbmZvLnN0YW1wID4g
IiwgZmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5vdFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNl
Y29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSwgJzsnKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYiwgaW1wb3J0UXVlcnkpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKSB7CisgICAgYXV0byBxdWVyeSA9IG1fZGIucHJlcGFyZVN0YXRlbWVudChpbXBvcnRR
dWVyeSk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIGljb24gdXJsIGltcG9ydCBxdWVyeSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgYXV0byByZXN1bHQgPSBxdWVy
eS0+c3RlcCgpOwogICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX3BhZ2VVUkxUb0ljb25VUkxN
YXBMb2NrKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgbV9w
YWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRD
b2x1bW5UZXh0KDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgICAgICBt
X3BhZ2VVUkxUb0ljb25VUkxNYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS0+
Z2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CiAgICAg
fQogCiAgICAgc3RhcnRQcnVuZVRpbWVyKCk7CkBAIC0yMTQsMTIgKzIxNSwxMiBAQCB2b2lkIElj
b25EYXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKCkKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7
CiAKICAgICBpZiAoIW1fcHJ1bmVJY29uc1N0YXRlbWVudCkgewotICAgICAgICBtX3BydW5lSWNv
bnNTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBG
Uk9NIEljb25JbmZvIFdIRVJFIHN0YW1wIDw9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fcHJ1bmVJ
Y29uc1N0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHBy
dW5lSWNvbnNTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFwcnVuZUlj
b25zU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1l
bnQgcHJ1bmVJY29ucyBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVu
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9w
cnVuZUljb25zU3RhdGVtZW50ID0gcHJ1bmVJY29uc1N0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgxLCBmbG9vcigoV2FsbFRpbWU6Om5vdygpIC0gbm90VXNlZEljb25FeHBpcmF0aW9uVGlt
ZSkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpKSAhPSBTUUxJVEVfT0spIHsKQEAgLTIz
MCw4ICsyMzEsOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6cHJ1bmVUaW1lckZpcmVkKCkKICAgICBT
UUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOwogICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfRE9O
RSkgewotICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJY29uRGF0YSBX
SEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyIpOwotICAg
ICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJFIGljb25J
RCBOT1QgSU4gKFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Iik7CisgICAgICAgIG1fZGIu
ZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIEljb25EYXRhIFdIRVJFIGljb25JRCBOT1QgSU4g
KFNFTEVDVCBpY29uSUQgRlJPTSBJY29uSW5mbyk7Il9zKTsKKyAgICAgICAgbV9kYi5leGVjdXRl
Q29tbWFuZCgiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1Qg
aWNvbklEIEZST00gSWNvbkluZm8pOyJfcyk7CiAgICAgfQogICAgIG1fcHJ1bmVJY29uc1N0YXRl
bWVudC0+cmVzZXQoKTsKIApAQCAtMjg1LDEyICsyODYsMTIgQEAgT3B0aW9uYWw8aW50NjRfdD4g
SWNvbkRhdGFiYXNlOjppY29uSURGb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgYm9v
bCYgZXgKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7CiAKICAgICBpZiAoIW1faWNvbklERm9y
SWNvblVSTFN0YXRlbWVudCkgewotICAgICAgICBtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQg
PSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIlNFTEVDVCBJY29uSW5mby5pY29u
SUQsIEljb25JbmZvLnN0YW1wIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8udXJsID0gKD8p
OyIpOwotICAgICAgICBpZiAobV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gaWNvbklERm9ySWNvblVSTFN0YXRlbWVudCA9
IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIlNFTEVDVCBJY29uSW5mby5pY29uSUQsIEljb25J
bmZvLnN0YW1wIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8udXJsID0gKD8pOyJfcyk7Cisg
ICAgICAgIGlmICghaWNvbklERm9ySWNvblVSTFN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGljb25JREZvckljb25VUkwgZmFpbGVkIik7Ci0g
ICAgICAgICAgICBtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQorICAgICAgICBtX2ljb25JREZv
ckljb25VUkxTdGF0ZW1lbnQgPSBpY29uSURGb3JJY29uVVJMU3RhdGVtZW50LnZhbHVlKCkubW92
ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1faWNvbklERm9ySWNvblVSTFN0YXRl
bWVudC0+YmluZFRleHQoMSwgaWNvblVSTCkgIT0gU1FMSVRFX09LKSB7CkBAIC0zMTUsMTIgKzMx
NiwxMiBAQCBib29sIEljb25EYXRhYmFzZTo6c2V0SWNvbklERm9yUGFnZVVSTChpbnQ2NF90IGlj
b25JRCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VX
cml0ZSA9PSBBbGxvd0RhdGFiYXNlV3JpdGU6Olllcyk7CiAKICAgICBpZiAoIW1fc2V0SWNvbklE
Rm9yUGFnZVVSTFN0YXRlbWVudCkgewotICAgICAgICBtX3NldEljb25JREZvclBhZ2VVUkxTdGF0
ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJTlRPIFBh
Z2VVUkwgKHVybCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Iik7Ci0gICAgICAgIGlmIChtX3Nl
dEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgYXV0byBzZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVh
cFN0YXRlbWVudCgiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29uSUQpIFZBTFVFUyAoKD8p
LCA/KTsiX3MpOworICAgICAgICBpZiAoIXNldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBzZXRJY29uSURGb3JQ
YWdlVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVt
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAg
ICAgICBtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQgPSBzZXRJY29uSURGb3JQYWdlVVJM
U3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1f
c2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC0+YmluZFRleHQoMSwgcGFnZVVSTCkgIT0gU1FM
SVRFX09LCkBAIC0zNDIsMTIgKzM0MywxMiBAQCBWZWN0b3I8Y2hhcj4gSWNvbkRhdGFiYXNlOjpp
Y29uRGF0YShpbnQ2NF90IGljb25JRCkKICAgICBBU1NFUlQobV9kYi5pc09wZW4oKSk7CiAKICAg
ICBpZiAoIW1faWNvbkRhdGFTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVu
dCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAiU0VMRUNUIEljb25EYXRhLmRh
dGEgRlJPTSBJY29uRGF0YSBXSEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAg
IGlmIChtX2ljb25EYXRhU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIGF1dG8gaWNvbkRhdGFTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJT
RUxFQ1QgSWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9
ICg/KTsiX3MpOworICAgICAgICBpZiAoIWljb25EYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgaWNvbkRhdGEgZmFpbGVkIik7Ci0gICAg
ICAgICAgICBtX2ljb25EYXRhU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0KKyAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9IGljb25EYXRh
U3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1f
aWNvbkRhdGFTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBpY29uSUQpICE9IFNRTElURV9PSykgewpA
QCAtMzcwLDIwICszNzEsMjAgQEAgT3B0aW9uYWw8aW50NjRfdD4gSWNvbkRhdGFiYXNlOjphZGRJ
Y29uKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgVmVjdG9yPGNoYXIKICAgICBBU1NFUlQo
bV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAg
aWYgKCFtX2FkZEljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9hZGRJY29uU3RhdGVtZW50ID0g
bWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJJTlNFUlQgSU5UTyBJY29uSW5mbyAo
dXJsLCBzdGFtcCkgVkFMVUVTICg/LCAwKTsiKTsKLSAgICAgICAgaWYgKG1fYWRkSWNvblN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGFkZEljb25TdGF0
ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29uSW5mbyAo
dXJsLCBzdGFtcCkgVkFMVUVTICg/LCAwKTsiX3MpOworICAgICAgICBpZiAoIWFkZEljb25TdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBhZGRJ
Y29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9hZGRJY29uU3RhdGVtZW50ID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9h
ZGRJY29uU3RhdGVtZW50ID0gYWRkSWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0
cigpOwogICAgIH0KICAgICBpZiAoIW1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQpIHsKLSAgICAgICAg
bV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2Ri
LCAiSU5TRVJUIElOVE8gSWNvbkRhdGEgKGljb25JRCwgZGF0YSkgVkFMVUVTICg/LCA/KTsiKTsK
LSAgICAgICAgaWYgKG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgYXV0byBhZGRJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhl
YXBTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVFUyAo
PywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFhZGRJY29uRGF0YVN0YXRlbWVudCkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGFkZEljb25EYXRhIGZhaWxlZCIp
OwotICAgICAgICAgICAgbV9hZGRJY29uRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvbkRh
dGFTdGF0ZW1lbnQgPSBhZGRJY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0
cigpOwogICAgIH0KIAogICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGlj
b25VUkwpICE9IFNRTElURV9PSykgewpAQCAtNDEzLDEyICs0MTQsMTIgQEAgdm9pZCBJY29uRGF0
YWJhc2U6OnVwZGF0ZUljb25UaW1lc3RhbXAoaW50NjRfdCBpY29uSUQsIGludDY0X3QgdGltZXN0
YW1wKQogICAgIEFTU0VSVChtX2FsbG93RGF0YWJhc2VXcml0ZSA9PSBBbGxvd0RhdGFiYXNlV3Jp
dGU6Olllcyk7CiAKICAgICBpZiAoIW1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCkgewot
ICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYiwgIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAgPSA/IFdIRVJFIGlj
b25JRCA9ID87Iik7Ci0gICAgICAgIGlmIChtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQt
PnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byB1cGRhdGVJY29uVGltZXN0
YW1wU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiVVBEQVRFIEljb25JbmZv
IFNFVCBzdGFtcCA9ID8gV0hFUkUgaWNvbklEID0gPzsiX3MpOworICAgICAgICBpZiAoIXVwZGF0
ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFy
aW5nIHN0YXRlbWVudCB1cGRhdGVJY29uVGltZXN0YW1wIGZhaWxlZCIpOwotICAgICAgICAgICAg
bV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQorICAgICAgICBtX3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQg
PSB1cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7
CiAgICAgfQogCiAgICAgaWYgKG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC0+YmluZElu
dDY0KDEsIHRpbWVzdGFtcCkgIT0gU1FMSVRFX09LIHx8IG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0
YXRlbWVudC0+YmluZEludDY0KDIsIGljb25JRCkgIT0gU1FMSVRFX09LKSB7CkBAIC00MzcsMjgg
KzQzOCwyOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6ZGVsZXRlSWNvbihpbnQ2NF90IGljb25JRCkK
ICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZ
ZXMpOwogCiAgICAgaWYgKCFtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCkgewotICAg
ICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSBQYWdlVVJMLmljb25J
RCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlUGFnZVVSTHNG
b3JJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00g
UGFnZVVSTCBXSEVSRSBQYWdlVVJMLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRl
bGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQ
cmVwYXJpbmcgc3RhdGVtZW50IGRlbGV0ZVBhZ2VVUkxzRm9ySWNvbiBmYWlsZWQiKTsKLSAgICAg
ICAgICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNv
blN0YXRlbWVudCA9IGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudC52YWx1ZSgpLm1vdmVU
b1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBpZiAoIW1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQp
IHsKLSAgICAgICAgbV9kZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNv
bklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVJY29uRGF0YVN0YXRlbWVudC0+cHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZUljb25EYXRhU3RhdGVt
ZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkRhdGEgV0hF
UkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlSWNvbkRh
dGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVu
dCBkZWxldGVJY29uIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVJY29uRGF0YVN0YXRl
bWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAg
bV9kZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IGRlbGV0ZUljb25EYXRhU3RhdGVtZW50LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogICAgIGlmICghbV9kZWxldGVJY29uU3RhdGVt
ZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX2RiLCAiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgSWNvbkluZm8uaWNv
bklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9kZWxldGVJY29uU3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlSWNvblN0YXRlbWVudCA9IG1f
ZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25J
bmZvLmljb25JRCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWRlbGV0ZUljb25TdGF0ZW1lbnQp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBkZWxldGVJY29u
IGZhaWxlZCIpOwotICAgICAgICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX2RlbGV0ZUljb25TdGF0
ZW1lbnQgPSBkZWxldGVJY29uU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAg
ICAgfQogCiAgICAgaWYgKG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uU3RhdGVtZW50LT5iaW5kSW50
NjQoMSwgaWNvbklEKSAhPSBTUUxJVEVfT0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9y
YWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKaW5kZXggY2U1YzI5YmFhNTgwNWNhNDJmNDhlZjA1MGI4
MzJkMGNkNWNjZTExYy4uY2FlMDgyZjEzZGNkMzY4YzQ4MTk1YmUzMTFmMjBhNWI2NjQ0OGZhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5j
cHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
QEAgLTI3OCw5ICsyNzgsOSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJs
ZUlmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1J
VCAxIik7CisgICAgICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKICAgICAgICAgLy8gdGhp
cyBxdWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLgotICAgICAgICBpZiAocXVlcnkuaXNDb2x1bW5E
ZWNsYXJlZEFzQmxvYigwKSkKKyAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LT5pc0NvbHVtbkRl
Y2xhcmVkQXNCbG9iKDApKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI2LDgg
KzMyNiw4IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAi
U0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiKTsKLSAgICBpZiAocXVlcnkucHJlcGFy
ZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAo
IXF1ZXJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9t
IEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzM1LDEwICszMzUsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnBlcmZvcm1JbXBvcnQoKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbU1h
cDsKIAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgaW50IHJlc3VsdCA9IHF1
ZXJ5LT5zdGVwKCk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAg
IGl0ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQoMCksIHF1ZXJ5LmdldENvbHVtbkJsb2JB
c1N0cmluZygxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaXRl
bU1hcC5zZXQocXVlcnktPmdldENvbHVtblRleHQoMCksIHF1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNT
dHJpbmcoMSkpOworICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTQxMiwyNyArNDEyLDI3IEBAIHZvaWQg
U3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGl0ZW1zCiAKICAgICAvLyBJZiB0aGUgY2xlYXIgZmxhZyBpcyBzZXQsIHRo
ZW4gd2UgY2xlYXIgYWxsIGl0ZW1zIG91dCBiZWZvcmUgd2Ugd3JpdGUgYW55IG5ldyBvbmVzIGlu
LgogICAgIGlmIChjbGVhckl0ZW1zKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhciht
X2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7Ci0gICAgICAgIGlmIChjbGVhci5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gY2xlYXIgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJfcyk7CisgICAgICAgIGlm
ICghY2xlYXIpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xl
YXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSBj
bGVhci5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBjbGVhci0+c3RlcCgpOwogICAgICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAl
aSIsIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJdGVtVGFi
bGUgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgIGF1dG8gaW5zZXJ0ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnQpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0g
Y2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmUobV9kYXRhYmFzZSwgIkRFTEVU
RSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOwotICAgIGlmIChyZW1vdmUucHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcmVtb3ZlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3MpOworICAgIGlmICgh
cmVtb3ZlKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgZGVsZXRlIHN0
YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC00NDMsMjEgKzQ0MywyMSBAQCB2b2lkIFN0b3JhZ2VBcmVh
U3luYzo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBpdGVtcwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpdGVtcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgLy8gQmFzZWQgb24gdGhlIG51bGwtbmVzcyBvZiB0aGUgc2Vjb25k
IGFyZ3VtZW50LCBkZWNpZGUgd2hldGhlciB0aGlzIGlzIGFuIGluc2VydCBvciBhIGRlbGV0ZS4K
LSAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJl
bW92ZSA6IGluc2VydDsKKyAgICAgICAgYXV0byYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkg
PyByZW1vdmUgOiBpbnNlcnQ7CiAKLSAgICAgICAgcXVlcnkuYmluZFRleHQoMSwgaXQtPmtleSk7
CisgICAgICAgIHF1ZXJ5LT5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0
aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNv
IGJpbmQgaXQgYXMgdGhlIHZhbHVlLgogICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CisgICAgICAgICAgICBx
dWVyeS0+YmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKIAotICAgICAgICBpbnQgcmVzdWx0ID0gcXVl
cnkuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJl
c3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHF1ZXJ5LnJl
c2V0KCk7CisgICAgICAgIHF1ZXJ5LT5yZXNldCgpOwogICAgIH0KICAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKIH0KQEAgLTQ5OSwzMSArNDk5LDMzIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpk
ZWxldGVFbXB0eURhdGFiYXNlKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VM
RUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291bnQgbnVtYmVy
IG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgYXV0byBjb3VudCA9IFsmXSB7CisgICAgICAgIGF1dG8gcXVlcnkgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJs
ZSJfcyk7CisgICAgICAgIGlmICghcXVlcnkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFn
ZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJl
c3VsdCA9IHF1ZXJ5LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVy
IG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0KIAotICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExPR19FUlJPUigiTm8gcmVz
dWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwg
c3RvcmFnZSIpOworICAgICAgICByZXR1cm4gcXVlcnktPmdldENvbHVtbkludCgwKTsKKyAgICB9
KCk7CisgICAgaWYgKGNvdW50KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgaW50IGNv
dW50ID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOwotICAgIGlmICghY291bnQpIHsKLSAgICAgICAg
cXVlcnkuZmluYWxpemUoKTsKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICBp
ZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFtkYXRhYmFzZUlkZW50aWZpZXIgPSBtX2RhdGFiYXNlSWRlbnRpZmll
ci5pc29sYXRlZENvcHkoKV0gewotICAgICAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFj
a2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGRhdGFi
YXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFi
YXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
ZGF0YWJhc2VGaWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
ZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIH0KKyAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgaWYgKFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuaXNBY3RpdmUoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtkYXRhYmFzZUlkZW50aWZpZXIgPSBtX2RhdGFiYXNlSWRlbnRpZmllci5pc29sYXRlZENvcHko
KV0geworICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW5X
aXRoSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpOworICAgICAgICB9KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1
bGxEYXRhYmFzZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQorICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmls
ZW5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAppbmRleCBkMzVkNWMzODUwMDNjYWNkNDZmNzAw
ZDdhZGU2ZTIwYTI5ZmZlZGI5Li4zZWNjZmE3NWQyMDI2ZTVkMzBkOTdiMDAzNmUzZmUyMzdkNGI3
NzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAKQEAgLTE4OSw4ICsxODksOCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMoKQogICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewogICAg
ICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rp
b25Db3VudGVyOwogCi0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgICAgICAgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9y
aWdpbnMiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xOTksOCArMTk5LDggQEAgdm9pZCBTdG9y
YWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja09yaWdpbnMobV9v
cmlnaW5TZXRNdXRleCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNl
dC5hZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkuaXNvbGF0ZWRDb3B5KCkpOworICAgICAg
ICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9S
T1cpCisgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQtPmdldENv
bHVtblRleHQoMCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC0zMTYsMTYgKzMx
NiwxNiBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMg
KD8sID8pIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVu
dGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAgICAgCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwg
b3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhYmFzZUZp
bGUpOwogICAgIAotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
IGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2lu
SWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAKICAgICB7CkBAIC00MDQsMjMgKzQwNCwyMyBA
QCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCiAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9y
aWdpbnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG9y
aWdpbiwgcGF0aCBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAogICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGlmICghY2FuRGVs
ZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKKyAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmICghY2Fu
RGVsZXRlT3JpZ2luKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDEpKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzdGF0ZW1lbnQt
PmdldENvbHVtblRleHQoMSkpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fY2xpZW50TXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKSk7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luKHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC00NDEsMTIgKzQ0MSwxMiBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlQWxsT3JpZ2lucygpCiAgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwogICAg
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIE9yaWdpbnMiKTsKLSAgICAgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gZGVsZXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgaWYgKCFk
ZWxldGVTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBh
cmUgZGVsZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Cisg
ICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5z
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUxOSwxMyArNTE5LDEzIEBA
IHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMg
d2hlcmUgb3JpZ2luPT8iKTsKLSAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIGRlbGV0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyJfcyk7CisgICAg
aWYgKCFkZWxldGVTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJl
cGFyZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRlbGV0ZVN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVj
dXRlQ29tbWFuZCgpKSB7CisgICAgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5J
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKSkg
ewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIG9yaWdp
biAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC02MTQsMTcgKzYxNCwxNyBAQCBTdHJpbmcgU3RvcmFnZVRyYWNrZXI6OmRh
dGFiYXNlUGF0aEZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiAKICAg
ICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50
ZXI7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgaWYgKHBhdGhTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcGF0aFN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdI
RVJFIG9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIXBhdGhTdGF0ZW1lbnQpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2luICcl
cyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogICAgIH0KLSAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50
aWZpZXIpOwotICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKKyAgICBwYXRo
U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gcGF0aFN0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICByZXR1cm4gcGF0aFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgw
KTsKIH0KICAgICAKIHVpbnQ2NF90IFN0b3JhZ2VUcmFja2VyOjpkaXNrVXNhZ2VGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA2MGUyODE2NDY1MmE2YjI1YWM0NjJiOWFlOWYyMDhiYjZiMDIx
MTA1Li43NjkxZjQwNGY0YzU1YzdkMTlhOGQ5YjI3ZmU3MzQ5MWY0N2YyMTJmIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBhcmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgY29kZSBiYXNlIG5vdyB0aGF0IHRoZSBTUUxpdGVEYXRhYmFzZSAmIFNRTGl0ZVN0YXRlbWVu
dCBBUEkgaGFzIGNoYW5nZWQuCisgICAgICAgIEFsc28gdXNlIG1vcmUgQVNDSUlMaXRlcmFscy4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRy
YWNrZXJUZXN0Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YWRkVG9EYXRhYmFzZXNUYWJs
ZSk6CisKIDIwMjEtMDUtMTQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgog
CiAgICAgICAgIFtydW4tYXBpLXRlc3RzXSBVc2UgUHl0aG9uIDMgKFBhcnQgMikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNr
ZXJUZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFi
YXNlVHJhY2tlclRlc3QubW0KaW5kZXggZjgyMGNmZWEyMGNkYzhlZjFmM2VlYTFkYTkzOGEwNGNk
OWJmZTZhZi4uNzU3ZWMyNDI1ODUxMWE3ZjkxMjExYWFjY2ExNDUxZjNhYmRlMmIxMSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0RhdGFiYXNlVHJh
Y2tlclRlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L0RhdGFiYXNlVHJhY2tlclRlc3QubW0KQEAgLTY1LDEyICs2NSwxMiBAQCBzdGF0aWMgdm9pZCBh
ZGRUb0RhdGFiYXNlc1RhYmxlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBjb25zdCBTZWN1
cml0eU9yaWdpbgogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwogICAgIGRhdGFiYXNlLm9w
ZW4oZGF0YWJhc2VQYXRoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBhZGREYXRhYmFzZVN0YXRl
bWVudChkYXRhYmFzZSwgIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1lLCBwYXRo
KSBWQUxVRVMgKD8sID8sID8pOyIpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LnByZXBhcmUo
KTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJ
ZGVudGlmaWVyKCkpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIG5ld0Rh
dGFiYXNlTmFtZSk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMywgbmV3RGF0
YWJhc2VQYXRoKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOwor
ICAgIGlmIChhdXRvIGFkZERhdGFiYXNlU3RhdGVtZW50ID0gZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAo
PywgPywgPyk7Il9zKSkgeworICAgICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0
ZW1lbnQtPmJpbmRUZXh0KDIsIG5ld0RhdGFiYXNlTmFtZSk7CisgICAgICAgIGFkZERhdGFiYXNl
U3RhdGVtZW50LT5iaW5kVGV4dCgzLCBuZXdEYXRhYmFzZVBhdGgpOworICAgICAgICBhZGREYXRh
YmFzZVN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICB9CiAKICAgICBkYXRhYmFzZS5j
bG9zZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428672</attachid>
            <date>2021-05-14 15:26:04 -0700</date>
            <delta_ts>2021-05-16 10:18:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225791-20210514152603.patch</filename>
            <type>text/plain</type>
            <size>291696</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ2ZDkwNDUwZTRkOTljNmIwOTEzODA1
NjAzMTU4NjE0Mjk0MTMwMTUuLmU1NGZiYTBkZDA2NTM5YTEzMDIxOGIzNjYwNWFjMDE4ZDAyYjdm
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1l
bnQgY3JlYXRpb24gYW5kIHByZXBhcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbGxvdyBjb25zdHJ1Y3RpbmcgYSBVbmlxdWVSZWY8PiBmcm9t
IGEgQysrIHJlZmVyZW5jZS4gc3RkOjp1bmlxdWVfcHRyPD4oKSBjYW4gYmUgY29uc3RydWN0ZWQK
KyAgICAgICAgdXNpbmcgYSByYXcgcG9pbnRlciBhbmQgd2UgY2FuIGNvbnN0cnVjdCBhIFVuaXF1
ZVJlZjw+IGZyb20gYSBzdGQ6OnVuaXF1ZV9wdHI8PigpIHNvIEkgc2VlCisgICAgICAgIG5vIHJl
YXNvbiBub3QgdG8gYWxsb3cgdGhhdC4KKworICAgICAgICBUaGUgcmVhc29uIEkgbmVlZGVkIHRo
aXMgaXMgdGhhdCBJIHdhbnQgdG8gcHJldmVudCBjYWxsIHNpdGVzIGZyb20gYWxsb2NhdGluZyBT
UUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBTUUxpdGVE
YXRhYmFzZS4gQXMgYSByZXN1bHQsIEkgbWFkZSB0aGUgU1FMaXRlU3RhdGVtZW50IGNvbnN0cnVj
dG9yCisgICAgICAgIHByaXZhdGUgYW5kIG1hcmtlZCBTUUxpdGVEYXRhYmFzZSBhcyBhIGZyaWVu
ZCBjbGFzcy4gU1FMaXRlRGF0YWJhc2UgaGFzIHRvIGhlYXAtYWxsb2NhdGUKKyAgICAgICAgYSBT
UUxpdGVTdGF0ZW1lbnQgdmlhIG5ldyBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBVbmlxdWVSZWY8PiBm
b3IgaXQuIFNRTGl0ZURhdGFiYXNlIGNhbm5vdCB1c2UKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigp
IGJlY2F1c2UgdGhlIFNRTGl0ZVN0YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBwcml2YXRlLiBJIGFs
c28gY2Fubm90IG1hcmsKKyAgICAgICAgbWFrZVVuaXF1ZVJlZigpIGFzIGEgZnJpZW5kIGZ1bmN0
aW9uIG9mIFNRTGl0ZVN0YXRlbWVudCBvciBhbnlib2R5IGNvdWxkIGhlYXAgYWxsb2NhdGUgYQor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgdmlhIG1ha2VVbmlxdWVSZWYgKG5vdCBqdXN0IHRoZSBT
UUxpdGVEYXRhYmFzZSkuCisKKyAgICAgICAgKiB3dGYvVW5pcXVlUmVmLmg6CisgICAgICAgIChX
VEY6OlVuaXF1ZVJlZjo6VW5pcXVlUmVmKToKKwogMjAyMS0wNS0xNCAgRGV2aW4gUm91c3NvICA8
ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgUHJvbW90ZSBgLVtXS1dlYlZpZXcgX3BhZ2VF
eHRlbmRlZEJhY2tncm91bmRDb2xvcl1gIFNQSSB0byBgLVtXS1dlYlZpZXcgdW5kZXJQYWdlQmFj
a2dyb3VuZENvbG9yXWAgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YwZWY1YWI0NDQyYWIzYWRjMDk5ZWM3
NDZlMjQ4ZjYxY2VjZWU5MC4uYWVlY2NlNTUyMmU1MTUzODIzZGEzMTQ1ZWZjMzNhODM0ZjgwODUy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0
ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0
YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb246CisgICAgICAgIC0gVGhlIFNRTGl0ZVN0
YXRlbWVudCBjb25zdHJ1Y3RvciBpcyBub3cgcHJpdmF0ZSBzbyB0aGF0IHdlIG5ldmVyIGhhdmUg
YQorICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCB0aGF0IGhhcyBub3QgYmVlbiAicHJlcGFyZWQi
LiBPbmx5IHRoZSBTUUxpdGVEYXRhYmFzZQorICAgICAgICAgIGNhbiBub3cgY29uc3RydWN0IFNR
TGl0ZVN0YXRlbWVudCBvYmplY3RzLiBXZSBhbHJlYWR5IG5lZWRlZCB0byBwYXNzCisgICAgICAg
ICAgYSBTUUxpdGVEYXRhYmFzZSByZWZlcmVuY2Ugd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFNRTGl0
ZVN0YXRlbWVudCBhbnl3YXkuCisgICAgICAgIC0gVGhlIGNvbnN0cnVjdCBBTkQgcHJlcGFyZSBh
IFNRTGl0ZVN0YXRlbWVudCwgd2Ugbm93IGNhbGwKKyAgICAgICAgICBTUUxpdGVEYXRhYmFzZTo6
cHJlcGFyZVN0YXRlbWVudCgpIHRvIGdldCBhIHN0YWNrIG9iamVjdCBvcgorICAgICAgICAgIFNR
TGl0ZURhdGFiYXNlOjpwcmVwYXJlSGVhcFN0YXRlbWVudCgpIHRvIGdldCBhIGhlYXAgb25lLiBU
aGVzZSBmdW5jdGlvbnMKKyAgICAgICAgICByZXR1cm4gYW4gRXhwZWN0ZWQ8PiB0eXBlIHNvIHRo
ZXkgd2lsbCBlaXRoZXIgcmV0dXJuIGEgInByZXBhcmVkIgorICAgICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBvciBhbiB1bmV4cGVjdGVkIFNRTGl0ZSBlcnJvciBjb2RlLgorICAgICAgICAtIFRoZSBw
cmVwYXJlKlN0YXRlbWVudCgpIGZ1bmN0aW9ucyBub3cgYXZvaWQgU3RyaW5nIGFsbG9jYXRpb25z
IGluIG1vc3QKKyAgICAgICAgICBjYXNlcyB0aGFua3MgdG8gb3ZlcmxvYWRzIHRha2luZyBpbiB0
aGUgcXVlcnkgYXMgYW4gQVNDSUlMaXRlcmFsLgorICAgICAgICAtIERyb3AgZmluYWxpemUoKSBm
dW5jdGlvbiBvbiBTUUxpdGVTdGF0ZW1lbnQgc28gU1FMaXRlU3RhdGVtZW50IG9iamVjdHMKKyAg
ICAgICAgICBhcmUgYWx3YXlzIHZhbGlkLiBJdCBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBTUUxpdGVTdGF0ZW1lbnQKKyAgICAgICAgICBtZW1iZXIgZnVuY3Rpb25zLiBUaGUgU1FM
aXRlU3RhdGVtZW50IGRlc3RydWN0b3IgImZpbmFsaXplcyIgdGhlIHN0YXRlbWVudAorICAgICAg
ICAgIHNvIHVzZXJzIGNhbiBzaW1wbHkgZGVzdHJveSB0aGUgU1FMaXRlU3RhdGVtZW50IGlmIHRo
ZXkgbmVlZCB0aGUgb2JqZWN0CisgICAgICAgICAgdG8gYmUgZmluYWxpemUgYXQgYSBjZXJ0YWlu
IHBvaW50IChlLmcuIGJlZm9yZSBjbG9zaW5nIGEgZGF0YWJhc2UpLgorICAgICAgICAtIERyb3Ag
dGhlIHByZXBhcmUoKSAmIHByZXBhcmVBbmRTdGVwKCkgU1FMaXRlU3RhdGVtZW50IG1lbWJlciBm
dW5jdGlvbnMgbm93CisgICAgICAgICAgdGhhdCBTUUxpdGVTdGF0ZW1lbnQgYXJlIGFsd2F5cyBw
cmVwYXJlZC4KKyAgICAgICAgLSBTdG9wIHN0b3JpbmcgdGhlIFNRTCBxdWVyeSBhcyBhIFN0cmlu
ZyBkYXRhIG1lbWJlciBpbiBTUUxpdGVTdGF0ZW1lbnQgY2xhc3MuCisgICAgICAgICAgVGhpcyBp
cyBubyBsb25nZXIgbmVlZGVkIG5vdyB0aGF0IHRoZXkgaXMgbm8gc2VwYXJlIHByZXBhcmUgc3Rl
cCBhZnRlciB0aGUKKyAgICAgICAgICBjb25zdHJ1Y3Rpb24uIFRoaXMgbWFrZXMgdGhlIFNRTGl0
ZVN0YXRlbWVudCBhIGJpdCBzbWFsbGVyLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OmNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJs
b2JUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5p
dGlhbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUluZGV4
SW5mb1RhYmxlRm9ySURVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRy
YWN0RXhpc3RpbmdEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlTmFtZUFuZFZlcnNpb25Gcm9tRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5U
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0YXRlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRBbmRS
ZWJpbmRQcmVJbmRleFN0YXRlbWVudElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEZldGNoTmV4dFJlY29yZCk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlVGV4
dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9y
bUdldFRhYmxlTmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlG
b3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNF
bnRyeUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZnVs
bFBhdGhGb3JEYXRhYmFzZU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFz
ZU5hbWVzTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGV0YWls
c0Zvck5hbWVBbmRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpz
ZXREYXRhYmFzZURldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpx
dW90YU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3Rh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkRGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGVJZkVtcHR5
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUpOgorICAgICAgICAqIGxvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2Fj
aGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVSZW1haW5pbmdTaXplRm9yT3Jp
Z2luRXhjbHVkaW5nQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW5zdXJlT3JpZ2luUmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2Vz
dENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2Fk
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RV
UkxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVD
YWNoZUdyb3VwUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJE
Qjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRC
OjpzZWFyY2hDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpnZXRBbGxD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjphbGxEb21haW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnVzZVdBTEpv
dXJuYWxNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjptYXhpbXVtU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6OmV4ZWN1dGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
OjpyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRh
YmFzZTo6dGFibGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OmNs
ZWFyQWxsVGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0dXJuT25J
bmNyZW1lbnRhbEF1dG9WYWN1dW0pOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QW5kUHJl
cGFyZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cHJlcGFy
ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhl
YXBTdGF0ZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50OjpTUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6c3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6ZXhlY3V0ZUNv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5zQXRMZWFz
dE9uZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRCbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6YmluZEludDY0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudDo6YmluZERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6
OmJpbmROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6YmluZFBhcmFt
ZXRlckNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Y29s
dW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbkRlY2xhcmVk
QXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludCk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludDY0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuRG91YmxlUmVzdWx0cyk6CisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TZWFy
Y2hQb3B1cE1lbnVEQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6
Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVu
dURCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVw
TWVudURCOjpleGVjdXRlU2ltcGxlU3FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVw
TWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVudCk6CisgICAgICAgICogd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorCiAyMDIxLTA1
LTE0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgQmFkIG1l
ZGlhIHNlc3Npb24gYXJ0d29yayBVUkwgcmVzdWx0cyBpbiBibHVlICJicm9rZW4gaW1hZ2UiIGlj
b24gYmVpbmcgc2hvd24gaW4gTm93IFBsYXlpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMThhZmJlZTEzODQzMWMw
M2Q3YjJkYmRlNzg4Mjg1ZjVkYjhhMzdhNC4uNDAzODU0MWUxMjRjYzZkYmE0ZTYyZGRhMmNhY2Mw
MmUyN2NkMzIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMS0wNS0xMyAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSAvIE9wdGltaXpl
IFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc5MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIGJhc2Ugbm93IHRo
YXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVtZW50IEFQSSBoYXMgY2hhbmdlZC4K
KyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxzLgorCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpvcGVuSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9y
ZWlnbktleXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2Vz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlz
c2luZ0NvbHVtbnNUb1RhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlbmFtZUNvbHVtbkluVGFibGUpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVt
YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVs
ZXRlZENvdW50Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhh
dFJlZGlyZWN0ZWRUb1RoaXNEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9Q
cmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
RG9tYWluc0FzUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nl
c3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uQXNGaXJzdFBhcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNXaXRoU3RvcmFnZUFjY2VzcyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3RpY0xpc3QgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZh
dGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJT
ZW50QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4
cGlyZWRGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xv
Y2FsU3RvcmFnZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0
YWJhc2U6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2Fs
U3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Okljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRh
dGFiYXNlOjpwb3B1bGF0ZVBhZ2VVUkxUb0ljb25VUkxNYXApOgorICAgICAgICAoV2ViS2l0OjpJ
Y29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRh
YmFzZTo6aWNvbklERm9ySWNvblVSTCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6
c2V0SWNvbklERm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6aWNv
bkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6OmFkZEljb24pOgorICAgICAg
ICAoV2ViS2l0OjpJY29uRGF0YWJhc2U6OnVwZGF0ZUljb25UaW1lc3RhbXApOgorICAgICAgICAo
V2ViS2l0OjpJY29uRGF0YWJhc2U6OmRlbGV0ZUljb24pOgorCiAyMDIxLTA1LTE0ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBQcm9tb3RlIGAtW1dLV2ViVmll
dyBfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yXWAgU1BJIHRvIGAtW1dLV2ViVmlldyB1bmRl
clBhZ2VCYWNrZ3JvdW5kQ29sb3JdYCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggNTJlMmUy
YjQ5ZjIzZGFiOTAwMThkMGE4ZjdhMmNlNmU2NmM1NTJiYS4uMmFjMjc2NjliZGIxYmUwNmVjZmMx
MDQ1NjNlZGYxZmYwNWRjOTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAyMS0wNS0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IE1vZGVybml6ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFy
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NTc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBjb2RlIGJhc2Ugbm93IHRoYXQgdGhlIFNRTGl0ZURhdGFiYXNlICYgU1FMaXRlU3RhdGVt
ZW50IEFQSSBoYXMgY2hhbmdlZC4KKyAgICAgICAgQWxzbyB1c2UgbW9yZSBBU0NJSUxpdGVyYWxz
LgorCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
U3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlVHJh
Y2tlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY1Nl
dE9yaWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY0Rl
bGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6c3luY0Rl
bGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBh
dGhGb3JPcmlnaW4pOgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVuYW1lIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKCkgdG8gRmlsZVN5
c3RlbTo6ZmlsZVNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5pcXVlUmVmLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAppbmRleCA0MTVhMjliNjYwY2ZlOWU4MzYwMGRh
NjE5YzFlYzNlNzFjMGYzNzk3Li5jNGVlM2RjMTI4NzRmMTk4ZTFiZjQ1M2YyMzdhOTljZjQ3Njc2
ZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaApAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQobV9yZWYpOwogICAgIH0KIAorICAgIGV4cGxpY2l0IFVuaXF1ZVJlZihUJiBvdGhlcikK
KyAgICAgICAgOiBtX3JlZigmb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9yZWYpOwor
ICAgIH0KKwogICAgIFQmIGdldCgpIHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsgfQog
ICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsg
fQogCkBAIC04MCwxMiArODYsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZy
aWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6
dW5pcXVlX3B0cjxVPik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5kIGNsYXNzIFVuaXF1
ZVJlZjsKIAotICAgIFVuaXF1ZVJlZihUJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZigmb3RoZXIp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yZWYpOwotICAgIH0KLQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxUPiBtX3JlZjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggOThkYjk4Y2M3M2MxYzA5ODc3NWYzMGI3YTRlYTM3OWRkZGVmZTRlMS4uOWFhYTBmZDUzZGVj
ZDFhZDZmODU1MDA2ZGM3M2E1NzU0Zjc3MjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHAKQEAgLTI2MywxMyArMjYzLDEzIEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0
ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICBT
dHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEg
Zm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBX
SEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dGJsX25hbWU9J1JlY29yZHMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5k
IHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpA
QCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJs
ZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0
Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0
eSgpKTsKQEAgLTMzOCwxMyArMzM4LDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
bnN1cmVWYWxpZEJsb2JUYWJsZXMoKQogICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwogICAgIHsK
ICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQg
dGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJT
RUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYlJl
Y29yZHMnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9i
UmVjb3JkcyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0
aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8v
IElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4KICAg
ICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzU4LDcgKzM1OCw3
IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRTY2hlbWEg
IT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29y
ZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC0zNjgsMTMgKzM2OCwxMyBAQCBib29sIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkKIAogICAgIHsKICAg
ICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRhYmxl
LgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNU
IHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyci
KTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyci
X3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYkZp
bGVzIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAg
ICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtMzkxLDcgKzM5MSw3
IEBAIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNj
aGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIGlmIChjdXJyZW50
U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBibG9i
RmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CkBAIC00MjgsMTMgKzQyOCwxMyBAQCBib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpCiAg
ICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CiAgICAgewogICAgICAgICAvLyBGZXRjaCB0aGUgc2No
ZW1hIGZvciBhbiBleGlzdGluZyBpbmRleCByZWNvcmQgdGFibGUuCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3Fs
aXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyIpOwotICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nSW5kZXhSZWNvcmRzJyJfcyk7CisgICAgICAg
IGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFibGUu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEluZGV4
UmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgogICAgICAgICBp
ZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CkBAIC00NTEsNyArNDUxLDcgQEAgYm9v
bCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNj
aGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBjdXJyZW50U2NoZW1h
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpOwogICAgIH0KIAogICAgIEFTU0VSVCghY3Vy
cmVudFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNTAzLDEzICs1MDMsMTMgQEAgYm9vbCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIFN0cmlu
ZyBjdXJyZW50U2NoZW1hOwogICAgIHsKICAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3Ig
YW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIGluZGV4LgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hF
UkUgbmFtZT0nSW5kZXhSZWNvcmRzSW5kZXgnIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRl
REItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IG5hbWU9J0luZGV4UmVjb3Jkc0luZGV4JyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzSW5kZXgg
aW5kZXggYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KICAgICAgICAgaWYgKHNxbGl0
ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewpAQCAtNTI2LDcgKzUyNiw3IEBAIGJvb2wgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRl
bWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICB9CiAKICAgICBBU1NFUlQoIWN1cnJlbnRTY2hl
bWEuaXNFbXB0eSgpKTsKQEAgLTU2MSwxMyArNTYxLDEzIEBAIGJvb2wgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKIAogICAgIFN0cmlu
ZyBjdXJyZW50U2NoZW1hOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9
J0luZGV4UmVjb3Jkc1JlY29yZEluZGV4JyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURC
LT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSBu
YW1lPSdJbmRleFJlY29yZHNSZWNvcmRJbmRleCciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXguIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3Fs
aXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjFJ
bmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSkpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCBib29s
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRl
eCgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJy
ZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGN1cnJlbnRT
Y2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiAgICAgfQogCiAgICAgQVNTRVJU
KCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC02MjQsMjAgKzYyNCwyMCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFu
ZFBvcHVsYXRlSW5pdGlhbAogICAgIH0KIAogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdN
ZXRhZGF0YVZlcnNpb24nLCA/KTsiX3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0YVZl
cnNpb24pICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQo
IklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/
KTsiX3MpOworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDEs
IGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGluc2VydCBkYXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnRGF0YWJhc2VOYW1lJywgPyk7Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgbV9pZGVudGlm
aWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVw
YXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJh
c2VOYW1lJywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbmFtZSBpbnRvIElEQkRhdGFiYXNl
SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDYsMTAgKzY0NiwxMCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVs
YXRlSW5pdGlhbAogICAgIHsKICAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRlZmlu
ZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3VwcG9y
dCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgICAgLy8gVGhlcmVm
b3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZB
TFVFUyAoJ0RhdGFiYXNlVmVyc2lvbicsID8pOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFy
ZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6
bnVtYmVyKDApKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9u
JywgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRl
eHQoMSwgU3RyaW5nOjpudW1iZXIoMCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGluc2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVp
KSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNjc0LDE5ICs2NzQsMTkgQEAgT3B0aW9uYWw8SXNTY2hlbWFVcGdyYWRlZD4g
U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmwKICAg
ICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNoIHRoZSBzY2hl
bWEgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRl
REItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRv
IGZldGNoIHNjaGVtYSBmb3IgdGhlIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc3FsaXRl
UmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0
YXRlbWVudC0+c3RlcCgpOwogICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudFNjaGVt
YSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBjdXJyZW50U2NoZW1hID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgIH0KIAogICAgIEFTU0VSVCghY3VycmVu
dFNjaGVtYS5pc0VtcHR5KCkpOwpAQCAtNzM5LDIyICs3MzksMjIgQEAgYm9vbCBTUUxpdGVJREJC
YWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRleEluZm9UYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hN
YXA8c3RkOjoKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlz
VW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9
IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwgb2JqZWN0U3RvcmVJ
RCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRleEluZm87Il9zKTsKKyAg
ICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgcHJl
cGFyaW5nIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gSW5kZXhJbmZvIHRhYmxlICgl
aSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAg
ICAgU3RyaW5nIG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAgICAg
IHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMik7Cisg
ICAgICAgICAgICB1aW50NjRfdCBpZCA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7Cisg
ICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9i
amVjdFN0b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVBhdGhC
dWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIGtl
eVBhdGhCdWZmZXIpOwotICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5ID0gc3RhdGVtZW50LmdldENv
bHVtbkludCg1KTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9y
KDMsIGtleVBhdGhCdWZmZXIpOworICAgICAgICAgICAgYm9vbCB1bmlxdWUgPSBzdGF0ZW1lbnQt
PmdldENvbHVtbkludCg0KTsKKyAgICAgICAgICAgIGJvb2wgbXVsdGlFbnRyeSA9IHN0YXRlbWVu
dC0+Z2V0Q29sdW1uSW50KDUpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkNyZWF0ZVRlbXBJbmRleEluZm8sICJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleElu
Zm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICAgICAgaWYgKCFzcWwK
QEAgLTc2OSw3ICs3NjksNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWlncmF0ZUlu
ZGV4SW5mb1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1hcDxzdGQ6OgogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAt
ODA0LDIyICs4MDQsMjIgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1pZ3JhdGVJbmRl
eFJlY29yZHNUYWJsZUZvcklEVXBkYXRlKGNvbnN0IEhhc2hNYXA8c3QKICAgICB9CiAKICAgICB7
Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxFQ1QgaW5k
ZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmVSZWNvcmRJRCBGUk9N
IEluZGV4UmVjb3JkczsiX3MpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSwgb2JqZWN0
U3RvcmVSZWNvcmRJRCBGUk9NIEluZGV4UmVjb3JkczsiX3MpOworICAgICAgICBpZiAoIXN0YXRl
bWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBwcmVwYXJpbmcgc3RhdGVtZW50
IHRvIGZldGNoIHJlY29yZHMgZnJvbSB0aGUgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIs
IGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwog
ICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVpbnQ2
NF90IGlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgICAgICAgICAgdWludDY0
X3Qgb2JqZWN0U3RvcmVJRCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAg
ICAgIHVpbnQ2NF90IGlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDEp
OwogICAgICAgICAgICAgdWludDY0X3QgbmV3SUQgPSBpbmRleElETWFwLmdldCh7IG9iamVjdFN0
b3JlSUQsIGlkIH0pOwogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUJ1ZmZlcjsKLSAg
ICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5QnVmZmVyKTsK
KyAgICAgICAgICAgIHN0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleUJ1ZmZl
cik7CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Ci0gICAgICAgICAg
ICBzdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDMsIHZhbHVlQnVmZmVyKTsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IHJlY29yZElEID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDQpOwor
ICAgICAgICAgICAgc3RhdGVtZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywgdmFsdWVCdWZm
ZXIpOworICAgICAgICAgICAgdWludDY0X3QgcmVjb3JkSUQgPSBzdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDQpOwogCiAgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6
OlB1dFRlbXBJbmRleFJlY29yZCwgIklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBWQUxV
RVMgKD8sID8sIENBU1QoPyBBUyBURVhUKSwgQ0FTVCg/IEFTIFRFWFQpLCA/KTsiX3MpOwogICAg
ICAgICAgICAgaWYgKCFzcWwKQEAgLTgzMyw3ICs4MzMsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6bWlncmF0ZUluZGV4UmVjb3Jkc1RhYmxlRm9ySURVcGRhdGUoY29uc3QgSGFzaE1h
cDxzdAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgewpAQCAtOTg5LDEwICs5ODksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRh
dGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFz
ZUkKIAogICAgIFN0cmluZyBkYXRhYmFzZU5hbWU7CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZv
IFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1u
TnVsbCgwKSkKKyAgICAgICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNl
TmFtZSc7Il9zKTsKKyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRhdGFiYXNlTmFtZSA9IHNxbC5nZXRDb2x1bW5U
ZXh0KDApOworICAgICAgICBkYXRhYmFzZU5hbWUgPSBzcWwtPmdldENvbHVtblRleHQoMCk7CiAg
ICAgICAgIGlmIChkYXRhYmFzZU5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7
CiAgICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIGluZm8gZGF0YWJh
c2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lICgnJXMnKSIsIGRhdGFi
YXNlTmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMDAsMTAgKzEwMDAs
MTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICB9CiAgICAgdWludDY0X3QgZGF0YWJh
c2VWZXJzaW9uOwogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJh
c2VWZXJzaW9uJzsiX3MpOwotICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAg
ICAgYXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUg
RlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsK
KyAgICAgICAgaWYgKHNxbC0+aXNDb2x1bW5OdWxsKDApKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLmdldENvbHVtblRleHQo
MCk7CisgICAgICAgIFN0cmluZyBzdHJpbmdWZXJzaW9uID0gc3FsLT5nZXRDb2x1bW5UZXh0KDAp
OwogICAgICAgICBhdXRvIHBhcnNlZFZlcnNpb24gPSBwYXJzZUludGVnZXI8dWludDY0X3Q+KHN0
cmluZ1ZlcnNpb24pOwogICAgICAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBjbGVh
bmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0cmlu
Z1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CkBAIC0xMDIxLDE3ICsxMDIxLDE3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4
aXN0aW5nRGF0YWJhc2VJCiAgICAgYm9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gKHJlc3VsdC52
YWx1ZSgpID09IElzU2NoZW1hVXBncmFkZWQ6Olllcyk7CiAKICAgICB7Ci0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1
dG9JbmMgRlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVjdFN0
b3JlSW5mbzsiX3MpOworICAgICAgICBpZiAoIXNxbCkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICBpbnQgcmVz
dWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICAgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2
NCgwKTsKLSAgICAgICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBzcWwuZ2V0Q29sdW1u
VGV4dCgxKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENv
bHVtbkludDY0KDApOworICAgICAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IHNxbC0+
Z2V0Q29sdW1uVGV4dCgxKTsKIAogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZm
ZXI7Ci0gICAgICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhCdWZm
ZXIpOworICAgICAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0aEJ1
ZmZlcik7CiAKICAgICAgICAgICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3JlS2V5
UGF0aDsKICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5UGF0aEJ1ZmZl
ci5zaXplKCksIG9iamVjdFN0b3JlS2V5UGF0aCkpIHsKQEAgLTEwMzksMTEgKzEwMzksMTEgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
eHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gc3FsLmdl
dENvbHVtbkludCgzKTsKKyAgICAgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IHNxbC0+Z2V0
Q29sdW1uSW50KDMpOwogCiAgICAgICAgICAgICBkYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2Jq
ZWN0U3RvcmUoeyBvYmplY3RTdG9yZUlELCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUob2JqZWN0
U3RvcmVLZXlQYXRoKSwgYXV0b0luY3JlbWVudCB9KTsKIAotICAgICAgICAgICAgcmVzdWx0ID0g
c3FsLnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNxbC0+c3RlcCgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTA1NiwyMCArMTA1
NiwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVp
bnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFZlY3RvcjxJREJJbmRleEluZm8+PiBpbmRleEluZm9NYXA7CiAgICAgewotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmpl
Y3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsi
X3MpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
YXV0byBzcWwgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG5hbWUs
IG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJ
bmZvOyJfcyk7CisgICAgICAgIGlmICghc3FsKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4
SW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBz
cWwtPnN0ZXAoKTsKICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgICAgICB1aW50NjRfdCBpbmRleElEID0gc3FsLmdldENvbHVtbkludDY0KDApOwotICAgICAg
ICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAgICAg
ICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IGluZGV4SUQgPSBzcWwtPmdldENvbHVtbkludDY0KDApOworICAgICAg
ICAgICAgU3RyaW5nIGluZGV4TmFtZSA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAg
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQgPSBzcWwtPmdldENvbHVtbkludDY0KDIpOwogCiAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNxbC5n
ZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5UGF0aEJ1ZmZlcik7CisgICAgICAgICAgICBzcWwt
PmdldENvbHVtbkJsb2JBc1ZlY3RvcigzLCBrZXlQYXRoQnVmZmVyKTsKIAogICAgICAgICAgICAg
T3B0aW9uYWw8SURCS2V5UGF0aD4gaW5kZXhLZXlQYXRoOwogICAgICAgICAgICAgaWYgKCFkZXNl
cmlhbGl6ZUlEQktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5UGF0
aEJ1ZmZlci5kYXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgaW5kZXhLZXlQYXRoKSkgewpA
QCAtMTA4MSw4ICsxMDgxLDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCB1
bmlxdWUgPSBzcWwuZ2V0Q29sdW1uSW50KDQpOwotICAgICAgICAgICAgYm9vbCBtdWx0aUVudHJ5
ID0gc3FsLmdldENvbHVtbkludCg1KTsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlID0gc3FsLT5n
ZXRDb2x1bW5JbnQoNCk7CisgICAgICAgICAgICBib29sIG11bHRpRW50cnkgPSBzcWwtPmdldENv
bHVtbkludCg1KTsKIAogICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IGRhdGFiYXNlSW5m
by0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJRCk7CiAgICAgICAgICAg
ICBpZiAoIW9iamVjdFN0b3JlKSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSQogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5k
ZXhJbmZvKTsKICAgICAgICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJRCA/
IGluZGV4SUQgOiBtYXhJbmRleElEOwogCi0gICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgp
OworICAgICAgICAgICAgcmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC0xMTYyLDExICsxMTYyLDE1IEBAIE9w
dGlvbmFsPElEQkRhdGFiYXNlTmFtZUFuZFZlcnNpb24+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VOYW1lQW5kVmVyc2lvCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgU1FMaXRlU3RhdGVtZW50IG5hbWVzcWwoZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUg
RlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlTmFtZSc7Iik7Ci0gICAg
YXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0byBu
YW1lc3FsID0gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZST00gSURC
RGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyJfcyk7CisgICAgaWYgKCFu
YW1lc3FsKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50
IHRvIGdldCBkYXRhYmFzZSBuYW1lKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisgICAgYXV0byBkYXRhYmFzZU5hbWUgPSBuYW1lc3FsLT5nZXRDb2x1bW5UZXh0KDApOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHZlcnNxbChkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9N
IElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiX3MpOwotICAg
IFN0cmluZyBzdHJpbmdWZXJzaW9uID0gdmVyc3FsLmdldENvbHVtblRleHQoMCk7CisgICAgYXV0
byB2ZXJzcWwgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJ
REJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Il9zKTsKKyAgICBT
dHJpbmcgc3RyaW5nVmVyc2lvbiA9IHZlcnNxbCA/IHZlcnNxbC0+Z2V0Q29sdW1uVGV4dCgwKSA6
IFN0cmluZygpOwogICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVpbnQ2
NF90PihzdHJpbmdWZXJzaW9uKTsKICAgICBpZiAoIWRhdGFiYXNlVmVyc2lvbikgewogICAgICAg
ICBMT0dfRVJST1IoIkRhdGFiYXNlIHZlcnNpb24gb24gZGlzayAoJyVzJykgZG9lcyBub3QgY2xl
YW5seSBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZlcnNpb24iLCBzdHJp
bmdWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTMxMCwxMCArMTMxNCwxMCBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNh
Y3Rpb25JbmZvJiBpbmZvKQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUoKSA9
PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgbV9vcmlnaW5h
bERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UgPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNl
SW5mbz4oKm1fZGF0YWJhc2VJbmZvKTsKIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCAiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJlIGtl
eSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVy
KGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIGF1dG8gc3FsID0gbV9zcWxpdGVEQi0+cHJl
cGFyZVN0YXRlbWVudCgiVVBEQVRFIElEQkRhdGFiYXNlSW5mbyBTRVQgdmFsdWUgPSA/IHdoZXJl
IGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyJfcyk7CisgICAgICAgIGlmICghc3FsCisgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lvbigp
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZhaWxl
ZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSJfcyB9OwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjM0Nyw0MyArMjM1MSwzMyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aQogICAgIGludDY0X3QgcmVjb3JkSUQgPSAwOwogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIGtl
eVJlc3VsdEJ1ZmZlciwgdmFsdWVSZXN1bHRCdWZmZXI7CiAgICAgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJPcGVuID0gIlNFTEVDVCBrZXksIHZhbHVl
LCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENB
U1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwot
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWQgPSAi
U0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQp
IE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJD
bG9zZWRVcHBlck9wZW4gPSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlckNsb3NlZCA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwg
Uk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5LZXlP
bmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFO
RCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVwcGVy
Q2xvc2VkS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRF
WFQpIE9SREVSIEJZIGtleTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93
ZXJDbG9zZWRVcHBlck9wZW5LZXlPbmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBD
QVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5T25seSA9ICJTRUxFQ1Qga2V5IEZST00g
UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgICAgICBT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzcWw7CiAKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgSURCR2V0UmVjb3JkRGF0YVR5cGU6OktleUFuZFZhbHVlOgogICAg
ICAgICAgICAgaWYgKGtleVJhbmdlLmxvd2VyT3BlbikgewogICAgICAgICAgICAgICAgIGlmIChr
ZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93ZXJPcGVuVXBw
ZXJPcGVuKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6
R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCAiU0VMRUNUIGtleSwgdmFsdWUsIFJP
V0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/
IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVu
VXBwZXJDbG9zZWQpOworICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQo
U1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgIlNFTEVDVCBrZXksIHZh
bHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+
IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7
Il9zKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVJhbmdl
LnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNR
TDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJP
cGVuKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0
VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9X
SUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/
IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNs
b3NlZFVwcGVyQ2xvc2VkKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBr
ZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIg
Qlkga2V5OyJfcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJREJHZXRSZWNvcmREYXRhVHlwZTo6S2V5T25seToKICAgICAgICAgICAgIGlmIChrZXlS
YW5nZS5sb3dlck9wZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoa2V5UmFuZ2UudXBwZXJPcGVu
KQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRLZXlS
ZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5KTsKKyAg
ICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jk
c0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVj
dFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBB
UyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dl
ck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5KTsKKyAgICAgICAg
ICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2Vy
T3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGtleVJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3FsID0g
Y2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCBs
b3dlckNsb3NlZFVwcGVyT3BlbktleU9ubHkpOworICAgICAgICAgICAgICAgICAgICBzcWwgPSBj
YWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sICJT
RUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49
IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
X3MpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3FsID0gY2Fj
aGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxv
d2VyQ2xvc2VkVXBwZXJDbG9zZWRLZXlPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0g
Y2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0S2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQs
ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5
ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBr
ZXk7Il9zKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNDU1LDM2ICsyNDQ5LDI3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zCiAKIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50Rm9yR2V0QWxsT2JqZWN0
U3RvcmVSZWNvcmRzKGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0
YSkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJPcGVuS2V5
ID0iU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtl
eTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlckNsb3NlZEtl
eSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZ
IGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyT3Bl
bktleSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBB
TkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVS
IEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVy
Q2xvc2VkS2V5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQg
PSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQp
IE9SREVSIEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5V
cHBlck9wZW5WYWx1ZSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8
IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWRWYWx1ZSA9ICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9X
SUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8g
QVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJPcGVuVmFsdWUgPSAiU0VM
RUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0g
PyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9S
REVSIEJZIGtleTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVw
cGVyQ2xvc2VkVmFsdWUgPSAiU0VMRUNUIGtleSwgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7IjsKLQogICAgIGlmIChnZXRBbGxSZWNv
cmRzRGF0YS5nZXRBbGxUeXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cykgewogICAg
ICAgICBpZiAoZ2V0QWxsUmVjb3Jkc0RhdGEua2V5UmFuZ2VEYXRhLmxvd2VyT3BlbikgewogICAg
ICAgICAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29y
ZHNMb3dlck9wZW5VcHBlck9wZW4sIGxvd2VyT3BlblVwcGVyT3BlbktleSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyT3BlblVw
cGVyQ2xvc2VkLCBsb3dlck9wZW5VcHBlckNsb3NlZEtleSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBlck9w
ZW4sICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkg
a2V5OyJfcyk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxs
S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCAiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMg
V0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAgICAg
ICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlckNs
b3NlZFVwcGVyT3BlbiwgbG93ZXJDbG9zZWRVcHBlck9wZW5LZXkpOwotICAgICAgICByZXR1cm4g
Y2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9z
ZWQsIGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRLZXkpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hl
ZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNF
TEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJf
cyk7CisgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRz
TG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9i
amVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FT
VCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOwogICAgIH0KIAogICAgIGlmIChnZXRBbGxS
ZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEubG93ZXJPcGVuKSB7CiAgICAgICAgIGlmIChnZXRBbGxS
ZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVuKQotICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93
ZXJPcGVuVXBwZXJPcGVuVmFsdWUpOwotICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNR
TDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsIGxvd2VyT3BlblVwcGVyQ2xv
c2VkVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZh
bHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiX3MpOworICAgICAg
ICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBw
ZXJDbG9zZWQsICJTRUxFQ1Qga2V5LCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9i
amVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNU
KD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiAgICAgfQogCiAgICAgaWYgKGdldEFsbFJl
Y29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgIHJldHVybiBjYWNoZWRT
dGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgbG93ZXJD
bG9zZWRVcHBlck9wZW5WYWx1ZSk7Ci0gICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6Okdl
dFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJDbG9z
ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJl
Y29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVY
VCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Il9zKTsKKyAgICByZXR1
cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNs
b3NlZCwgIlNFTEVDVCBrZXksIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8g
QVMgVEVYVCkgT1JERVIgQlkga2V5OyJfcyk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Z2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYg
Z2V0QWxsUmVjb3Jkc0RhdGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQpAQCAtMjc1OCwxOSAr
Mjc0MywxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIHN0YXRlbWVudDsKIAogICAgIGlmICghaW5kZXhJZGVudGlmaWVyKSB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyT3BlblVwcGVyT3BlblJl
Y29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7
IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGNvdW50TG93ZXJPcGVuVXBwZXJD
bG9zZWRSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBB
UyBURVhUKTsiOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY291bnRMb3dlckNs
b3NlZFVwcGVyT3BlblJlY29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVS
RSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwg
Q0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3Vu
dExvd2VyQ2xvc2VkVXBwZXJDbG9zZWRSZWNvcmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJl
Y29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkg
QU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCk7IjsKLQogICAgICAgICBpZiAocmFuZ2UubG93ZXJP
cGVuICYmIHJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgY291bnRMb3dlck9w
ZW5VcHBlck9wZW5SZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBB
UyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVsc2UgaWYg
KHJhbmdlLmxvd2VyT3BlbiAmJiAhcmFuZ2UudXBwZXJPcGVuKQotICAgICAgICAgICAgc3RhdGVt
ZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9z
ZWQsIGNvdW50TG93ZXJPcGVuVXBwZXJDbG9zZWRSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRl
bWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xv
c2VkLCAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0g
PyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyJf
cyk7CiAgICAgICAgIGVsc2UgaWYgKCFyYW5nZS5sb3dlck9wZW4gJiYgcmFuZ2UudXBwZXJPcGVu
KQotICAgICAgICAgICAgc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNv
cmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGNvdW50TG93ZXJDbG9zZWRVcHBlck9wZW5SZWNvcmRz
KTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVj
b3Jkc0xvd2VyQ2xvc2VkVXBwZXJPcGVuLCAiU0VMRUNUIENPVU5UKCopIEZST00gUmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRl
bWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJD
bG9zZWQsIGNvdW50TG93ZXJDbG9zZWRVcHBlckNsb3NlZFJlY29yZHMpOworICAgICAgICAgICAg
c3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRSZWNvcmRzTG93ZXJDbG9zZWRV
cHBlckNsb3NlZCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMg
VEVYVCk7Il9zKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc3RhdGVtZW50CiAgICAgICAgICAg
ICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNR
TElURV9PSwpAQCAtMjc4MCwxOSArMjc2MCwxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpbwog
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIGNv
dW50IHJlY29yZHMgaW4gb2JqZWN0IHN0b3JlIGR1ZSB0byBiaW5kaW5nIGZhaWx1cmUiX3MgfTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBjb3VudExvd2VyT3BlblVwcGVyT3BlbkluZGV4UmVjb3JkcyA9ICJTRUxFQ1QgQ09VTlQoKikg
RlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBU
RVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID4g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJPcGVuSW5kZXhSZWNv
cmRzID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0g
PyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyI7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjb3VudExvd2VyQ2xvc2VkVXBwZXJD
bG9zZWRJbmRleFJlY29yZHMgPSAiU0VMRUNUIENPVU5UKCopIEZST00gSW5kZXhSZWNvcmRzIFdI
RVJFIGluZGV4SUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FT
VCg/IEFTIFRFWFQpOyI7Ci0gICAgICAgIAogICAgICAgICBpZiAocmFuZ2UubG93ZXJPcGVuICYm
IHJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBjb3VudExvd2VyT3Bl
blVwcGVyT3BlbkluZGV4UmVjb3Jkcyk7CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjYWNoZWRT
dGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ID4g
Q0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAgICAgICAg
ZWxzZSBpZiAocmFuZ2UubG93ZXJPcGVuICYmICFyYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAg
ICBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDb3VudEluZGV4UmVjb3Jkc0xvd2Vy
T3BlblVwcGVyQ2xvc2VkLCBjb3VudExvd2VyT3BlblVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzKTsK
KyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhS
ZWNvcmRzTG93ZXJPcGVuVXBwZXJDbG9zZWQsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJbmRleFJl
Y29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDw9IENBU1QoPyBBUyBURVhUKTsiX3MpOwogICAgICAgICBlbHNlIGlmICghcmFuZ2UubG93ZXJP
cGVuICYmIHJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGNvdW50
TG93ZXJDbG9zZWRVcHBlck9wZW5JbmRleFJlY29yZHMpOworICAgICAgICAgICAgc3RhdGVtZW50
ID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6Q291bnRJbmRleFJlY29yZHNMb3dlckNsb3NlZFVwcGVy
T3BlbiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0g
PyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpOyJf
cyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgY291bnRMb3dl
ckNsb3NlZFVwcGVyQ2xvc2VkSW5kZXhSZWNvcmRzKTsKKyAgICAgICAgICAgIHN0YXRlbWVudCA9
IGNhY2hlZFN0YXRlbWVudChTUUw6OkNvdW50SW5kZXhSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNs
b3NlZCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0g
PyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKTsi
X3MpOwogCiAgICAgICAgIGlmICghc3RhdGVtZW50CiAgICAgICAgICAgICB8fCBzdGF0ZW1lbnQt
PmJpbmRJbnQ2NCgxLCBpbmRleElkZW50aWZpZXIpICE9IFNRTElURV9PSwpAQCAtMzAxNywxMiAr
Mjk5MiwxMiBAQCB2b2lkIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3Jl
KCkKICAgICAgICAgYm9vbCBlcnJvcmVkID0gdHJ1ZTsKIAogICAgICAgICBpZiAobV9zcWxpdGVE
QikgewotICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVD
VCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsiX3MpOwotICAgICAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5z
dGVwKCk7CisgICAgICAgICAgICBhdXRvIHNxbCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlczsiX3MpOworICAgICAgICAgICAgaWYg
KHNxbCkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKICAgICAg
ICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYmxvYkZpbGVzLmFwcGVuZChzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2JG
aWxlcy5hcHBlbmQoc3FsLT5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gc3FsLT5zdGVwKCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKQEAgLTMwNTQsMjEgKzMwMjksMjAgQEAgdm9p
ZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vyc29y
JiBjdXJzb3IpCiAgICAgbV9jdXJzb3JzLnJlbW92ZShjdXJzb3IuaWRlbnRpZmllcigpKTsKIH0K
IAotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
YWNoZWRTdGF0ZW1lbnQoU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUwgc3FsLCBjb25zdCBjaGFy
KiBzdGF0ZW1lbnQpCitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmNhY2hlZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTCBzcWws
IEFTQ0lJTGl0ZXJhbCBxdWVyeSkKIHsKICAgICBpZiAoc3FsID49IFNRTDo6SW52YWxpZCkgewog
ICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgU1FMIHN0YXRlbWVudCBJRCBwYXNzZWQgdG8gY2Fj
aGVkU3RhdGVtZW50KCkiKTsKICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIHsgfTsKICAgICB9CiAKLSAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19j
YXN0PHNpemVfdD4oc3FsKV0pIHsKKyAgICBpZiAobV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19j
YXN0PHNpemVfdD4oc3FsKV0pCiAgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVz
ZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNxbCldLmdl
dCgpIH07Ci0gICAgfQogCiAgICAgaWYgKG1fc3FsaXRlREIpIHsKLSAgICAgICAgbV9jYWNoZWRT
dGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0gPSBtYWtlVW5pcXVlPFNRTGl0ZVN0
YXRlbWVudD4oKm1fc3FsaXRlREIsIHN0YXRlbWVudCk7Ci0gICAgICAgIGlmIChtX2NhY2hlZFN0
YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXS0+cHJlcGFyZSgpICE9IFNRTElURV9P
SykKLSAgICAgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNx
bCldID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVw
YXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQpCisgICAgICAg
ICAgICBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzcWwpXSA9IHN0YXRl
bWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIHJldHVybiBTUUxp
dGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNxbCldLmdldCgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5k
ZXggOTZkMjhlMmU2M2NhYTRhNWQyOGNlYzRiOTJkY2Q3MjIwZDA3MTRiMy4uNDFkY2JmMzk1ODU5
YmVmNzNhZTMzYTMzM2U0NmZjOGEzY2E0MjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuaApAQCAtMjA0LDcgKzIwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludmFsaWQsCiAgICAg
fTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudChT
UUwsIGNvbnN0IGNoYXIqKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNo
ZWRTdGF0ZW1lbnQoU1FMLCBBU0NJSUxpdGVyYWwpOwogICAgIFNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudEZvckdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhjb25z
dCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVN0
YXRlbWVudD4gbV9jYWNoZWRTdGF0ZW1lbnRzW3N0YXRpY19jYXN0PGludD4oU1FMOjpJbnZhbGlk
KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IGMyY2VkODQxOTMwMGI1YThjNThhOGU4NDAy
MjJmMjU1NjEyNWIzNWMuLmYyODkwOGNhNTE1ZTdiOWIyZmZmODQ4OGMwMDZkMmIwZTgxYmJmNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBib29sIFNRTGl0
ZUlEQkN1cnNvcjo6Y3JlYXRlU1FMaXRlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogICAg
IEFTU0VSVCghbV9jdXJyZW50VXBwZXJLZXkuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpKTsKIAotICAgIG1fc3RhdGVtZW50ID0gbWFrZVVu
aXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkt
PmRhdGFiYXNlKCksIHNxbCk7Ci0KLSAgICBpZiAobV9zdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRy
YW5zYWN0aW9uKCktPmRhdGFiYXNlKCkucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgY3Vy
c29yIHN0YXRlbWVudCAocHJlcGFyZS9pZCkgLSAnJXMnIiwgbV90cmFuc2FjdGlvbi0+c3FsaXRl
VHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CisgICAgbV9zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmFsdWUoKS5tb3Zl
VG9VbmlxdWVQdHIoKTsKIAogICAgIHJldHVybiBiaW5kQXJndW1lbnRzKCk7CiB9CkBAIC0zNDEs
MTIgKzM0MSwxMiBAQCBib29sIFNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRBbmRSZWJpbmRQcmVJbmRl
eFN0YXRlbWVudElmTmVjZXNzYXJ5KCkKIAogICAgIGF1dG8mIGRhdGFiYXNlID0gbV90cmFuc2Fj
dGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKTsKICAgICBpZiAoIW1fcHJlSW5k
ZXhTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9wcmVJbmRleFN0YXRlbWVudCA9IG1ha2VVbmlxdWU8
U1FMaXRlU3RhdGVtZW50PihkYXRhYmFzZSwgYnVpbGRQcmVJbmRleFN0YXRlbWVudChpc0RpcmVj
dGlvbk5leHQoKSkpOwotCi0gICAgICAgIGlmIChtX3ByZUluZGV4U3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gcHJlSW5kZXhTdGF0ZW1lbnQgPSBkYXRh
YmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudChidWlsZFByZUluZGV4U3RhdGVtZW50KGlzRGlyZWN0
aW9uTmV4dCgpKSk7CisgICAgICAgIGlmICghcHJlSW5kZXhTdGF0ZW1lbnQpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgcHJlIHN0YXRlbWVudCAtICclcyciLCBk
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KKyAgICAgICAgbV9wcmVJbmRleFN0YXRlbWVudCA9IHByZUluZGV4U3RhdGVtZW50LnZh
bHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCiAgICAgaWYgKG1fcHJlSW5kZXhTdGF0
ZW1lbnQtPnJlc2V0KCkgIT0gU1FMSVRFX09LKSB7CkBAIC01ODgsOSArNTg4LDggQEAgU1FMaXRl
SURCQ3Vyc29yOjpGZXRjaFJlc3VsdCBTUUxpdGVJREJDdXJzb3I6OmludGVybmFsRmV0Y2hOZXh0
UmVjb3JkKFNRTGl0ZUN1cnMKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jYWNoZWRPYmpl
Y3RTdG9yZVN0YXRlbWVudCB8fCBtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5yZXNldCgp
ICE9IFNRTElURV9PSykgewotICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRlbWVu
dCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihkYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBG
Uk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFuZCBvYmplY3RTdG9yZUlE
ID0gPzsiKTsKLSAgICAgICAgICAgIGlmIChtX2NhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgICAgIG1fY2FjaGVkT2JqZWN0U3Rv
cmVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGF1dG8gY2FjaGVkT2JqZWN0
U3RvcmVTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIHZh
bHVlIEZST00gUmVjb3JkcyBXSEVSRSBrZXkgPSBDQVNUKD8gQVMgVEVYVCkgYW5kIG9iamVjdFN0
b3JlSUQgPSA/OyJfcykpCisgICAgICAgICAgICAgICAgbV9jYWNoZWRPYmplY3RTdG9yZVN0YXRl
bWVudCA9IGNhY2hlZE9iamVjdFN0b3JlU3RhdGVtZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRy
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fY2FjaGVkT2JqZWN0U3RvcmVTdGF0ZW1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAK
aW5kZXggYWI0NzgyNmM4M2ViYjU4Yjc3YjRhNjE1MjcxMzkyMTMzY2Y4NDBlNi4uZTc0ZTI4ZjVi
OWU1Zjc5ZmM1ZDVjZDBjZTc2NmNhMGRkZjFiZjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKQEAgLTExMywxOCArMTEzLDE1IEBAIHN0
YXRpYyBTdHJpbmcgZm9ybWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBz
cWxpdGVFcnJvckNvZGUsIGNvbnN0CiAKIHN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJh
c2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAg
ICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0g
U1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBkYi5wcmVwYXJlU3RhdGVtZW50KHF1
ZXJ5KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBwcmVwYXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5
LmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1ZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB2
YWx1ZSk7CiAKLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0
IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMzQsMTcgKzEzMSwxNSBAQCBzdGF0aWMgYm9vbCBz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29ucwogCiBzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2Uo
U1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0
cmluZykKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRl
bWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVl
cnkuYXNjaWkoKS5kYXRhKCkpOworICAgIGF1dG8gc3RhdGVtZW50ID0gZGIucHJlcGFyZVN0YXRl
bWVudChxdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciAoJWkpIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRh
dGFiYXNlICglcykiLCBzdGF0ZW1lbnQuZXJyb3IoKSwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocmVzdWx0ID09
IFNRTElURV9ET05FKSB7CkBAIC03MTQsOCArNzA5LDggQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKIHsKICAgICBkaXNhYmxlQXV0aG9yaXplcigpOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNU
IG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9
IHNxbGl0ZURhdGFiYXNlKCkucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxp
dGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7
CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVzIGZv
ciBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwogICAg
ICAgICBlbmFibGVBdXRob3JpemVyKCk7CiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigp
OwpAQCAtNzIzLDggKzcxOCw4IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0
VGFibGVOYW1lcygpCiAKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzOwogICAgIGludCBy
ZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7
CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAg
ICAgICAgaWYgKG5hbWUgIT0gdW5xdWFsaWZpZWRJbmZvVGFibGVOYW1lKQogICAgICAgICAgICAg
dGFibGVOYW1lcy5hcHBlbmQobmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDViYjkwNjdh
NTBjZDE0Yjc4NTE1NTQyMjUxNmM0MzA2MjgwOTY2MzEuLjc5YTdlOGY5NjRhOWNjNmFkZTY4YmRh
NmM1ODYxMmE4Njc1NDJmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTIzNSwxNSArMjM1LDE1IEBAIGJv
b2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmIG9yaWdpbikKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgb3JpZ2luIEZST00gT3Jp
Z2lucyB3aGVyZSBvcmlnaW49PzsiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVzsKKyAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0K
IAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQpA
QCAtMjU2LDE1ICsyNTYsMTUgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnMKICAgICB9CiAKICAg
ICAvLyBXZSd2ZSBnb3QgYSB0cmFja2VyIGRhdGFiYXNlLiBTZXQgdXAgYSBxdWVyeSB0byBhc2sg
Zm9yIHRoZSBkYiBvZiBpbnRlcmVzdDoKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/OyIpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/
OyJfcyk7CiAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
aWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDIsIGRhdGFiYXNlSWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
OwogfQogCiB1aW50NjRfdCBEYXRhYmFzZVRyYWNrZXI6Om1heGltdW1TaXplKERhdGFiYXNlJiBk
YXRhYmFzZSkKQEAgLTMyNSwyNiArMzI1LDI2IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1
bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnCiAg
ICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0
YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CiAKLSAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
LQotICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCkpOwotICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRh
YmFzZSBUcmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVyLnV0
ZjgoKS5kYXRhKCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFt
ZT0/OyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmll
cik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTElU
RV9ST1cpCisgICAgICAgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJh
c2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkp
OworICAgICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3RzKQorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGZpbGVuYW1lIGZyb20gRGF0YWJhc2Ug
VHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1lICVzIiwgb3JpZ2luSWRlbnRpZmllci51dGY4KCku
ZGF0YSgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogCiAgICAgU3Ry
aW5nIGZpbGVOYW1lID0gZ2VuZXJhdGVEYXRhYmFzZUZpbGVOYW1lKCk7CiAKQEAgLTM3MiwxNiAr
MzcyLDE2IEBAIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IERhdGFiYXNlVHJhY2tlcjo6b3Jp
Z2lucygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9y
aWdpbiBGUk9NIE9yaWdpbnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiX3MpOworICAgIGlmICghc3RhdGVtZW50KSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
IG9yaWdpbnM7CiAgICAgaW50IHN0ZXBSZXN1bHQ7Ci0gICAgd2hpbGUgKChzdGVwUmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgb3JpZ2lucy5hcHBlbmQo
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOworICAgIHdoaWxlICgoc3RlcFJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBvcmlnaW5zLmFwcGVu
ZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50LT5n
ZXRDb2x1bW5UZXh0KDApKS0+aXNvbGF0ZWRDb3B5KCkpOwogICAgIG9yaWdpbnMuc2hyaW5rVG9G
aXQoKTsKIAogICAgIGlmIChzdGVwUmVzdWx0ICE9IFNRTElURV9ET05FKQpAQCAtMzk3LDE2ICsz
OTcsMTYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzTm9M
b2NrKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3IKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9NIERhdGFiYXNlcyB3aGVyZSBvcmlnaW49
PzsiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lIEZS
T00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRh
dGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICBp
bnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
SVRFX1JPVykKLSAgICAgICAgbmFtZXMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICBuYW1lcy5hcHBlbmQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAg
ICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkg
ewpAQCAtNDM5LDE0ICs0MzksMTQgQEAgRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6
ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb24KICAgICAgICAg
b3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRh
aWxzKCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmln
aW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSBGUk9NIERhdGFiYXNlcyBX
SEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Il9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKCk7CiAKLSAgICAgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZFRl
eHQoMiwgbmFtZSk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgbmFtZSk7CiAKLSAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQtPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkKICAgICAg
ICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKIApAQCAtNDU0LDggKzQ1NCw4IEBAIERh
dGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uCiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJldHJp
ZXZpbmcgZGV0YWlscyBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tlciBk
YXRhYmFzZSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKICAgICAgICAgfQot
ICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAg
ICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICBk
aXNwbGF5TmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgZXhwZWN0
ZWRVc2FnZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgfQogCiAgICAgU3Ry
aW5nIHBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmFsc2UpOwpAQCAt
NDc0LDM5ICs0NzQsNDEgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWls
cyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QKICAgICBvcGVuVHJhY2tl
ckRhdGFiYXNlKENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmll
cik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwogCi0gICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQotICAgICAg
ICBndWlkID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIHN0YXRlbWVudC5maW5h
bGl6ZSgpOwotCi0gICAgaWYgKGd1aWQgPT0gMCkgewotICAgICAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9ET05FKQotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhp
c3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIg
LSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRhYmFzZSBkZXRhaWxzIGZvciBhIGRhdGFi
YXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRoZSB0cmFja2VyCi0gICAgICAgICAg
ICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBu
b3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZh
bGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQotICAgICAgICAgICAgLy8gU28gd2UnbGwg
cHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
cmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdGhlIHRyYWNr
ZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNldCBkYXRhYmFzZSBkZXRhaWxzIG9uIGEg
ZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7CisgICAgewor
ICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyJfcyk7Cisg
ICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVu
dC0+YmluZFRleHQoMiwgbmFtZSk7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBn
dWlkID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKKworICAgICAgICBpZiAoIWd1aWQp
IHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVz
IGluIG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBv
cmlnaW5JZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBu
ZXZlciBiZSBzZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vz
bid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIKKyAgICAgICAgICAgICAgICAvLyBCdXQg
c2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCByZXNvdXJjZSBub3QgdW5kZXIg
Y29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21ld2hhdCBpbnZhbGlkIHRvIG1h
a2UgdGhpcyBhbiBBU1NFUlQgY2FzZQorICAgICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHByaW50
IGFuIGVycm9yIGluc3RlYWQKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBy
ZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tl
ciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8gc2V0IGRhdGFiYXNlIGRldGFpbHMgb24gYSBk
YXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlciIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
VVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJF
IGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiVVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdI
RVJFIGd1aWQ9PyJfcyk7CisgICAgaWYgKCF1cGRhdGVTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAg
dXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKLSAgICB1cGRhdGVT
dGF0ZW1lbnQuYmluZEludDY0KDMsIGd1aWQpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZFRl
eHQoMSwgZGlzcGxheU5hbWUpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDIsIGVz
dGltYXRlZFNpemUpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDMsIGd1aWQpOwog
Ci0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBp
ZiAodXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdp
biAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luSWRlbnRpZmllci51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3MSwxNSArNjczLDE1IEBAIHVpbnQ2NF90
IERhdGFiYXNlVHJhY2tlcjo6cXVvdGFOb0xvY2soY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBv
cmlnaW4pCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gcXVv
dGE7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
cXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/OyIpOwotICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcXVvdGEgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdp
bj0/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgIHJldHVybiBxdW90YTsKICAgICB9
Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkp
OwogCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgcXVv
dGEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgaWYgKHN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHF1b3RhID0gc3RhdGVtZW50LT5nZXRDb2x1bW5J
bnQ2NCgwKTsKIAogICAgIHJldHVybiBxdW90YTsKIH0KQEAgLTcwNSwyNiArNzA3LDI2IEBAIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9y
aWdpbiwgdWludDY0X3QgcXVvdGEpCiAKICAgICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFz
RW50cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKICAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3Rz
KSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VS
VCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJf
cyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICVzIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDIsIHF1b3RhKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAg
ICAgICAgICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIHF1b3RhKTsKIAotICAgICAgICAgICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICBpZiAoc3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBpbnNlcnRlZE5ld09yaWdpbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJV
UERBVEUgT3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAgICBib29s
IGVycm9yID0gc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0s7CisgICAgICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT3JpZ2lucyBT
RVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGJvb2wgZXJyb3IgPSAhc3Rh
dGVtZW50OwogICAgICAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQuYmlu
ZEludDY0KDEsIHF1b3RhKTsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBvcmln
aW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50
NjQoMSwgcXVvdGEpOworICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQu
ZXhlY3V0ZUNvbW1hbmQoKTsKKyAgICAgICAgICAgIGVycm9yID0gIXN0YXRlbWVudC0+ZXhlY3V0
ZUNvbW1hbmQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlcnJvcikKQEAgLTc0OCwxNiAr
NzUwLDE2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZShjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nCiAgICAgLy8gTmV3IGRhdGFiYXNlIHNo
b3VsZCBuZXZlciBiZSBhZGRlZCB1bnRpbCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVk
CiAgICAgQVNTRVJUKGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpOwogCi0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2Vz
IChvcmlnaW4sIG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNl
cyAob3JpZ2luLCBuYW1lLCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcyk7CiAKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgaWYgKCFzdGF0ZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4u
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsK
LSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMywgcGF0aCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMiwgbmFtZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIGlm
ICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIXN0YXRlbWVudC0+ZXhl
Y3V0ZUNvbW1hbmQoKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhZGQgZGF0YWJh
c2UgJXMgdG8gb3JpZ2luICVzOiAlc1xuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0
YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC04ODEsMjggKzg4MywyOCBAQCBi
b29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0
YSYgb3JpZ2luLCBEZWxldGlvbk1vZAogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2Fj
dGlvbihtX2RhdGFiYXNlKTsKICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRh
YmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iX3MpOwor
ICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcHJlcGFyZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFj
a2VyIiwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGVtZW50LmJpbmRU
ZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpZiAo
IXN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIGlmICghc3RhdGVtZW50LT5l
eGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVj
dXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBv
cmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2lu
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/
Iik7Ci0gICAgICAgIGlmIChvcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworICAgICAgICBhdXRvIG9yaWdpblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiREVMRVRFIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgICAgIGlm
ICghb3JpZ2luU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4uZGF0YWJh
c2VJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KIAotICAgICAgICBvcmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2lu
LmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgb3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlmICghb3JpZ2lu
U3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1l
bnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGV4ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tl
ciIsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtOTE1LDEwICs5MTcsMTAgQEAgYm9vbCBE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9y
aWdpbiwgRGVsZXRpb25Nb2QKIAogICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKERvbnRDcmVh
dGVJZkRvZXNOb3RFeGlzdCk7CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0g
ICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
b3JpZ2luIEZST00gT3JpZ2lucyIpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAg
ICAgICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAg
ICAgICAgIH0KIApAQCAtMTA4MSwxNyArMTA4MywxNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0
cgogCiAgICAgTG9ja0hvbGRlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQg
bmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZy
b20gdHJhY2tlciIsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmll
cigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4s
IG5hbWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGVtZW50LmJp
bmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIG5hbWUpOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG5hbWUpOwogCi0g
ICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGlmICghc3RhdGVtZW50
LT5leGVjdXRlQ29tbWFuZCgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1
dGUgZGVsZXRpb24gb2YgZGF0YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgIGRvbmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTExOTcsMTMgKzExOTksMTEgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZGF0YWJhc2VzIDogKmRhdGFiYXNlTmFtZU1hcCkgewogICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lID0gZGF0YWJhc2VzLmtleTsKICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJh
c2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VO
YW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGVtZW50LmZpbmFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBEYXRhYmFz
ZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiX3MpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNl
TmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1l
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRl
ZERhdGFiYXNlID0gZmFsc2U7CkBAIC0xMjU4LDEzICsxMjU4LDE0IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGVJZkVtcHR5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAg
ICAKICAgICAvLyBTcGVjaWZ5IHRoYXQgd2Ugd2FudCB0aGUgZXhjbHVzaXZlIGxvY2tpbmcgbW9k
ZSwgc28gYWZ0ZXIgdGhlIG5leHQgd3JpdGUsCiAgICAgLy8gd2UnbGwgYmUgaG9sZGluZyB0aGUg
bG9jayB0byB0aGlzIGRhdGFiYXNlIGZpbGUuCi0gICAgU1FMaXRlU3RhdGVtZW50IGxvY2tTdGF0
ZW1lbnQoZGF0YWJhc2UsICJQUkFHTUEgbG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiKTsKLSAgICBp
ZiAobG9ja1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9IGxvY2tTdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1bHQgIT0gU1FMSVRFX0RPTkUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBsb2NrU3RhdGVtZW50LmZpbmFsaXplKCk7CisgICAgeworICAgICAg
ICBhdXRvIGxvY2tTdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEg
bG9ja2luZ19tb2RlPUVYQ0xVU0lWRTsiX3MpOworICAgICAgICBpZiAoIWxvY2tTdGF0ZW1lbnQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGludCByZXN1bHQgPSBsb2NrU3Rh
dGVtZW50LT5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVyAmJiByZXN1
bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAg
ICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNU
SU9OOyIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKaW5kZXggNGMyOTYxNThhZDI5ZGJj
ZTVmMDUwNmRjY2U2NzEyOWExYzNhOTVkMS4uOWIxOTBjYWE5NjNlNWExYTc1MmFkOWVmMjQ2MDUx
Yzg0NjJlYTMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50LmNwcApAQCAtMTEyLDI4ICsxMTIsMjYgQEAgYm9vbCBTUUxTdGF0ZW1l
bnQ6OmV4ZWN1dGUoRGF0YWJhc2UmIGRiKQogCiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNl
ID0gZGIuc3FsaXRlRGF0YWJhc2UoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
ZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBh
cmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBl
cnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9JTlRFUlJV
UFQpCi0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJy
dXB0ZWQiKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
bV9zdGF0ZW1lbnQpOworICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJv
ciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHN0YXRlbWVudC5lcnJvcigp
LCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQuZXJyb3Io
KSA9PSBTUUxJVEVfSU5URVJSVVBUKQorICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpj
cmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVu
dCIsIHN0YXRlbWVudC5lcnJvcigpLCAiaW50ZXJydXB0ZWQiKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIs
ICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpTWU5UQVhfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50Iiwgc3RhdGVtZW50LmVy
cm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3lu
dGF4IHN1cHBvcnRlZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5
IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgogICAgIC8vIElm
IHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBm
aXNoeSBvciBtYWxpY2lvdXMKLSAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgp
ICE9IG1fYXJndW1lbnRzLnNpemUoKSkgeworICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRQYXJhbWV0
ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9u
IG1hcmtzIik7CiAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpT
WU5UQVhfRVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBt
YXRjaCBhcmd1bWVudCBjb3VudCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ld
KTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+YmluZFZhbHVlKGkgKyAxLCBtX2Fy
Z3VtZW50c1tpXSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpIHsKICAgICAg
ICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNDksMjAgKzE0NywyMCBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFz
ZSYgZGIpCiAgICAgYXV0byByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgpOwogCiAg
ICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4KLSAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
ICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgU1FMSVRFX1JPVzogewotICAgICAgICBp
bnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNv
bHVtbkNvdW50ID0gc3RhdGVtZW50LT5jb2x1bW5Db3VudCgpOwogICAgICAgICBhdXRvJiByb3dz
ID0gcmVzdWx0U2V0LT5yb3dzKCk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1
bW5Db3VudDsgaSsrKQotICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENv
bHVtbk5hbWUoaSkpOworICAgICAgICAgICAgcm93cy5hZGRDb2x1bW4oc3RhdGVtZW50LT5nZXRD
b2x1bW5OYW1lKGkpKTsKIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgcm93cy5hZGRSZXN1bHQo
c3RhdGVtZW50LmdldENvbHVtblZhbHVlKGkpKTsKKyAgICAgICAgICAgICAgICByb3dzLmFkZFJl
c3VsdChzdGF0ZW1lbnQtPmdldENvbHVtblZhbHVlKGkpKTsKIAotICAgICAgICAgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwogICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVyk7CiAKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGNh
YmE5OGNiNTc5YmRjMTRjMTNiYTMxMTMzNTQ2NGFlMmM1MTIxYy4uMDk3NDg4OTJkNmFkN2IwODNj
NmE5NGE0MmY2MjY5M2VjYmIxYjE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC05OCwxMyAr
OTgsMTMgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
bG9hZENhY2hlR3JvdXAoY29uc3QgVVJMJiBtYW5pZmUKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlkLCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUg
RlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZl
c3RVUkw9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlk
LCBtYW5pZmVzdFVSTCwgbmV3ZXN0Q2FjaGUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RD
YWNoZSBJUyBOT1QgTlVMTCBBTkQgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBtYW5pZmVzdFVSTC5zdHJpbmcoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBt
YW5pZmVzdFVSTC5zdHJpbmcoKSk7CiAgICAKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxJVEVfRE9ORSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xMTMs
MTQgKzExMywxNCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBVUkwmIG1hbmlmZQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVTdG9yYWdlSUQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICB1
bnNpZ25lZCBuZXdlc3RDYWNoZVN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0
ZW1lbnQtPmdldENvbHVtbkludDY0KDIpKTsKIAogICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUo
bmV3ZXN0Q2FjaGVTdG9yYWdlSUQpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICAKICAgICBhdXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgZ3JvdXAuc2V0U3RvcmFnZUlEKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICBncm91
cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50NjQoMCkpKTsKICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICByZXR1cm4gJmdyb3VwOwogfSAgICAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMoKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGZXRjaCB0aGUgaG9zdCBoYXNoZXMuCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0SG9zdEhhc2gg
RlJPTSBDYWNoZUdyb3VwcyIpOyAgICAKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCBtYW5pZmVzdEhvc3RIYXNoIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlm
ICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsKKyAgICB3aGls
ZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgbV9jYWNoZUhvc3RT
ZXQuYWRkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDAp
KSk7CiB9ICAgIAogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQpAQCAtMjEyLDEzICsyMTIsMTMg
QEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVH
cm91cEZvclVSTChjb25zdCBVUkwmIHVybCkKICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jl
c3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAKICAgICAvLyBDaGVjayB0aGUgZGF0
YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlm
ZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElT
IE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
aWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2Vz
dENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0
VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgIHdoaWxlICgo
cmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJM
IG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAog
ICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmco
KSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IFVSTCYgdXJsKQogCiAgICAgICAgIC8vIFdlIGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBt
YXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2VzdCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRo
CiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgVVJMLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNo
ZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7
CisgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2Fk
Q2FjaGUobmV3ZXN0Q2FjaGVJRCk7CiAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTI0MCw3ICsyNDAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYXV0byYgZ3JvdXAgPSAqbmV3IEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCgqdGhpcywgbWFuaWZlc3RVUkwpOwotICAgICAgICBncm91cC5zZXRTdG9y
YWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkp
OworICAgICAgICBncm91cC5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50NjQoMCkpKTsKICAgICAgICAgZ3JvdXAuc2V0TmV3ZXN0Q2FjaGUo
Y2FjaGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIG1fY2FjaGVzSW5NZW1vcnkuc2V0KGdy
b3VwLm1hbmlmZXN0VVJMKCkuc3RyaW5nKCksICZncm91cCk7CiAKQEAgLTI3OSwxMyArMjc5LDEz
IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxi
YWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBVCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICAKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sgZm9yIGFsbCBjYWNoZSBncm91
cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBGUk9NIENhY2hl
R3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7Ci0gICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdlc3RDYWNoZSBG
Uk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIl9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaW50IHJl
c3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9S
T1cpIHsKLSAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVtZW50LmdldENv
bHVtblRleHQoMSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCkpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgVVJMIG1hbmlmZXN0VVJMID0gVVJMKHsgfSwgc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAobV9jYWNoZXNJbk1lbW9yeS5j
b250YWlucyhtYW5pZmVzdFVSTC5zdHJpbmcoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTI5Niw3ICsyOTYsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgVQogCiAgICAgICAgIC8vIFdl
IGZvdW5kIGEgY2FjaGUgZ3JvdXAgdGhhdCBtYXRjaGVzLiBOb3cgY2hlY2sgaWYgdGhlIG5ld2Vz
dCBjYWNoZSBoYXMgYSByZXNvdXJjZSB3aXRoCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgZmFsbGJh
Y2sgbmFtZXNwYWNlLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CisgICAgICAgIHVuc2ln
bmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQ2NCgyKSk7CiAgICAgICAgIGF1dG8gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2Fj
aGVJRCk7CiAKICAgICAgICAgVVJMIGZhbGxiYWNrVVJMOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2Fj
aGVHcm91cEZvclVSTChjb25zdCBVCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBh
dXRvJiBncm91cCA9ICpuZXcgQXBwbGljYXRpb25DYWNoZUdyb3VwKCp0aGlzLCBtYW5pZmVzdFVS
TCk7Ci0gICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CisgICAgICAgIGdyb3VwLnNldFN0b3JhZ2VJRChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAg
ICAgICBncm91cC5zZXROZXdlc3RDYWNoZShjYWNoZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAg
ICAgICBtX2NhY2hlc0luTWVtb3J5LnNldChncm91cC5tYW5pZmVzdFVSTCgpLnN0cmluZygpLCAm
Z3JvdXApOwpAQCAtNDE2LDE3ICs0MTYsMTcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWcKICAg
ICAvLyBJZiBhbiBPcmlnaW4gcmVjb3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdp
bGwgYmUgMCBhbmQgcXVvdGEgd2lsbCBiZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBk
ZXRlcm1pbmUgaWYgYSByZWNvcmQgZXhpc3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRl
cm1pbmUKICAgICAvLyBpZiBhIHF1b3RhIG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBv
ciBmcm9tIG51bGwuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIENPVU5UKHF1b3RhKSwgcXVvdGEgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7
Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQocXVvdGEp
LCBxdW90YSBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghc3RhdGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwg
b3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgp
LmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHF1b3RhLCBvciBpZiBpdCB3YXMgbnVsbCB0aGUgZGVm
YXVsdC4KICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgYm9vbCB3YXNO
b1JlY29yZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSA9PSAwOwotICAgICAgICBxdW90
YSA9IHdhc05vUmVjb3JkID8gbV9kZWZhdWx0T3JpZ2luUXVvdGEgOiBzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMSk7CisgICAgICAgIGJvb2wgd2FzTm9SZWNvcmQgPSAhc3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgcXVvdGEgPSB3YXNOb1JlY29yZCA/IG1fZGVmYXVsdE9y
aWdpblF1b3RhIDogc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC00NDAsMTkgKzQ0MCwxOSBAQCBib29sIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpjYWxjdWxhdGVVc2FnZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmCiAKICAgICAvLyBJZiBhbiBPcmlnaW5zIHJlY29yZCBkb2Vzbid0IGV4aXN0LCB0aGVuIHRo
ZSBTVU0gd2lsbCBiZSBudWxsLAogICAgIC8vIHdoaWNoIHdpbGwgYmVjb21lIDAsIGFzIGV4cGVj
dGVkLCB3aGVuIGNvbnZlcnRpbmcgdG8gYSBudW1iZXIuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIFNVTShDYWNoZXMuc2l6ZSkiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdp
bnMgT04gQ2FjaGVHcm91cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hl
R3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iKTsKLSAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRlJPTSBDYWNoZUdy
b3VwcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdp
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIElO
TkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBXSEVSRSBP
cmlnaW5zLm9yaWdpbj0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCBy
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewotICAgICAgICB1c2FnZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAg
ICAgdXNhZ2UgPSBzdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDApOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTQ3MCw0MCArNDcwLDQwIEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNoZShj
b25zCiAKICAgICAvLyBSZW1haW5pbmcgc2l6ZSA9IHRvdGFsIG9yaWdpbiBxdW90YSAtIHNpemUg
b2YgYWxsIGNhY2hlcyB3aXRoIG9yaWdpbiBleGNsdWRpbmcgdGhlIHByb3ZpZGVkIGNhY2hlLgog
ICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBjYWNoZXMgc28gd2UgY2FuIHRlbGwg
aWYgdGhlIHJlc3VsdCB3YXMgYSBjYWxjdWxhdGlvbiBvciBub3QuCi0gICAgY29uc3QgY2hhciog
cXVlcnk7CiAgICAgaW50NjRfdCBleGNsdWRpbmdDYWNoZUlkZW50aWZpZXIgPSBjYWNoZSA/IGNh
Y2hlLT5zdG9yYWdlSUQoKSA6IDA7Ci0gICAgaWYgKGV4Y2x1ZGluZ0NhY2hlSWRlbnRpZmllciAh
PSAwKSB7Ci0gICAgICAgIHF1ZXJ5ID0gIlNFTEVDVCBDT1VOVChDYWNoZXMuc2l6ZSksIE9yaWdp
bnMucXVvdGEgLSBTVU0oQ2FjaGVzLnNpemUpIgotICAgICAgICAgICAgICAgICIgIEZST00gQ2Fj
aGVHcm91cHMiCi0gICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMgT04gQ2FjaGVH
cm91cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCi0gICAgICAgICAgICAgICAgIiBJTk5FUiBK
T0lOIENhY2hlcyBPTiBDYWNoZUdyb3Vwcy5pZCA9IENhY2hlcy5jYWNoZUdyb3VwIgotICAgICAg
ICAgICAgICAgICIgV0hFUkUgT3JpZ2lucy5vcmlnaW49PyIKLSAgICAgICAgICAgICAgICAiICAg
QU5EIENhY2hlcy5pZCE9PyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcXVlcnkgPSAiU0VMRUNU
IENPVU5UKENhY2hlcy5zaXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCi0g
ICAgICAgICAgICAgICAgIiAgRlJPTSBDYWNoZUdyb3VwcyIKLSAgICAgICAgICAgICAgICAiIElO
TkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9yaWdpbiIK
LSAgICAgICAgICAgICAgICAiIElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0g
Q2FjaGVzLmNhY2hlR3JvdXAiCi0gICAgICAgICAgICAgICAgIiBXSEVSRSBPcmlnaW5zLm9yaWdp
bj0/IjsKLSAgICB9Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
IHF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
YXV0byBxdWVyeSA9IFtleGNsdWRpbmdDYWNoZUlkZW50aWZpZXJdKCkgeworICAgICAgICBpZiAo
ZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZXR1cm4gIlNFTEVDVCBD
T1VOVChDYWNoZXMuc2l6ZSksIE9yaWdpbnMucXVvdGEgLSBTVU0oQ2FjaGVzLnNpemUpIgorICAg
ICAgICAgICAgICAgICAgICAiICBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgICAg
ICAiIElOTkVSIEpPSU4gT3JpZ2lucyBPTiBDYWNoZUdyb3Vwcy5vcmlnaW4gPSBPcmlnaW5zLm9y
aWdpbiIKKyAgICAgICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIENhY2hlcyBPTiBDYWNoZUdy
b3Vwcy5pZCA9IENhY2hlcy5jYWNoZUdyb3VwIgorICAgICAgICAgICAgICAgICAgICAiIFdIRVJF
IE9yaWdpbnMub3JpZ2luPT8iCisgICAgICAgICAgICAgICAgICAgICIgICBBTkQgQ2FjaGVzLmlk
IT0/Il9zOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKENhY2hlcy5z
aXplKSwgT3JpZ2lucy5xdW90YSAtIFNVTShDYWNoZXMuc2l6ZSkiCisgICAgICAgICAgICAgICAi
ICBGUk9NIENhY2hlR3JvdXBzIgorICAgICAgICAgICAgICAgIiBJTk5FUiBKT0lOIE9yaWdpbnMg
T04gQ2FjaGVHcm91cHMub3JpZ2luID0gT3JpZ2lucy5vcmlnaW4iCisgICAgICAgICAgICAgICAi
IElOTkVSIEpPSU4gQ2FjaGVzIE9OIENhY2hlR3JvdXBzLmlkID0gQ2FjaGVzLmNhY2hlR3JvdXAi
CisgICAgICAgICAgICAgICAiIFdIRVJFIE9yaWdpbnMub3JpZ2luPT8iX3M7CisgICAgfSgpOwor
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkp
OworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Cisg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKICAgICBpZiAoZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyICE9IDApCi0gICAgICAgIHN0
YXRlbWVudC5iaW5kSW50NjQoMiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKLSAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQo
MiwgZXhjbHVkaW5nQ2FjaGVJZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CiAKICAgICAvLyBJZiB0aGUgY291bnQgd2FzIDAgdGhhdCB0aGVuIHdlIGhhdmUg
dG8gcXVlcnkgdGhlIG9yaWdpbiB0YWJsZSBkaXJlY3RseQogICAgIC8vIGZvciBpdHMgcXVvdGEu
IE90aGVyd2lzZSB3ZSBjYW4gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgIGlmIChyZXN1
bHQgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVzID0gc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBpbnQ2NF90IG51bWJlck9mQ2FjaGVz
ID0gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgaWYgKG51bWJlck9mQ2Fj
aGVzID09IDApCiAgICAgICAgICAgICBjYWxjdWxhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIHJl
bWFpbmluZ1NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1haW5pbmdTaXplID0g
c3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgcmVtYWluaW5nU2l6ZSA9
IHN0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNTIyLDE0ICs1MjIsMTQgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG8KICAgICBp
ZiAoIWVuc3VyZU9yaWdpblJlY29yZChvcmlnaW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUg
T3JpZ2lucyBTRVQgcXVvdGE9PyBXSEVSRSBvcmlnaW49PyIpOwotICAgIGlmICh1cGRhdGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHVwZGF0ZVN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3RhPT8g
V0hFUkUgb3JpZ2luPT8iX3MpOworICAgIGlmICghdXBkYXRlU3RhdGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsK
LSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMiwgb3JpZ2luLT5kYXRhKCkuZGF0YWJhc2VJ
ZGVudGlmaWVyKCkpOworICAgIHVwZGF0ZVN0YXRlbWVudC0+YmluZEludDY0KDEsIHF1b3RhKTsK
KyAgICB1cGRhdGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0YSgpLmRhdGFiYXNl
SWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KHVwZGF0ZVN0YXRl
bWVudCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlU3RhdGVtZW50LnZhbHVl
KCkpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFu
ZChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1NCw3ICs1NTQsOCBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKICAgICBBU1NFUlQoU1FMaXRl
RGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKLSAgICBpbnQg
dmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJBR01BIHVzZXJfdmVyc2lv
biIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHZlcnNpb25TdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgIGludCB2
ZXJzaW9uID0gdmVyc2lvblN0YXRlbWVudCA/IHZlcnNpb25TdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0
dXJuOwogCkBAIC01NzAsMTEgKzU3MSwxMSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Ojp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpbnQgdW51c2VkTnVtQnl0ZXMgPSBzbnByaW50
Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBSQUdNQSB1c2VyX3Zl
cnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKICAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE51bUJ5
dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkpID49IHVudXNlZE51
bUJ5dGVzKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXNl
clZlcnNpb25TUUwpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCh1c2VyVmVy
c2lvblNRTCk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgZXhlY3V0ZVN0YXRlbWVudChzdGF0
ZW1lbnQudmFsdWUoKSk7CiAgICAgc2V0RGF0YWJhc2VWZXJzaW9uLmNvbW1pdCgpOwogfQogICAg
IApAQCAtNjUyLDggKzY1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1
dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAgQVNTRVJUKFNRTGl0
ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIGJvb2wg
cmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTogZmFpbGVkIHRvIGV4
ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCAKLSAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENhY2hlIFN0b3JhZ2U6IGZhaWxl
ZCB0byBleGVjdXRlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCkBAIC02NzAsMTUgKzY3
MCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJRAogICAgIC8vIGEgd2F5IHRvIHJlcGFpciBp
dC4KICAgICBkZWxldGVDYWNoZUdyb3VwUmVjb3JkKGdyb3VwLT5tYW5pZmVzdFVSTCgpLnN0cmlu
ZygpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VS
VCBJTlRPIENhY2hlR3JvdXBzIChtYW5pZmVzdEhvc3RIYXNoLCBtYW5pZmVzdFVSTCwgb3JpZ2lu
KSBWQUxVRVMgKD8sID8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0SGFzaCwgbWFuaWZlc3RVUkws
IG9yaWdpbikgVkFMVUVTICg/LCA/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgdXJsSG9zdEhh
c2goZ3JvdXAtPm1hbmlmZXN0VVJMKCkpKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZ3Jv
dXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgzLCBn
cm91cC0+b3JpZ2luKCkuZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBzdGF0ZW1l
bnQtPmJpbmRJbnQ2NCgxLCB1cmxIb3N0SGFzaChncm91cC0+bWFuaWZlc3RVUkwoKSkpOworICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMiwgZ3JvdXAtPm1hbmlmZXN0VVJMKCkuc3RyaW5nKCkpOwor
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgZ3JvdXAtPm9yaWdpbigpLmRhdGEoKS5kYXRhYmFz
ZUlkZW50aWZpZXIoKSk7CiAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkK
KyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50LnZhbHVlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBncm91cFN0b3JhZ2VJRCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKQEAgLTY5OCwxNCArNjk4
LDE0IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2Fj
aGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgQVNTRVJUKGNhY2hlLT5ncm91cCgp
LT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91cm5hbCk7CiAgICAg
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8g
Q2FjaGVzIChjYWNoZUdyb3VwLCBzaXplKSBWQUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNp
emUpIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5z
dG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+ZXN0aW1hdGVk
U2l6ZUluU3RvcmFnZSgpKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBjYWNoZS0+Z3Jv
dXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGNhY2hlLT5l
c3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpOwogCi0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0
YXRlbWVudCkpCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlE
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwpA
QCAtNzI1LDI2ICs3MjUsMjggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICBjb25zdCBW
ZWN0b3I8VVJMPiYgb25saW5lQWxsb3dsaXN0ID0gY2FjaGUtPm9ubGluZUFsbG93bGlzdCgpOwog
ICAgIHsKICAgICAgICAgZm9yIChhdXRvJiBhbGxvd2xpc3RVUkwgOiBvbmxpbmVBbGxvd2xpc3Qp
IHsKLSAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIp
OwotICAgICAgICAgICAgc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICAgICAgICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVdo
aXRlbGlzdFVSTHMgKHVybCwgY2FjaGUpIFZBTFVFUyAoPywgPykiX3MpOworICAgICAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgYWxsb3dsaXN0VVJMLnN0cmluZygpKTsKLSAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOworICAgICAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBhbGxvd2xpc3RVUkwuc3RyaW5nKCkpOworICAgICAg
ICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAg
ICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlmICgh
ZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RvcmUgb25saW5lIGFsbG93
bGlzdCB3aWxkY2FyZCBmbGFnLgogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVz
dHMgKHdpbGRjYXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBzdGF0ZW1lbnQu
cHJlcGFyZSgpOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiSU5TRVJUIElOVE8gQ2FjaGVBbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMgKHdpbGRj
YXJkLCBjYWNoZSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgY2FjaGUtPmFsbG93c0FsbE5ldHdvcmtSZXF1ZXN0cygpKTsKLSAgICAgICAgc3RhdGVtZW50
LmJpbmRJbnQ2NCgyLCBjYWNoZVN0b3JhZ2VJRCk7CisgICAgICAgIHN0YXRlbWVudC0+YmluZElu
dDY0KDEsIGNhY2hlLT5hbGxvd3NBbGxOZXR3b3JrUmVxdWVzdHMoKSk7CisgICAgICAgIHN0YXRl
bWVudC0+YmluZEludDY0KDIsIGNhY2hlU3RvcmFnZUlEKTsKIAotICAgICAgICBpZiAoIWV4ZWN1
dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0
YXRlbWVudC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
CkBAIC03NTIsMTQgKzc1NCwxNSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIGNvbnN0
IEZhbGxiYWNrVVJMVmVjdG9yJiBmYWxsYmFja1VSTHMgPSBjYWNoZS0+ZmFsbGJhY2tVUkxzKCk7
CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIGZhbGxiYWNrVVJMIDogZmFsbGJhY2tVUkxzKSB7
Ci0gICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwsIGNhY2hlKSBWQUxV
RVMgKD8sID8sID8pIik7Ci0gICAgICAgICAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgICAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIEZhbGxiYWNrVVJMcyAobmFtZXNwYWNlLCBmYWxsYmFja1VSTCwgY2FjaGUpIFZBTFVF
UyAoPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwg
ZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRU
ZXh0KDIsIGZhbGxiYWNrVVJMLnNlY29uZC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGF0ZW1l
bnQuYmluZEludDY0KDMsIGNhY2hlU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMSwgZmFsbGJhY2tVUkwuZmlyc3Quc3RyaW5nKCkpOworICAgICAgICAgICAgc3Rh
dGVtZW50LT5iaW5kVGV4dCgyLCBmYWxsYmFja1VSTC5zZWNvbmQuc3RyaW5nKCkpOworICAgICAg
ICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMywgY2FjaGVTdG9yYWdlSUQpOwogCi0gICAgICAg
ICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgIGlmICgh
ZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDE0ICs3ODQsMTQgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBy
ZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3Qs
IGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVT
ICg/LCA/KSIpOwotICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
CisgICAgYXV0byBkYXRhU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJ
TlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSJf
cyk7CisgICAgaWYgKCFkYXRhU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAKICAgICBTdHJpbmcgZnVsbFBhdGg7CiAgICAgaWYgKCFyZXNvdXJjZS0+cGF0aCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRo
RmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOworICAgICAgICBkYXRhU3RhdGVtZW50LT5iaW5k
VGV4dCgyLCBGaWxlU3lzdGVtOjpwYXRoRmlsZU5hbWUocmVzb3VyY2UtPnBhdGgoKSkpOwogICAg
IGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKHJlc291cmNlKSkgewogICAg
ICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5nIHRoZSBmbGF0IGZpbGUgd291
bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gV2UgZG9uJ3QgbmVlZAogICAgICAg
ICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90YSBoZXJlLCBhcyBpdCB3YXMgYWxyZWFk
eSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4KQEAgLTgxMywxMyArODE2LDEzIEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgICAgIAogICAgICAgICBmdWxsUGF0aCA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7
CiAgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsKLSAgICAgICAgZGF0YVN0YXRl
bWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICAgICAgZGF0YVN0YXRlbWVudC0+YmluZFRleHQo
MiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJlc291cmNlLT5kYXRhKCkuc2l6
ZSgpKQotICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0
YSgpLmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgZGF0YVN0
YXRlbWVudC0+YmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS5kYXRhKCksIHJlc291cmNlLT5k
YXRhKCkuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCkpIHsKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCkp
IHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRl
biB0bzoKICAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGZ1bGxQYXRoKTsKQEAgLTg0MywzNiArODQ2LDM2IEBAIGJvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSog
cmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgCiAgICAgU3RyaW5nIGhlYWRlcnMgPSBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlc291cmNlU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlcyAodXJsLCBzdGF0dXND
b2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05h
bWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiKTsKLSAgICBpZiAocmVzb3VyY2VTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHJlc291cmNlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNl
cyAodXJsLCBzdGF0dXNDb2RlLCByZXNwb25zZVVSTCwgaGVhZGVycywgZGF0YSwgbWltZVR5cGUs
IHRleHRFbmNvZGluZ05hbWUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3MpOworICAg
IGlmICghcmVzb3VyY2VTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgYXJlIHVzZWQgaW4gQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIGFwcHJv
eGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlIG9iamVjdC4gSWYKICAg
ICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2UgYWxzbyBjaGFuZ2UgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCi0gICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRl
eHQoMSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICByZXNvdXJjZVN0YXRlbWVudC5i
aW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7Ci0gICAg
cmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJsKCku
c3RyaW5nKCkpOwotICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDQsIGhlYWRlcnMpOwot
ICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRJbnQ2NCg1LCBkYXRhSWQpOwotICAgIHJlc291cmNl
U3RhdGVtZW50LmJpbmRUZXh0KDYsIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwot
ICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDcsIHJlc291cmNlLT5yZXNwb25zZSgpLnRl
eHRFbmNvZGluZ05hbWUoKSk7Ci0KLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQocmVzb3VyY2VT
dGF0ZW1lbnQpKQorICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCByZXNvdXJjZS0+
dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgcmVz
b3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgcmVzb3VyY2VTdGF0ZW1l
bnQtPmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVybCgpLnN0cmluZygpKTsKKyAg
ICByZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoNCwgaGVhZGVycyk7CisgICAgcmVzb3VyY2VT
dGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBkYXRhSWQpOworICAgIHJlc291cmNlU3RhdGVtZW50LT5i
aW5kVGV4dCg2LCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKKyAgICByZXNvdXJj
ZVN0YXRlbWVudC0+YmluZFRleHQoNywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5n
TmFtZSgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChyZXNvdXJjZVN0YXRlbWVudC52
YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgcmVzb3VyY2VJ
ZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsK
ICAgICAKICAgICAvLyBGaW5hbGx5LCBpbnNlcnQgdGhlIGNhY2hlIGVudHJ5Ci0gICAgU1FMaXRl
U3RhdGVtZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUVu
dHJpZXMgKGNhY2hlLCB0eXBlLCByZXNvdXJjZSkgVkFMVUVTICg/LCA/LCA/KSIpOwotICAgIGlm
IChlbnRyeVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIENhY2hl
RW50cmllcyAoY2FjaGUsIHR5cGUsIHJlc291cmNlKSBWQUxVRVMgKD8sID8sID8pIl9zKTsKKyAg
ICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
ZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlU3RvcmFnZUlEKTsKLSAgICBlbnRyeVN0
YXRlbWVudC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnR5cGUoKSk7Ci0gICAgZW50cnlTdGF0ZW1l
bnQuYmluZEludDY0KDMsIHJlc291cmNlSWQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50
NjQoMSwgY2FjaGVTdG9yYWdlSUQpOworICAgIGVudHJ5U3RhdGVtZW50LT5iaW5kSW50NjQoMiwg
cmVzb3VyY2UtPnR5cGUoKSk7CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgzLCByZXNv
dXJjZUlkKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQp
KQorICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudC52YWx1ZSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIERpZCB3ZSBzdWNjZXNzZnVsbHkgd3Jp
dGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywKQEAgLTg5MywxNCArODk2LDE0
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFR5cGUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAgICAgQVNTRVJUKHJlc291cmNlLT5zdG9yYWdl
SUQoKSk7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVt
ZW50IGVudHJ5U3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVFbnRyaWVzIFNFVCB0
eXBlPT8gV0hFUkUgcmVzb3VyY2U9PyIpOwotICAgIGlmIChlbnRyeVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gZW50cnlTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBDYWNoZUVudHJpZXMgU0VUIHR5cGU9PyBXSEVSRSByZXNv
dXJjZT0/Il9zKTsKKyAgICBpZiAoIWVudHJ5U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBlbnRyeVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnR5cGUoKSk7
Ci0gICAgZW50cnlTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7
CisgICAgZW50cnlTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+dHlwZSgpKTsKKyAg
ICBlbnRyeVN0YXRlbWVudC0+YmluZEludDY0KDIsIHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAK
LSAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CisgICAgcmV0dXJu
IGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQudmFsdWUoKSk7CiB9CiAKIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVz
b3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpAQCAtOTI2LDE0ICs5MjksMTQgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiByZXNvdXJjZSwgQXBwbGljYXQKICAgICB9CiAKICAgICAvLyBBIHJlc291cmNlIHdhcyBhZGRl
ZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0YSBzaXplIGZvciB0aGUgY2FjaGUu
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQ
REFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8iKTsKLSAgICBpZiAoc2l6ZVVw
ZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc2l6ZVVwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIENhY2hlcyBT
RVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzaXplVXBkYXRlU3RhdGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKLSAgICBzaXpl
VXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworICAgIHNp
emVVcGRhdGVTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LT5iaW5kSW50NjQoMiwgY2FjaGUt
PnN0b3JhZ2VJRCgpKTsKIAotICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRlU3Rh
dGVtZW50KSkKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc2l6ZVVwZGF0ZVN0YXRlbWVudC52
YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN0b3JlUmVzb3VyY2VU
cmFuc2FjdGlvbi5jb21taXQoKTsKQEAgLTk0MywxMyArOTQ2LDEzIEBAIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Us
IEFwcGxpY2F0CiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNv
cmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBBU1NFUlQoU1FMaXRlRGF0
YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3Jp
Z2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChpbnNlcnRPcmln
aW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIGluc2VydE9yaWdp
blN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gT3Jp
Z2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFpbnNlcnRP
cmlnaW5TdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGluc2VydE9yaWdp
blN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7Ci0gICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBtX2RlZmF1bHRPcmln
aW5RdW90YSk7Ci0gICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGluc2VydE9yaWdpblN0YXRlbWVu
dCkpCisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGEo
KS5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW5zZXJ0T3JpZ2luU3RhdGVtZW50LT5iaW5k
SW50NjQoMiwgbV9kZWZhdWx0T3JpZ2luUXVvdGEpOworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQudmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAyNiwxNiArMTAyOSwxNiBAQCBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCYg
Z3JvdXAsIEFwcAogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgbmV3ZXN0IGNhY2hlIGluIHRoZSBn
cm91cC4KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJV
UERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9PyIpOwotICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5l
d2VzdENhY2hlPT8gV0hFUkUgaWQ9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAg
ICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91cC5u
ZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBn
cm91cC5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZ3JvdXAubmV3
ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludDY0KDIsIGdy
b3VwLnN0b3JhZ2VJRCgpKTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVt
ZW50KSkgeworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQudmFsdWUoKSkpIHsK
ICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IERpc2tPck9wZXJhdGlvbkZhaWx1cmU7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDkzLDM0ICsxMDk2LDM0IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zCiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7CiAgICAgQVNTRVJUKFNRTGl0
ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5cGUs
IHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hl
UmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291
cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0
YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hl
RW50cmllcy5jYWNoZT0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spIHsKKyAgICBhdXRvIGNhY2hlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENh
Y2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJl
c291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAg
ICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5p
ZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Il9zKTsKKyAg
ICBpZiAoIWNhY2hlU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHBy
ZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIGNhY2hl
U3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOworICAgIGNhY2hlU3RhdGVtZW50LT5i
aW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIGF1dG8gY2FjaGUgPSBBcHBsaWNhdGlvbkNh
Y2hlOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBtX2ZsYXRGaWxl
U3ViZGlyZWN0b3J5TmFtZSk7CiAKICAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0
ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFVSTCB1
cmwoeyB9LCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoKHJl
c3VsdCA9IGNhY2hlU3RhdGVtZW50LT5zdGVwKCkpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
VVJMIHVybCh7IH0sIGNhY2hlU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAg
Ci0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtbklu
dCgxKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gY2FjaGVTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgxKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNhY2hlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKKyAgICAgICAgdW5zaWduZWQg
dHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uSW50
NjQoMikpOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBibG9iOwotICAgICAgICBjYWNoZVN0YXRl
bWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CisgICAgICAgIGNhY2hlU3RhdGVt
ZW50LT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoNiwgYmxvYik7CiAgICAgICAgIAogICAgICAgICBh
dXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJsb2IpKTsKICAgICAgICAg
Ci0gICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg3KTsK
KyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCg3KTsK
ICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAwOwogICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOwpAQCAtMTEyOSwxMyArMTEzMiwxMyBA
QCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRD
YWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiAgICAgICAgICAgICBzaXplID0gRmlsZVN5c3RlbTo6
ZmlsZVNpemUocGF0aCkudmFsdWVPcigwKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
U3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgzKTsKLSAgICAg
ICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDQpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC0+Z2V0Q29sdW1u
VGV4dCgzKTsKKyAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVu
dC0+Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgCiAgICAgICAgIFJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSk7CiAgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKIAotICAgICAgICBT
dHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNSk7CisgICAgICAg
IFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQtPmdldENvbHVtblRleHQoNSk7CiAgICAg
ICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAogICAgICAgICBh
dXRvIHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCByZXNw
b25zZSwgdHlwZSwgV1RGTW92ZShkYXRhKSwgcGF0aCk7CkBAIC0xMTU1LDE0ICsxMTU4LDE0IEBA
IFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENh
Y2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKICAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBvbmxpbmUg
YWxsb3dsaXN0Ci0gICAgU1FMaXRlU3RhdGVtZW50IGFsbG93bGlzdFN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIHVybCBGUk9NIENhY2hlV2hpdGVsaXN0VVJMcyBXSEVSRSBjYWNoZT0/Iik7
Ci0gICAgaWYgKGFsbG93bGlzdFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAg
IGF1dG8gYWxsb3dsaXN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgdXJsIEZST00gQ2FjaGVXaGl0ZWxpc3RVUkxzIFdIRVJFIGNhY2hlPT8iX3MpOworICAg
IGlmICghYWxsb3dsaXN0U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBh
bGxvd2xpc3RTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CisgICAgYWxsb3dsaXN0
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKICAgICAKICAgICBWZWN0b3I8VVJM
PiBhbGxvd2xpc3Q7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBhbGxvd2xpc3RTdGF0ZW1lbnQuc3Rl
cCgpKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBhbGxvd2xpc3QuYXBwZW5kKFVSTCh7IH0sIGFs
bG93bGlzdFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKChyZXN1bHQg
PSBhbGxvd2xpc3RTdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgYWxs
b3dsaXN0LmFwcGVuZChVUkwoeyB9LCBhbGxvd2xpc3RTdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCiAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGxvYWQgY2FjaGUgb25saW5lIGFsbG93bGlzdCwgZXJyb3IgXCIlc1wiIiwg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMTcwLDI5ICsxMTczLDI5IEBAIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVu
c2lnbmVkIHN0b3JhZ2VJRCkKICAgICBjYWNoZS0+c2V0T25saW5lQWxsb3dsaXN0KGFsbG93bGlz
dCk7CiAKICAgICAvLyBMb2FkIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZy4KLSAgICBT
UUxpdGVTdGF0ZW1lbnQgYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCB3aWxkY2FyZCBGUk9NIENhY2hlQWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzIFdIRVJFIGNh
Y2hlPT8iKTsKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykKKyAgICBhdXRvIGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgd2lsZGNhcmQgRlJPTSBDYWNoZUFsbG93c0Fs
bE5ldHdvcmtSZXF1ZXN0cyBXSEVSRSBjYWNoZT0/Il9zKTsKKyAgICBpZiAoIWFsbG93bGlzdFdp
bGRjYXJkU3RhdGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhbGxvd2xpc3RX
aWxkY2FyZFN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKKyAgICBhbGxvd2xpc3RX
aWxkY2FyZFN0YXRlbWVudC0+YmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAgICAgCi0gICAgcmVz
dWx0ID0gYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3RlcCgpOworICAgIHJlc3VsdCA9IGFs
bG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxJ
VEVfUk9XKQogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBsb2FkIGNhY2hlIG9ubGluZSBh
bGxvd2xpc3Qgd2lsZGNhcmQgZmxhZywgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAKLSAgICBjYWNoZS0+c2V0QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93
bGlzdFdpbGRjYXJkU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKTsKKyAgICBjYWNoZS0+c2V0
QWxsb3dzQWxsTmV0d29ya1JlcXVlc3RzKGFsbG93bGlzdFdpbGRjYXJkU3RhdGVtZW50LT5nZXRD
b2x1bW5JbnQ2NCgwKSk7CiAKLSAgICBpZiAoYWxsb3dsaXN0V2lsZGNhcmRTdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKQorICAgIGlmIChhbGxvd2xpc3RXaWxkY2FyZFN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKQogICAgICAgICBMT0dfRVJST1IoIlRvbyBtYW55IHJvd3Mg
Zm9yIG9ubGluZSBhbGxvd2xpc3Qgd2lsZGNhcmQgZmxhZyIpOwogCiAgICAgLy8gTG9hZCBmYWxs
YmFjayBVUkxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBmYWxsYmFja1N0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIG5hbWVzcGFjZSwgZmFsbGJhY2tVUkwgRlJPTSBGYWxsYmFja1VSTHMgV0hF
UkUgY2FjaGU9PyIpOwotICAgIGlmIChmYWxsYmFja1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQorICAgIGF1dG8gZmFsbGJhY2tTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBuYW1lc3BhY2UsIGZhbGxiYWNrVVJMIEZST00gRmFsbGJhY2tVUkxz
IFdIRVJFIGNhY2hlPT8iX3MpOworICAgIGlmICghZmFsbGJhY2tTdGF0ZW1lbnQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGZhbGxiYWNrU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9y
YWdlSUQpOworICAgIGZhbGxiYWNrU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsK
ICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBmYWxsYmFja1VSTHM7Ci0gICAgd2hpbGUgKChy
ZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVwKCkpID09IFNRTElURV9ST1cpIAotICAgICAg
ICBmYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFVSTCh7IH0sIGZhbGxiYWNrU3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpLCBVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDEpKSkpOworICAgIHdoaWxlICgocmVzdWx0ID0gZmFsbGJhY2tTdGF0ZW1lbnQt
PnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihVUkwoeyB9LCBmYWxsYmFja1N0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSks
IFVSTCh7IH0sIGZhbGxiYWNrU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKSkpOwogCiAgICAg
aWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
bG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKQEAgLTEyMTksMjMgKzEyMjIsMjMgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogICAgIEFTU0VSVChjYWNoZS0+Z3Jv
dXAoKS0+c3RvcmFnZUlEKCkpOwogCiAgICAgLy8gQWxsIGFzc29jaWF0ZWQgZGF0YSB3aWxsIGJl
IGRlbGV0ZWQgYnkgZGF0YWJhc2UgdHJpZ2dlcnMuCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT8iKTsKLSAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlcyBXSEVSRSBp
ZD0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IHN0YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKLSAgICBleGVjdXRl
U3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgY2FjaGUt
PnN0b3JhZ2VJRCgpKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudC52YWx1ZSgpKTsK
IAogICAgIGNhY2hlLT5jbGVhclN0b3JhZ2VJRCgpOwogCiAgICAgaWYgKGNhY2hlLT5ncm91cCgp
LT5uZXdlc3RDYWNoZSgpID09IGNhY2hlKSB7CiAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlcmUg
YXJlIG5vIHRyaWdnZXJzIG9uIHRoZSBjYWNoZSBncm91cCwgd2hpY2ggaXMgd2h5IHRoZSBjYWNo
ZSBoYWQgdG8gYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5IGFib3ZlLgotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3JvdXBz
IFdIRVJFIGlkPT8iKTsKLSAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0spCisgICAgICAgIGF1dG8gZ3JvdXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIGlkPT8iX3MpOworICAg
ICAgICBpZiAoIWdyb3VwU3RhdGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9y
YWdlSUQoKSk7Ci0gICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOworICAg
ICAgICBncm91cFN0YXRlbWVudC0+YmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5zdG9yYWdl
SUQoKSk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQudmFsdWUoKSk7
CiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgfQpAQCAt
MTMxNiwxNCArMTMxOSwxMyBAQCBPcHRpb25hbDxWZWN0b3I8VVJMPj4gQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcygpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVj
dFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENhY2hlR3JvdXBzIik7
Ci0KLSAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8g
c2VsZWN0VVJMcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIG1hbmlmZXN0
VVJMIEZST00gQ2FjaGVHcm91cHMiX3MpOworICAgIGlmICghc2VsZWN0VVJMcykKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxVUkw+IHVybHM7Ci0gICAgd2hpbGUg
KHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHVybHMuYXBwZW5kKFVS
TCh7IH0sIHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSkpOworICAgIHdoaWxlIChzZWxlY3RV
UkxzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdXJscy5hcHBlbmQoVVJMKHsgfSwg
c2VsZWN0VVJMcy0+Z2V0Q29sdW1uVGV4dCgwKSkpOwogCiAgICAgcmV0dXJuIHVybHM7CiB9CkBA
IC0xMzMxLDMwICsxMzMzLDMwIEBAIE9wdGlvbmFsPFZlY3RvcjxVUkw+PiBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKCkKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmRlbGV0ZUNhY2hlR3JvdXBSZWNvcmQoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKIHsKICAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGlkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
aWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5pZmVzdFVSTD0/Iik7Ci0gICAgaWYgKGlkU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBpZFN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGlkIEZST00gQ2FjaGVHcm91cHMgV0hF
UkUgbWFuaWZlc3RVUkw9PyJfcyk7CisgICAgaWYgKCFpZFN0YXRlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgbWFuaWZlc3RVUkwpOwor
ICAgIGlkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CiAKLSAgICBpbnQgcmVz
dWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgIGludCByZXN1bHQgPSBpZFN0YXRlbWVudC0+
c3RlcCgpOwogICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7CisgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQtPmdldENvbHVtbkludDY0KDAp
OwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7Ci0gICAgaWYgKGNhY2hlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBjYWNoZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGNhY2hl
R3JvdXA9PyJfcyk7CisgICAgaWYgKCFjYWNoZVN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7Ci0gICAgaWYgKGdyb3VwU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBncm91cFN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUg
aWQ9PyJfcyk7CisgICAgaWYgKCFncm91cFN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOwotICAgIGV4ZWN1
dGVTdGF0ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOwotICAgIGdyb3VwU3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBncm91cElkKTsKLSAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50KTsKKyAg
ICBjYWNoZVN0YXRlbWVudC0+YmluZEludDY0KDEsIGdyb3VwSWQpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQoY2FjaGVTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZ3JvdXBTdGF0ZW1lbnQtPmJpbmRJ
bnQ2NCgxLCBncm91cElkKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50LnZh
bHVlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDA5LDIwICsxNDExLDIwIEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlbGVjdCBvbmx5IHRoZSBwYXRocyBpbiBEZWxldGVk
Q2FjaGVSZXNvdXJjZXMgdGhhdCBkbyBub3QgYWxzbyBhcHBlYXIgaW4gQ2FjaGVSZXNvdXJjZURh
dGE6Ci0gICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1Qg
RGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggIgorICAgIGF1dG8gc2VsZWN0UGF0aHMgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0
aCAiCiAgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCiAgICAgICAgICJMRUZU
IEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgogICAgICAgICAiT04gRGVsZXRlZENhY2hlUmVzb3Vy
Y2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKLSAgICAgICAgIldIRVJFIChTRUxF
Q1QgRGVsZXRlZENhY2hlUmVzb3VyY2VzLnBhdGggPT0gQ2FjaGVSZXNvdXJjZURhdGEucGF0aCkg
SVMgTlVMTCIpOworICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMu
cGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIl9zKTsKICAgICAKLSAgICBp
ZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBpZiAoIXNlbGVjdFBh
dGhzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHNlbGVjdFBhdGhzLnN0ZXAoKSAh
PSBTUUxJVEVfUk9XKQorICAgIGlmIChzZWxlY3RQYXRocy0+c3RlcCgpICE9IFNRTElURV9ST1cp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0g
c2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxl
Y3RQYXRocy0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTQzNSw3ICsxNDM3LDcgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShmdWxsUGF0aCk7Ci0gICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgpID09IFNRTElU
RV9ST1cpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLT5zdGVwKCkgPT0gU1FMSVRFX1JPVyk7
CiAgICAgCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERlbGV0ZWRDYWNoZVJl
c291cmNlcyIpOwogfQpAQCAtMTQ0NiwxNyArMTQ0OCwxNiBAQCBsb25nIGxvbmcgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHNl
bGVjdFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRh
IFdIRVJFIHBhdGggTk9UIE5VTEwiKTsKLQotICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzZWxlY3RQYXRocyA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBwYXRo
IE5PVCBOVUxMIl9zKTsKKyAgICBpZiAoIXNlbGVjdFBhdGhzKSB7CiAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGxvYWQgZmxhdCBmaWxlIGNhY2hlIHJlc291cmNlIGRhdGEsIGVycm9yIFwi
JXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKICAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKICAgICBTdHJpbmcgZmxhdEZpbGVE
aXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURp
cmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwotICAgIHdoaWxlIChzZWxlY3RQ
YXRocy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIGZ1bGxQYXRoID0gRmls
ZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBzZWxl
Y3RQYXRocy5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB3aGlsZSAoc2VsZWN0UGF0aHMtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZnVsbFBhdGggPSBGaWxlU3lzdGVtOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHNlbGVjdFBhdGhzLT5n
ZXRDb2x1bW5UZXh0KDApKTsKICAgICAgICAgdG90YWxTaXplICs9IEZpbGVTeXN0ZW06OmZpbGVT
aXplKGZ1bGxQYXRoKS52YWx1ZU9yKDApOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IGY4ZWM5
Y2Y0N2Q0YzFmYjAzOGZmNTc3NjNjMTJhZGJiODc5NTIwZDMuLjJiZjM5MTJiZDRiNzE3MjIzYjQw
Y2M0OWMxNjZjMWM5OTA1NTI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTgxLDggKzE4MSw2IEBAIGJvb2wg
Q29va2llSmFyREI6Om9wZW5EYXRhYmFzZSgpCiB2b2lkIENvb2tpZUphckRCOjpjbG9zZURhdGFi
YXNlKCkKIHsKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0YXRlbWVudCA6IG1fc3RhdGVtZW50cykKLSAgICAgICAgICAgIHN0YXRlbWVu
dC52YWx1ZS5nZXQoKS0+ZmluYWxpemUoKTsKICAgICAgICAgbV9zdGF0ZW1lbnRzLmNsZWFyKCk7
CiAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKICAgICB9CkBAIC0xOTMsNyArMTkxLDggQEAg
dm9pZCBDb29raWVKYXJEQjo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYgKGlzT25NZW1v
cnkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlBSQUdNQSB1c2VyX3ZlcnNpb24iKS5nZXRDb2x1bW5JbnQoMCk7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1
c2VyX3ZlcnNpb24iX3MpOworICAgIGludCB2ZXJzaW9uID0gc3RhdGVtZW50ID8gc3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCkgOiAwOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24p
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjczLDI1ICsyNzIsMjUgQEAgYm9vbCBDb29raWVKYXJE
Qjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlz
dHMoIkNvb2tpZSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgaW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAgaWYg
KGludGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3JpdHkg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3MpOwor
ICAgIGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1
dGUgZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50IHJl
c3VsdENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxJ
VEVfUk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0ZXAg
cmV0dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNv
bHVtbnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0gMSkg
ewogICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBpbnRl
Z3JpdHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5U
ZXh0KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5UZXh0
KDApOwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJST1Io
IkNvb2tpZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1bHRUZXh0
LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTM4NiwyMCArMzg1LDE2IEBAIE9wdGlvbmFsPFZlY3RvcjxD
b29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHks
IGNvbnN0CiAKICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IHJlcXVl
c3RVcmwgfTsKIAotICAgIGNvbnN0IFN0cmluZyBzcWwgPQotICAgICAgICAiU0VMRUNUIG5hbWUs
IHZhbHVlLCBkb21haW4sIHBhdGgsIGV4cGlyZXMsIGh0dHBvbmx5LCBzZWN1cmUsIHNlc3Npb24g
RlJPTSBDb29raWUgV0hFUkUgIlwKKyAgICBhdXRvIHBzdG10ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgbmFtZSwgdmFsdWUsIGRvbWFpbiwgcGF0aCwgZXhwaXJlcywgaHR0
cG9ubHksIHNlY3VyZSwgc2Vzc2lvbiBGUk9NIENvb2tpZSBXSEVSRSAiXAogICAgICAgICAiKE5P
VCAoKHNlc3Npb24gPSAwKSBBTkQgKGV4cGlyZXMgPCA/KSkpIgogICAgICAgICAiQU5EIChodHRw
b25seSA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIGh0dHBvbmx5KSkgIlwKICAgICAgICAgIkFO
RCAoc2VjdXJlID0gQ09BTEVTQ0UoTlVMTElGKD8sIC0xKSwgc2VjdXJlKSkgIlwKICAgICAgICAg
IkFORCAoc2Vzc2lvbiA9IENPQUxFU0NFKE5VTExJRig/LCAtMSksIHNlc3Npb24pKSAiXAogICAg
ICAgICAiQU5EICgoZG9tYWluID0gPykgT1IgKGRvbWFpbiBHTE9CID8pKSAiXAotICAgICAgICAi
T1JERVIgQlkgbGVuZ3RoKHBhdGgpIERFU0MsIGxhc3R1cGRhdGVkIjsKLQotICAgIGF1dG8gcHN0
bXQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKyAgICAg
ICAgIk9SREVSIEJZIGxlbmd0aChwYXRoKSBERVNDLCBsYXN0dXBkYXRlZCJfcyk7CiAgICAgaWYg
KCFwc3RtdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBzdG10LT5wcmVw
YXJlKCk7CiAgICAgcHN0bXQtPmJpbmRJbnQ2NCgxLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1Np
bmNlRXBvY2goKS5taWxsaXNlY29uZHMoKSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMiwgaHR0cE9u
bHkgPyAqaHR0cE9ubHkgOiAtMSk7CiAgICAgcHN0bXQtPmJpbmRJbnQoMywgc2VjdXJlID8gKnNl
Y3VyZSA6IC0xKTsKQEAgLTQxMSw5ICs0MDYsNiBAQCBPcHRpb25hbDxWZWN0b3I8Q29va2llPj4g
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdAog
ICAgIGVsc2UKICAgICAgICAgcHN0bXQtPmJpbmRUZXh0KDYsIFN0cmluZygiKi4iKSArIHJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpKTsKIAotICAgIGlmICghcHN0bXQpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KICAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwogCiAgICAgd2hp
bGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewpAQCAtNDUzLDcgKzQ0NSw2IEBAIE9w
dGlvbmFsPFZlY3RvcjxDb29raWU+PiBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0CiAgICAgICAgIGNvb2tpZS5zZXNzaW9uID0gY29va2llU2Vz
c2lvbjsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShjb29raWUpKTsKICAgICB9Ci0g
ICAgcHN0bXQtPmZpbmFsaXplKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTQ2Mywx
MSArNDU0LDExIEBAIFZlY3RvcjxDb29raWU+IENvb2tpZUphckRCOjpnZXRBbGxDb29raWVzKCkK
ICAgICBWZWN0b3I8Q29va2llPiByZXN1bHQ7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAhbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjb25zdCBTdHJp
bmcgc3FsID0gIlNFTEVDVCBuYW1lLCB2YWx1ZSwgZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRw
b25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29va2llIl9zOwotICAgIGF1dG8gcHN0bXQgPSBt
YWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKKworICAgIGF1dG8g
cHN0bXQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBuYW1lLCB2YWx1ZSwg
ZG9tYWluLCBwYXRoLCBleHBpcmVzLCBodHRwb25seSwgc2VjdXJlLCBzZXNzaW9uIEZST00gQ29v
a2llIl9zKTsKICAgICBpZiAoIXBzdG10KQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHBz
dG10LT5wcmVwYXJlKCk7CisKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7CiAgICAgICAgIENvb2tpZSBjb29raWU7CiAgICAgICAgIGNvb2tpZS5uYW1lID0gcHN0bXQt
PmdldENvbHVtblRleHQoMCk7CkBAIC00ODIsNyArNDczLDYgQEAgVmVjdG9yPENvb2tpZT4gQ29v
a2llSmFyREI6OmdldEFsbENvb2tpZXMoKQogICAgICAgICBjb29raWUuc2Vzc2lvbiA9IChwc3Rt
dC0+Z2V0Q29sdW1uSW50KDcpID09IDEpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUo
Y29va2llKSk7CiAgICAgfQotICAgIHBzdG10LT5maW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTU3MSwxNiArNTYxLDE1IEBAIGJvb2wgQ29va2llSmFyREI6OnNldENvb2tp
ZShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAK
IEhhc2hTZXQ8U3RyaW5nPiBDb29raWVKYXJEQjo6YWxsRG9tYWlucygpCiB7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBTRUxFQ1RfQUxMX0RPTUFJTlNfU1FMKTsK
LSAgICBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KFNFTEVDVF9BTExfRE9NQUlOU19TUUwpOworICAgIGlmICghc3Rh
dGVtZW50KQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IGRvbWFp
bnM7Ci0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAg
ICBhdXRvIGRvbWFpbiA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIHdoaWxlIChz
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGF1dG8gZG9tYWluID0g
c3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApOwogICAgICAgICBkb21haW5zLmFkZChkb21haW4p
OwogICAgIH0KLQotICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgIHJldHVybiBkb21haW5z
OwogfQogCkBAIC02MzcsMTAgKzYyNiw5IEBAIGJvb2wgQ29va2llSmFyREI6OmRlbGV0ZUFsbENv
b2tpZXMoKQogCiB2b2lkIENvb2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0
IFN0cmluZyYgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVudC0+cHJl
cGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsKLSAgICBt
X3N0YXRlbWVudHMuYWRkKHNxbCwgV1RGTW92ZShzdGF0ZW1lbnQpKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3FsKTsKKyAgICBBU1NFUlQo
c3RhdGVtZW50KTsKKyAgICBtX3N0YXRlbWVudHMuYWRkKHNxbCwgc3RhdGVtZW50LnZhbHVlKCku
bW92ZVRvVW5pcXVlUHRyKCkpOwogfQogCiBTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpw
cmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTY1MywxMCArNjQxLDEzIEBA
IFNRTGl0ZVN0YXRlbWVudCYgQ29va2llSmFyREI6OnByZXBhcmVkU3RhdGVtZW50KGNvbnN0IFN0
cmluZyYgc3FsKQogCiBib29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYg
c3FsKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsK
LSAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50
LmZpbmFsaXplKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoc3FsKTsKKyAgICBpZiAoIXN0YXRlbWVudCAmJiAhY2hlY2tTUUxpdGVSZXR1cm5Db2Rl
KHN0YXRlbWVudC5lcnJvcigpKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVw
YXJlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKKyAgICBpbnQgcmV0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CiAgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNx
bC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuY3BwCmluZGV4IGMyMzliNDQyMGIzMjViMDA2NGM0ZjZhYjY5YjFiODFiN2EwYWQ3YmYuLjk5
YzJlNTJhZjQyY2YxMGI3ZTFjNTAyNjZjN2U2ZWYwNTU1YThhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5
Z29vZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0Miw3ICsxNDIsNyBAQCBi
b29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2Rl
IG9wZW5Nb2RlKQogCiAgICAgewogICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGlmICghU1FMaXRlU3RhdGVt
ZW50KCp0aGlzLCAiUFJBR01BIHRlbXBfc3RvcmUgPSBNRU1PUlk7Il9zKS5leGVjdXRlQ29tbWFu
ZCgpKQorICAgICAgICBpZiAoIWV4ZWN1dGVDb21tYW5kKCJQUkFHTUEgdGVtcF9zdG9yZSA9IE1F
TU9SWTsiX3MpKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291bGQg
bm90IHNldCB0ZW1wX3N0b3JlIHRvIG1lbW9yeSIpOwogICAgIH0KIApAQCAtMTk3LDEwICsxOTcs
MTAgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogewogICAgIG1f
dXNlV0FMID0gdHJ1ZTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCB3YWxTdGF0ZW1l
bnQoKnRoaXMsICJQUkFHTUEgam91cm5hbF9tb2RlPVdBTDsiX3MpOwotICAgICAgICBpZiAod2Fs
U3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBhdXRv
IHdhbFN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBqb3VybmFsX21vZGU9V0FM
OyJfcyk7CisgICAgICAgIGlmICh3YWxTdGF0ZW1lbnQgJiYgd2FsU3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIFN0cmluZyBtb2Rl
ID0gd2FsU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgICAgICBTdHJpbmcgbW9k
ZSA9IHdhbFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgICAgIGlmICghZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobW9kZSwgIndhbCIpKQogICAgICAgICAgICAgICAg
IExPR19FUlJPUigiam91cm5hbF9tb2RlIG9mIGRhdGFiYXNlIHNob3VsZCBiZSAnV0FMJywgYnV0
IGlzICclcyciLCBtb2RlLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCkBAIC0yMTAsOSArMjEwLDkg
QEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6dXNlV0FMSm91cm5hbE1vZGUoKQogCiAgICAgewogICAg
ICAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNv
dW50ZXI7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBjaGVja3BvaW50U3RhdGVtZW50KCp0aGlz
LCAiUFJBR01BIHdhbF9jaGVja3BvaW50KFRSVU5DQVRFKSJfcyk7Ci0gICAgICAgIGlmIChjaGVj
a3BvaW50U3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAg
ICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQorICAgICAgICBh
dXRvIGNoZWNrcG9pbnRTdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgd2FsX2No
ZWNrcG9pbnQoVFJVTkNBVEUpIl9zKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnRTdGF0ZW1lbnQg
JiYgY2hlY2twb2ludFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
ICAgIGlmIChjaGVja3BvaW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCiAgICAgICAgICAg
ICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlIGRhdGFiYXNlIGNoZWNrcG9pbnQgaXMgYmxv
Y2tlZCIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRh
dGFiYXNlIGZhaWxlZCB0byBjaGVja3BvaW50OiAlcyIsIGxhc3RFcnJvck1zZygpKTsKQEAgLTI3
Miw4ICsyNzIsOCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjptYXhpbXVtU2l6ZSgpCiAgICAg
ewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKICAgICAgICAg
ZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQoKnRoaXMsICJQUkFHTUEgbWF4X3BhZ2VfY291bnQiX3MpOwotICAgICAgICBtYXhQYWdlQ291
bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGF1dG8gc3RhdGVtZW50
ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIG1heF9wYWdlX2NvdW50Il9zKTsKKyAgICAgICAg
bWF4UGFnZUNvdW50ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6
IDA7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0yOTMsOSAr
MjkzLDggQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0TWF4aW11bVNpemUoaW50NjRfdCBzaXpl
KQogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgIGVuYWJsZUF1
dGhvcml6ZXIoZmFsc2UpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywg
bWFrZVN0cmluZygiUFJBR01BIG1heF9wYWdlX2NvdW50ID0gIiwgbmV3TWF4UGFnZUNvdW50KSk7
Ci0gICAgc3RhdGVtZW50LnByZXBhcmUoKTsKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQorICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChtYWtlU3Ry
aW5nKCJQUkFHTUEgbWF4X3BhZ2VfY291bnQgPSAiLCBuZXdNYXhQYWdlQ291bnQpKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgbWF4aW11bSBzaXplIG9mIGRhdGFiYXNlIHRvICVs
bGkgYnl0ZXMiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNpemUpKTsKIAogICAgIGVuYWJsZUF1
dGhvcml6ZXIodHJ1ZSk7CkBAIC0zMTAsOCArMzA5LDggQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpw
YWdlU2l6ZSgpCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwog
ICAgICAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgcGFnZV9zaXplIl9zKTsKLSAgICAg
ICAgbV9wYWdlU2l6ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8g
c3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHBhZ2Vfc2l6ZSJfcyk7CisgICAg
ICAgIG1fcGFnZVNpemUgPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA6
IDA7CiAgICAgICAgIAogICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwogICAgIH0KQEAg
LTMyNyw4ICszMjYsOCBAQCBpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKCkK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAgICAgICAgIGVu
YWJsZUF1dGhvcml6ZXIoZmFsc2UpOwogICAgICAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3
YXMgYWRkZWQgaW4gU1FMaXRlIDMuNC4xLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KCp0aGlzLCAiUFJBR01BIGZyZWVsaXN0X2NvdW50Il9zKTsKLSAgICAgICAgZnJlZWxpc3RD
b3VudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgYXV0byBzdGF0ZW1l
bnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgZnJlZWxpc3RfY291bnQiX3MpOworICAgICAg
ICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgw
KSA6IDA7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0zNDIs
OCArMzQxLDggQEAgaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6dG90YWxTaXplKCkKICAgICB7CiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogICAgICAgICBlbmFi
bGVBdXRob3JpemVyKGZhbHNlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgq
dGhpcywgIlBSQUdNQSBwYWdlX2NvdW50Il9zKTsKLSAgICAgICAgcGFnZUNvdW50ID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVT
dGF0ZW1lbnQoIlBSQUdNQSBwYWdlX2NvdW50Il9zKTsKKyAgICAgICAgcGFnZUNvdW50ID0gc3Rh
dGVtZW50ID8gc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQ2NCgwKSA6IDA7CiAgICAgICAgIGVuYWJs
ZUF1dGhvcml6ZXIodHJ1ZSk7CiAgICAgfQogCkBAIC0zNzEsMTQgKzM3MCwyMiBAQCB2b2lkIFNR
TGl0ZURhdGFiYXNlOjpzZXRCdXN5SGFuZGxlcihpbnQoKmhhbmRsZXIpKHZvaWQqLCBpbnQpKQog
ICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJCdXN5IGhhbmRsZXIgc2V0IG9uIG5vbi1vcGVuIGRh
dGFiYXNlIik7CiB9CiAKLWJvb2wgU1FMaXRlRGF0YWJhc2U6OmV4ZWN1dGVDb21tYW5kKGNvbnN0
IFN0cmluZyYgc3FsKQorYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoY29uc3Qg
U3RyaW5nJiBxdWVyeSkKIHsKLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWwp
LmV4ZWN1dGVDb21tYW5kKCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+ZXhlY3V0ZUNvbW1h
bmQoKTsKK30KKworYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRl
cmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudChxdWVy
eSk7CisgICAgcmV0dXJuIHN0YXRlbWVudCAmJiBzdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7
CiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0
IFN0cmluZyYgc3FsKQogewotICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHNxbCku
cmV0dXJuc0F0TGVhc3RPbmVSZXN1bHQoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVT
dGF0ZW1lbnQoc3FsKTsKKyAgICByZXR1cm4gc3RhdGVtZW50ICYmIHN0YXRlbWVudC0+cmV0dXJu
c0F0TGVhc3RPbmVSZXN1bHQoKTsKIH0KIAogYm9vbCBTUUxpdGVEYXRhYmFzZTo6dGFibGVFeGlz
dHMoY29uc3QgU3RyaW5nJiB0YWJsZW5hbWUpCkBAIC0zODYsMTggKzM5MywxNSBAQCBib29sIFNR
TGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHRhYmxlbmFtZSkKICAgICBp
ZiAoIWlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgc3RhdGVt
ZW50ID0gIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxl
JyBBTkQgbmFtZSA9ICciICsgdGFibGVuYW1lICsgIic7IjsKLQotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKnRoaXMsIHN0YXRlbWVudCk7Ci0gICAgc3FsLnByZXBhcmUoKTsKLSAgICByZXR1cm4g
c3FsLnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFi
bGUnIEFORCBuYW1lID0gJyIgKyB0YWJsZW5hbWUgKyAiJzsiX3MpOworICAgIHJldHVybiBzdGF0
ZW1lbnQgJiYgc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVzsKIH0KIAogdm9pZCBTUUxp
dGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJsZXMoKQogewotICAgIFN0cmluZyBxdWVyeSA9ICJTRUxF
Q1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyJfczsKICAgICBW
ZWN0b3I8U3RyaW5nPiB0YWJsZXM7Ci0gICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoKnRoaXMsIHF1
ZXJ5KS5yZXR1cm5UZXh0UmVzdWx0cygwLCB0YWJsZXMpKSB7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dHlwZT0ndGFibGUnOyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgIXN0YXRlbWVudC0+cmV0
dXJuVGV4dFJlc3VsdHMoMCwgdGFibGVzKSkgewogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJV
bmFibGUgdG8gcmV0cmlldmUgbGlzdCBvZiB0YWJsZXMgZnJvbSBkYXRhYmFzZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNTgzLDEwICs1ODcsMTAgQEAgYm9vbCBTUUxpdGVEYXRhYmFz
ZTo6aXNBdXRvQ29tbWl0T24oKSBjb25zdAogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0dXJuT25J
bmNyZW1lbnRhbEF1dG9WYWN1dW0oKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
KnRoaXMsICJQUkFHTUEgYXV0b192YWN1dW0iX3MpOwotICAgIGludCBhdXRvVmFjdXVtTW9kZSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaW50IGF1dG9WYWN1dW1Nb2RlID0gMDsK
KyAgICBpZiAoYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgYXV0b192
YWN1dW0iX3MpKQorICAgICAgICBhdXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1u
SW50KDApOwogICAgIGludCBlcnJvciA9IGxhc3RFcnJvcigpOwotICAgIHN0YXRlbWVudC5maW5h
bGl6ZSgpOwogCiAgICAgLy8gQ2hlY2sgaWYgd2UgZ290IGFuIGVycm9yIHdoaWxlIHRyeWluZyB0
byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBhdXRvX3ZhY3V1bSBmbGFnLgogICAgIC8vIElmIHdlIGdv
dCBhIFNRTElURV9CVVNZIGVycm9yLCB0aGVuIHRoZXJlJ3MgcHJvYmFibHkgYW5vdGhlciB0cmFu
c2FjdGlvbiBpbgpAQCAtNjQzLDQgKzY0Nyw3NiBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpyZWxl
YXNlTWVtb3J5KCkKICAgICBzcWxpdGUzX2RiX3JlbGVhc2VfbWVtb3J5KG1fZGIpOwogfQogCitz
dGF0aWMgRXhwZWN0ZWQ8c3FsaXRlM19zdG10KiwgaW50PiBjb25zdHJ1Y3RBbmRQcmVwYXJlU3Rh
dGVtZW50KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgY2hhciogcXVlcnksIHNpemVf
dCBxdWVyeUxlbmd0aCkKK3sKKyAgICBMb2NrSG9sZGVyIGRhdGFiYXNlTG9jayhkYXRhYmFzZS5k
YXRhYmFzZU11dGV4KCkpOworICAgIExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAl
cyIsIHF1ZXJ5KTsKKworICAgIC8vIFBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluY2x1
ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIgdG8gc3FsaXRlM19wcmVwYXJlX3YyOworICAgIC8vIHRo
aXMgbGV0cyBTUUxpdGUgYXZvaWQgYW4gZXh0cmEgc3RyaW5nIGNvcHkuCisgICAgc2l6ZV90IGxl
bmd0aEluY2x1ZGluZ051bGxDaGFyYWN0ZXIgPSBxdWVyeUxlbmd0aCArIDE7CisKKyAgICBzcWxp
dGUzX3N0bXQqIHN0YXRlbWVudCB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiB0YWlsID0g
bnVsbHB0cjsKKyAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGF0YWJhc2Uuc3Fs
aXRlM0hhbmRsZSgpLCBxdWVyeSwgbGVuZ3RoSW5jbHVkaW5nTnVsbENoYXJhY3RlciwgJnN0YXRl
bWVudCwgJnRhaWwpOworICAgIGlmIChlcnJvciAhPSBTUUxJVEVfT0spCisgICAgICAgIExPRyhT
UUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJv
ciwgcXVlcnksIHNxbGl0ZTNfZXJybXNnKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOworCisg
ICAgaWYgKHRhaWwgJiYgKnRhaWwpCisgICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOworCisg
ICAgaWYgKGVycm9yICE9IFNRTElURV9PSykgeworICAgICAgICBzcWxpdGUzX2ZpbmFsaXplKHN0
YXRlbWVudCk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvcik7CisgICAgfQor
CisgICAgLy8gV2hlbiB0aGUgcXVlcnkgaXMgYW4gZW1wdHkgc3RyaW5nLCBzcWxpdGUzX3ByZXBh
cmVfdjIoKSBzZXRzIHRoZSBzdGF0ZW1lbnQgdG8gbnVsbHB0ciBhbmQgeWV0IGRvZXNuJ3QgcmV0
dXJuIGFuIGVycm9yLgorICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoU1FMSVRFX0VSUk9SKTsKKworICAgIHJldHVybiBzdGF0ZW1lbnQ7Cit9CisKK0V4
cGVjdGVkPFNRTGl0ZVN0YXRlbWVudCwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZVN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTdHJpbmcgcXVlcnkgPSBx
dWVyeVN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS51dGY4KCk7CisgICAgYXV0byBzcWxTdGF0ZW1l
bnQgPSBjb25zdHJ1Y3RBbmRQcmVwYXJlU3RhdGVtZW50KCp0aGlzLCBxdWVyeS5kYXRhKCksIHF1
ZXJ5Lmxlbmd0aCgpKTsKKyAgICBpZiAoIXNxbFN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTUUxEYXRhYmFzZSwgIlNRTGl0ZURhdGFiYXNlOjpwcmVwYXJlU3RhdGVtZW50
OiBGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgJXtwdWJsaWN9cyIsIHF1ZXJ5LmRhdGEoKSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcWxTdGF0ZW1lbnQuZXJyb3IoKSk7Cisg
ICAgfQorICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnQgeyAqdGhpcywgc3FsU3RhdGVtZW50LnZh
bHVlKCkgfTsKK30KKworRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IFNRTGl0ZURhdGFi
YXNlOjpwcmVwYXJlU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBhdXRvIHNx
bFN0YXRlbWVudCA9IGNvbnN0cnVjdEFuZFByZXBhcmVTdGF0ZW1lbnQoKnRoaXMsIHF1ZXJ5LmNo
YXJhY3RlcnMoKSwgcXVlcnkubGVuZ3RoKCkpOworICAgIGlmICghc3FsU3RhdGVtZW50KSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNRTERhdGFiYXNlLCAiU1FMaXRlRGF0YWJhc2U6OnBy
ZXBhcmVTdGF0ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwg
cXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0
YXRlbWVudC5lcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudCB7ICp0
aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSB9OworfQorCitFeHBlY3RlZDxVbmlxdWVSZWY8U1FM
aXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU3RyaW5nIHF1ZXJ5ID0gcXVlcnlT
dHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpOworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0g
Y29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuZGF0YSgpLCBxdWVyeS5s
ZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0ZW1lbnQ6
IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5lcnJvcigpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpuZXcgU1FMaXRlU3Rh
dGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCitFeHBlY3RlZDxVbmlx
dWVSZWY8U1FMaXRlU3RhdGVtZW50PiwgaW50PiBTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBT
dGF0ZW1lbnQoQVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gc3FsU3RhdGVtZW50ID0g
Y29uc3RydWN0QW5kUHJlcGFyZVN0YXRlbWVudCgqdGhpcywgcXVlcnkuY2hhcmFjdGVycygpLCBx
dWVyeS5sZW5ndGgoKSk7CisgICAgaWYgKCFzcWxTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU1FMRGF0YWJhc2UsICJTUUxpdGVEYXRhYmFzZTo6cHJlcGFyZUhlYXBTdGF0
ZW1lbnQ6IEZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCAle3B1YmxpY31zIiwgcXVlcnkuY2hh
cmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNxbFN0YXRlbWVudC5l
cnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuaXF1ZVJlZjxTUUxpdGVTdGF0ZW1lbnQ+KCpu
ZXcgU1FMaXRlU3RhdGVtZW50KCp0aGlzLCBzcWxTdGF0ZW1lbnQudmFsdWUoKSkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCmluZGV4IGQzZDA2OTZkYmY1YjBmMGQ2NjBiNzA4NTIwZmE2M2E5OTgwMjhl
NTcuLmMwNDVmZTU5M2Q3OTlkNTIwODBkZGI5Mzk2YzQ5MzQyMTNlN2NkODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpo
YXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsOCArMjgsMTAgQEAK
IAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYxLDYg
KzYzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGFzdENoYW5n
ZXNDb3VudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZChjb25z
dCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKEFTQ0lJ
TGl0ZXJhbCk7CisKICAgICBib29sIHJldHVybnNBdExlYXN0T25lUmVzdWx0KGNvbnN0IFN0cmlu
ZyYpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29uc3QgU3Ry
aW5nJik7CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB0cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsg
fQogCisgICAgV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHBy
ZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBxdWVyeSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IHByZXBhcmVTdGF0ZW1lbnQoQVNDSUlMaXRl
cmFsIHF1ZXJ5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRl
U3RhdGVtZW50PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHF1ZXJ5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlU3RhdGVtZW50
PiwgaW50PiBwcmVwYXJlSGVhcFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworCiAgICAg
Ly8gQWJvcnRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9wZXJhdGlvbi4gVGhpcyBpcyB0aHJlYWQg
c2FmZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVycnVwdCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IGRlYThmZmY4
YTVlYTRmZGU0MTY4YmQ5ZDNlZjRmZGUyZWM2ZjU1YTguLjQ4ZjlhZWUyZDcxZDkxZmI0NTcwMjIy
ZDRlNWIwNzg4YTBiZTE1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDg3ICs0MSw0MSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNRTGl0ZVN0YXRlbWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZURh
dGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQ6OlNRTGl0ZVN0
YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGIsIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50KQogICAg
IDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fcXVlcnkoc3FsKQotICAgICwgbV9zdGF0ZW1lbnQo
MCkKKyAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKIHsKKyAgICBBU1NFUlQoc3RhdGVtZW50
KTsKIH0KIAotU1FMaXRlU3RhdGVtZW50Ojp+U1FMaXRlU3RhdGVtZW50KCkKK1NRTGl0ZVN0YXRl
bWVudDo6U1FMaXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmIG90aGVyKQorICAgIDogbV9k
YXRhYmFzZShvdGhlci5kYXRhYmFzZSgpKQorICAgICwgbV9zdGF0ZW1lbnQoc3RkOjpleGNoYW5n
ZShvdGhlci5tX3N0YXRlbWVudCwgbnVsbHB0cikpCiB7Ci0gICAgZmluYWxpemUoKTsKIH0KIAot
aW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCitTUUxpdGVTdGF0ZW1lbnQ6On5TUUxpdGVT
dGF0ZW1lbnQoKQogewotICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKLQotICAgIExvY2tIb2xk
ZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJhc2VNdXRleCgpKTsKLQotICAgIENTdHJp
bmcgcXVlcnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpLnV0ZjgoKTsKLSAgICAKLSAgICBM
T0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBxdWVyeS5kYXRhKCkpOwotCi0g
ICAgLy8gUGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBudWxsIGNo
YXJhY3RlciB0byBzcWxpdGUzX3ByZXBhcmVfdjI7Ci0gICAgLy8gdGhpcyBsZXRzIFNRTGl0ZSBh
dm9pZCBhbiBleHRyYSBzdHJpbmcgY29weS4KLSAgICBzaXplX3QgbGVuZ3RoSW5jbHVkaW5nTnVs
bENoYXJhY3RlciA9IHF1ZXJ5Lmxlbmd0aCgpICsgMTsKLQotICAgIGNvbnN0IGNoYXIqIHRhaWwg
PSBudWxscHRyOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZV92MihtX2RhdGFiYXNl
LnNxbGl0ZTNIYW5kbGUoKSwgcXVlcnkuZGF0YSgpLCBsZW5ndGhJbmNsdWRpbmdOdWxsQ2hhcmFj
dGVyLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKLQotICAgIGlmIChlcnJvciAhPSBTUUxJVEVfT0sp
Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNxbGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkp
XG4lc1xuJXMiLCBlcnJvciwgcXVlcnkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNl
LnNxbGl0ZTNIYW5kbGUoKSkpOwotCi0gICAgaWYgKHRhaWwgJiYgKnRhaWwpCi0gICAgICAgIGVy
cm9yID0gU1FMSVRFX0VSUk9SOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzUHJlcGFy
ZWQgPSBlcnJvciA9PSBTUUxJVEVfT0s7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXJyb3I7CisgICAg
c3FsaXRlM19maW5hbGl6ZShtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6
OnN0ZXAoKQogewogICAgIExvY2tIb2xkZXIgZGF0YWJhc2VMb2NrKG1fZGF0YWJhc2UuZGF0YWJh
c2VNdXRleCgpKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBTUUxJ
VEVfT0s7Ci0KICAgICAvLyBUaGUgZGF0YWJhc2UgbmVlZHMgdG8gdXBkYXRlIGl0cyBsYXN0IGNo
YW5nZXMgY291bnQgYmVmb3JlIGVhY2ggc3RhdGVtZW50CiAgICAgLy8gaW4gb3JkZXIgdG8gY29t
cHV0ZSBwcm9wZXJseSB0aGUgbGFzdENoYW5nZXMoKSByZXR1cm4gdmFsdWUuCiAgICAgbV9kYXRh
YmFzZS51cGRhdGVMYXN0Q2hhbmdlc0NvdW50KCk7CiAKLSAgICBMT0coU1FMRGF0YWJhc2UsICJT
UUwgLSBzdGVwIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAgICBpbnQgZXJyb3Ig
PSBzcWxpdGUzX3N0ZXAobV9zdGF0ZW1lbnQpOwotICAgIGlmIChlcnJvciAhPSBTUUxJVEVfRE9O
RSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNx
bGl0ZTNfc3RlcCBmYWlsZWQgKCVpKVxuUXVlcnkgLSAlc1xuRXJyb3IgLSAlcyIsIAotICAgICAg
ICAgICAgZXJyb3IsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCksIHNxbGl0ZTNfZXJybXNnKG1fZGF0
YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7Ci0gICAgfQorICAgIGlmIChlcnJvciAhPSBTUUxJVEVf
RE9ORSAmJiBlcnJvciAhPSBTUUxJVEVfUk9XKQorICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJz
cWxpdGUzX3N0ZXAgZmFpbGVkICglaSlcbkVycm9yIC0gJXMiLCBlcnJvciwgc3FsaXRlM19lcnJt
c2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsKIAogICAgIHJldHVybiBlcnJvcjsKIH0K
LSAgICAKLWludCBTUUxpdGVTdGF0ZW1lbnQ6OmZpbmFsaXplKCkKLXsKLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIG1faXNQcmVwYXJlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKCFtX3N0YXRl
bWVudCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLSAgICBMT0coU1FMRGF0YWJhc2UsICJT
UUwgLSBmaW5hbGl6ZSAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgaW50IHJl
c3VsdCA9IHNxbGl0ZTNfZmluYWxpemUobV9zdGF0ZW1lbnQpOwotICAgIG1fc3RhdGVtZW50ID0g
MDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpyZXNldCgp
IAogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0g
ICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gcmVz
ZXQgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwogICAgIGludCBzdGF0dXMgPSBzcWxp
dGUzX3Jlc2V0KG1fc3RhdGVtZW50KTsKICAgICBzcWxpdGUzX2NsZWFyX2JpbmRpbmdzKG1fc3Rh
dGVtZW50KTsKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTI5LDQyICs4MywyMSBAQCBpbnQgU1FM
aXRlU3RhdGVtZW50OjpyZXNldCgpCiAKIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpleGVjdXRlQ29t
bWFuZCgpCiB7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7Ci0gICAg
aWYgKHN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBmaW5hbGl6ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVfRE9ORTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0
ZW1lbnQ6OnJldHVybnNBdExlYXN0T25lUmVzdWx0KCkKIHsKLSAgICBpZiAoIW1fc3RhdGVtZW50
ICYmIHByZXBhcmUoKSAhPSBTUUxJVEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBB
U1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoc3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAg
ICAgICAgZmluYWxpemUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmaW5h
bGl6ZSgpOwotICAgIHJldHVybiB0cnVlOwotCisgICAgcmV0dXJuIHN0ZXAoKSA9PSBTUUxJVEVf
Uk9XOwogfQogCiBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0
IHZvaWQqIGJsb2IsIGludCBzaXplKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAg
IEFTU0VSVChpbmRleCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpIDw9IGJpbmRQYXJhbWV0ZXJDb3VudCgpKTsKICAgICBBU1NFUlQoYmxvYiB8fCAhc2l6ZSk7
CiAgICAgQVNTRVJUKHNpemUgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50KQotICAgICAg
ICByZXR1cm4gU1FMSVRFX0VSUk9SOwotCiAgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9ibG9iKG1f
c3RhdGVtZW50LCBpbmRleCwgYmxvYiwgc2l6ZSwgU1FMSVRFX1RSQU5TSUVOVCk7CiB9CiAKQEAg
LTE4NSw3ICsxMTgsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYgdGV4dCkKIAogaW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7
CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yMDQsNyArMTM2LDYgQEAg
aW50IFNRTGl0ZVN0YXRlbWVudDo6YmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRl
eHQpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJbnQoaW50IGluZGV4LCBpbnQgaW50ZWdl
cikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVy
Q291bnQoKSk7CiAKQEAgLTIxMyw3ICsxNDQsNiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
SW50KGludCBpbmRleCwgaW50IGludGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRJ
bnQ2NChpbnQgaW5kZXgsIGludDY0X3QgaW50ZWdlcikKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBh
cmVkKTsKICAgICBBU1NFUlQoaW5kZXggPiAwKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8PSBiaW5kUGFyYW1ldGVyQ291bnQoKSk7CiAKQEAgLTIyMiw3ICsxNTIs
NiBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50NjQoaW50IGluZGV4LCBpbnQ2NF90IGlu
dGVnZXIpCiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3Vi
bGUgbnVtYmVyKQogewotICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwogICAgIEFTU0VSVChpbmRl
eCA+IDApOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDw9IGJpbmRQ
YXJhbWV0ZXJDb3VudCgpKTsKIApAQCAtMjMxLDcgKzE2MCw2IEBAIGludCBTUUxpdGVTdGF0ZW1l
bnQ6OmJpbmREb3VibGUoaW50IGluZGV4LCBkb3VibGUgbnVtYmVyKQogCiBpbnQgU1FMaXRlU3Rh
dGVtZW50OjpiaW5kTnVsbChpbnQgaW5kZXgpCiB7Ci0gICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7
CiAgICAgQVNTRVJUKGluZGV4ID4gMCk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOwogCkBAIC0yNDksMjYgKzE3NywxOSBA
QCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kVmFsdWUoaW50IGluZGV4LCBjb25zdCBTUUxWYWx1
ZSYgdmFsdWUpCiAKIHVuc2lnbmVkIFNRTGl0ZVN0YXRlbWVudDo6YmluZFBhcmFtZXRlckNvdW50
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoIW1fc3RhdGVt
ZW50KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19iaW5kX3BhcmFtZXRl
cl9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmNvbHVtbkNv
dW50KCkKIHsKLSAgICBBU1NFUlQobV9pc1ByZXBhcmVkKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50
KQotICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3FsaXRlM19kYXRhX2NvdW50KG1fc3Rh
dGVtZW50KTsKIH0KIAogYm9vbCBTUUxpdGVTdGF0ZW1lbnQ6OmlzQ29sdW1uTnVsbChpbnQgY29s
KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAg
ICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3OCwxOSArMTk5LDE0IEBAIGJvb2wg
U1FMaXRlU3RhdGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKIGJvb2wgU1FMaXRlU3RhdGVt
ZW50Ojppc0NvbHVtbkRlY2xhcmVkQXNCbG9iKGludCBjb2wpCiB7CiAgICAgQVNTRVJUKGNvbCA+
PSAwKTsKLSAgICBpZiAoIW1fc3RhdGVtZW50KSB7Ci0gICAgICAgIGlmIChwcmVwYXJlKCkgIT0g
U1FMSVRFX09LKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyhzcWxpdGUzX2NvbHVtbl9k
ZWNsdHlwZShtX3N0YXRlbWVudCwgY29sKSksICJibG9iIik7CiB9CiAKIFN0cmluZyBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkKIHsKICAgICBBU1NFUlQoY29sID49IDAp
OwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9
IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFoYXNT
dGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hh
cio+KHNxbGl0ZTNfY29sdW1uX25hbWUxNihtX3N0YXRlbWVudCwgY29sKSkpOwpAQCAtMjk5LDkg
KzIxNSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbk5hbWUoaW50IGNvbCkK
IFNRTFZhbHVlIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCkKIHsKICAg
ICBBU1NFUlQoY29sID49IDApOwotICAgIGlmICghbV9zdGF0ZW1lbnQpCi0gICAgICAgIGlmIChw
cmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMzAsOSArMjQ1LDggQEAgU1FMVmFsdWUg
U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5WYWx1ZShpbnQgY29sKQogU3RyaW5nIFNRTGl0ZVN0
YXRlbWVudDo6Z2V0Q29sdW1uVGV4dChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7
Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0g
U1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWhhc1N0
YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFy
Kj4oc3FsaXRlM19jb2x1bW5fdGV4dDE2KG1fc3RhdGVtZW50LCBjb2wpKSwgc3FsaXRlM19jb2x1
bW5fYnl0ZXMxNihtX3N0YXRlbWVudCwgY29sKSAvIHNpemVvZihVQ2hhcikpOwpAQCAtMzQxLDkg
KzI1NSw4IEBAIFN0cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblRleHQoaW50IGNvbCkK
IGRvdWJsZSBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkRvdWJsZShpbnQgY29sKQogewogICAg
IEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkKLSAgICAgICAgaWYgKHBy
ZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIHJldHVybiAwLjA7Cisg
ICAgaWYgKCFoYXNTdGFydGVkU3RlcHBpbmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgcmV0dXJuIDAuMDsKICAgICBpZiAoY29sdW1uQ291bnQoKSA8PSBjb2wpCiAgICAgICAg
IHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2RvdWJsZShtX3N0YXRlbWVu
dCwgY29sKTsKQEAgLTM1Miw5ICsyNjUsOCBAQCBkb3VibGUgU1FMaXRlU3RhdGVtZW50OjpnZXRD
b2x1bW5Eb3VibGUoaW50IGNvbCkKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkludChp
bnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudCkK
LSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAg
IHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgpICE9IFNR
TElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNv
bCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2ludChtX3N0
YXRlbWVudCwgY29sKTsKQEAgLTM2Myw5ICsyNzUsOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpn
ZXRDb2x1bW5JbnQoaW50IGNvbCkKIGludDY0X3QgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5J
bnQ2NChpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7Ci0gICAgaWYgKCFtX3N0YXRl
bWVudCkKLSAgICAgICAgaWYgKHByZXBhcmVBbmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFzU3RhcnRlZFN0ZXBwaW5nKCkgJiYgc3RlcCgp
ICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChjb2x1bW5Db3VudCgp
IDw9IGNvbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2lu
dDY0KG1fc3RhdGVtZW50LCBjb2wpOwpAQCAtMzc1LDcgKzI4Niw3IEBAIFN0cmluZyBTUUxpdGVT
dGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKQogewogICAgIEFTU0VSVChj
b2wgPj0gMCk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVBbmRTdGVwKCkgIT0g
U1FMSVRFX1JPVykKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYmIHN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoY29sdW1uQ291
bnQoKSA8PSBjb2wpCkBAIC0zOTcsNyArMzA4LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6Omdl
dENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkKIHsKICAg
ICBBU1NFUlQoY29sID49IDApOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5k
U3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICBpZiAoIWhhc1N0YXJ0ZWRTdGVwcGluZygpICYm
IHN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNDIzLDcgKzMzNCw3IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50
OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNvbCwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQp
CiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKIAotICAgIGlmICghbV9zdGF0ZW1lbnQgJiYgcHJl
cGFyZUFuZFN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgaWYgKCFoYXNTdGFydGVkU3RlcHBp
bmcoKSAmJiBzdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICByZXN1bHQuY2xlYXIoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ1MSwxOSArMzYyLDE2IEBAIGJvb2wgU1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5UZXh0UmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8U3RyaW5nPiYgdikK
IAogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxp
emUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAog
ICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29s
dW1uVGV4dChjb2wpKTsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgaWYgKG1fZGF0YWJh
c2UubGFzdEVycm9yKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgcmVzdWx0ID0gZmFsc2U7
Ci0gICAgICAgIExPRyhTUUxEYXRhYmFzZSwgIkVycm9yIHJlYWRpbmcgcmVzdWx0cyBmcm9tIGRh
dGFiYXNlIHF1ZXJ5ICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExPRyhT
UUxEYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHM6IEVycm9yIHJl
YWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBmaW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTQ3MSwxOSArMzc5LDE2IEBAIGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1
cm5JbnRSZXN1bHRzKGludCBjb2wsIFZlY3RvcjxpbnQ+JiB2KQogewogICAgIHYuY2xlYXIoKTsK
IAotICAgIGlmIChtX3N0YXRlbWVudCkKLSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJl
cGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNT
dGFydGVkU3RlcHBpbmcoKSkKKyAgICAgICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkg
PT0gU1FMSVRFX1JPVykKICAgICAgICAgdi5hcHBlbmQoZ2V0Q29sdW1uSW50KGNvbCkpOwogICAg
IGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERh
dGFiYXNlLCAiRXJyb3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBt
X3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRl
U3RhdGVtZW50OjpyZXR1cm5JbnRSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAg
ICB9Ci0gICAgZmluYWxpemUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00OTEsMTkg
KzM5NiwxNiBAQCBib29sIFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuSW50NjRSZXN1bHRzKGludCBj
b2wsIFZlY3RvcjxpbnQ2NF90PiYgdikKIHsKICAgICB2LmNsZWFyKCk7CiAKLSAgICBpZiAobV9z
dGF0ZW1lbnQpCi0gICAgICAgIGZpbmFsaXplKCk7Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzU3RhcnRlZFN0ZXBwaW5n
KCkpCisgICAgICAgIHJlc2V0KCk7CiAKICAgICB3aGlsZSAoc3RlcCgpID09IFNRTElURV9ST1cp
CiAgICAgICAgIHYuYXBwZW5kKGdldENvbHVtbkludDY0KGNvbCkpOwogICAgIGJvb2wgcmVzdWx0
ID0gdHJ1ZTsKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJy
b3IgcmVhZGluZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50Ojpy
ZXR1cm5JbnQ2NFJlc3VsdHM6IEVycm9yIHJlYWRpbmcgcmVzdWx0cyIpOwogICAgIH0KLSAgICBm
aW5hbGl6ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxMSwyNSArNDEzLDIyIEBA
IGJvb2wgU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3VibGVSZXN1bHRzKGludCBjb2wsIFZlY3Rv
cjxkb3VibGU+JiB2KQogewogICAgIHYuY2xlYXIoKTsKIAotICAgIGlmIChtX3N0YXRlbWVudCkK
LSAgICAgICAgZmluYWxpemUoKTsKLSAgICBpZiAocHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNTdGFydGVkU3RlcHBpbmcoKSkKKyAgICAg
ICAgcmVzZXQoKTsKIAogICAgIHdoaWxlIChzdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAg
di5hcHBlbmQoZ2V0Q29sdW1uRG91YmxlKGNvbCkpOwogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
ICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAg
ICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRXJyb3IgcmVhZGlu
ZyByZXN1bHRzIGZyb20gZGF0YWJhc2UgcXVlcnkgJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMaXRlU3RhdGVtZW50OjpyZXR1cm5Eb3Vi
bGVSZXN1bHRzOiBFcnJvciByZWFkaW5nIHJlc3VsdHMiKTsKICAgICB9Ci0gICAgZmluYWxpemUo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFNRTGl0ZVN0YXRlbWVudDo6aXNFeHBp
cmVkKCkKK2Jvb2wgU1FMaXRlU3RhdGVtZW50OjpoYXNTdGFydGVkU3RlcHBpbmcoKQogewotICAg
IHJldHVybiAhbV9zdGF0ZW1lbnQ7CisgICAgcmV0dXJuIHNxbGl0ZTNfc3RtdF9idXN5KG1fc3Rh
dGVtZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGE3YWNkZTVjZmM1YjJkMzU2MmIx
ZmI1MWZkNmE3MWJkOTVjY2U0MDguLjYzNTEyYmI2ZWI0OWE2ZWUxOWU3MWYxYzY3YjFmZThmMjlm
NjVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
U1FMaXRlU3RhdGVtZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxpdGVTdGF0ZW1l
bnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBTUUxpdGVTdGF0ZW1lbnQoU1FMaXRlRGF0YWJhc2UmLCBjb25zdCBTdHJpbmcmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB+U1FMaXRlU3RhdGVtZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgU1FM
aXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYmKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9S
VCBpbnQgcHJlcGFyZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBiaW5kQmxvYihpbnQgaW5k
ZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQg
YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBp
bnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKQEAgLTUwLDIzICs0OSwxOCBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgYmluZFBhcmFtZXRlckNvdW50
KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgc3RlcCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIGludCBmaW5hbGl6ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCByZXNldCgpOwog
ICAgIAotICAgIGludCBwcmVwYXJlQW5kU3RlcCgpIHsgaWYgKGludCBlcnJvciA9IHByZXBhcmUo
KSkgcmV0dXJuIGVycm9yOyByZXR1cm4gc3RlcCgpOyB9Ci0gICAgCi0gICAgLy8gcHJlcGFyZXMs
IHN0ZXBzLCBhbmQgZmluYWxpemVzIHRoZSBxdWVyeS4KKyAgICAvLyBzdGVwcyBhbmQgZmluYWxp
emVzIHRoZSBxdWVyeS4KICAgICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIDMgc3RlcHMgc3VjY2Vl
ZCB3aXRoIHN0ZXAoKSByZXR1cm5pbmcgU1FMSVRFX0RPTkUKICAgICAvLyByZXR1cm5zIGZhbHNl
IG90aGVyd2lzZSAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlQ29tbWFuZCgpOwog
ICAgIAotICAgIC8vIHByZXBhcmVzLCBzdGVwcywgYW5kIGZpbmFsaXplcy4gIAorICAgIC8vIHN0
ZXBzLCBhbmQgZmluYWxpemVzLgogICAgIC8vIHJldHVybnMgdHJ1ZSBpcyBzdGVwKCkgcmV0dXJu
cyBTUUxJVEVfUk9XCiAgICAgLy8gcmV0dXJucyBmYWxzZSBvdGhlcndpc2UKICAgICBib29sIHJl
dHVybnNBdExlYXN0T25lUmVzdWx0KCk7CiAKLSAgICBib29sIGlzRXhwaXJlZCgpOwotCiAgICAg
Ly8gUmV0dXJucyAtMSBvbiBsYXN0LXN0ZXAgZmFpbGluZy4gIE90aGVyd2lzZSwgcmV0dXJucyBu
dW1iZXIgb2Ygcm93cwogICAgIC8vIHJldHVybmVkIGluIHRoZSBsYXN0IHN0ZXAoKQogICAgIGlu
dCBjb2x1bW5Db3VudCgpOwpAQCAtOTAsMTUgKzg0LDE1IEBAIHB1YmxpYzoKIAogICAgIFNRTGl0
ZURhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KICAgICAKLSAgICBj
b25zdCBTdHJpbmcmIHF1ZXJ5KCkgY29uc3QgeyByZXR1cm4gbV9xdWVyeTsgfQotICAgIAogcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU1FMaXRlRGF0YWJhc2U7CisgICAgU1FMaXRlU3RhdGVt
ZW50KFNRTGl0ZURhdGFiYXNlJiwgc3FsaXRlM19zdG10Kik7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHByZXBhcmVkIHN0YXRlbWVudCBoYXMgYmVlbiBzdGVwcGVkIGF0IGxlYXN0IG9u
Y2UgdXNpbmcgc3RlcCgpIGJ1dCBoYXMgbmVpdGhlciBydW4gdG8gY29tcGxldGlvbiAocmV0dXJu
ZWQgU1FMSVRFX0RPTkUgZnJvbSBzdGVwKCkpIG5vciBiZWVuIHJlc2V0KCkuCisgICAgYm9vbCBo
YXNTdGFydGVkU3RlcHBpbmcoKTsKKwogICAgIFNRTGl0ZURhdGFiYXNlJiBtX2RhdGFiYXNlOwot
ICAgIFN0cmluZyBtX3F1ZXJ5OwogICAgIHNxbGl0ZTNfc3RtdCogbV9zdGF0ZW1lbnQ7Ci0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faXNQcmVwYXJlZCB7IGZhbHNlIH07Ci0jZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCmluZGV4IGY5YzI0YjhlZDU3MTgyZWE1Nzg4
N2EwMDMwN2VkOGRiOGEzZDBmZmQuLmExOTM5YWFkMWIwYzg2ZjAzNWRhMDA5MjVmZmVjZjE3OWQ5
NjdkYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1
cE1lbnVEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVw
TWVudURCLmNwcApAQCAtMTMwLDI1ICsxMzAsMjUgQEAgYm9vbCBTZWFyY2hQb3B1cE1lbnVEQjo6
Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKICAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMo
IlNlYXJjaCIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
aW50ZWdyaXR5KG1fZGF0YWJhc2UsICJQUkFHTUEgcXVpY2tfY2hlY2s7Iik7Ci0gICAgaWYgKGlu
dGVncml0eS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnRlZ3JpdHkgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBxdWlja19jaGVjazsiX3MpOworICAg
IGlmICghaW50ZWdyaXR5KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUg
ZGF0YWJhc2UgaW50ZWdyaXR5IGNoZWNrIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBpbnQgcmVzdWx0Q29kZSA9IGludGVncml0eS5zdGVwKCk7CisgICAgaW50IHJlc3Vs
dENvZGUgPSBpbnRlZ3JpdHktPnN0ZXAoKTsKICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxJVEVf
Uk9XKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZWdyaXR5IHF1aWNrX2NoZWNrIHN0ZXAgcmV0
dXJuZWQgJWQiLCByZXN1bHRDb2RlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGludCBjb2x1bW5zID0gaW50ZWdyaXR5LmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbHVt
bnMgPSBpbnRlZ3JpdHktPmNvbHVtbkNvdW50KCk7CiAgICAgaWYgKGNvbHVtbnMgIT0gMSkgewog
ICAgICAgICBMT0dfRVJST1IoIlJlY2VpdmVkICVpIGNvbHVtbnMgcGVyZm9ybWluZyBpbnRlZ3Jp
dHkgY2hlY2ssIHNob3VsZCBiZSAxIiwgY29sdW1ucyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5UZXh0
KDApOworICAgIFN0cmluZyByZXN1bHRUZXh0ID0gaW50ZWdyaXR5LT5nZXRDb2x1bW5UZXh0KDAp
OwogCiAgICAgaWYgKHJlc3VsdFRleHQgIT0gIm9rIikgewogICAgICAgICBMT0dfRVJST1IoIlNl
YXJjaCBhdXRvc2F2ZSBkYXRhYmFzZSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0gJXMiLCByZXN1
bHRUZXh0LmFzY2lpKCkuZGF0YSgpKTsKQEAgLTIyNCwxNyArMjI0LDE5IEBAIGJvb2wgU2VhcmNo
UG9wdXBNZW51REI6Om9wZW5EYXRhYmFzZSgpCiAKIHZvaWQgU2VhcmNoUG9wdXBNZW51REI6OmNs
b3NlRGF0YWJhc2UoKQogewotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAg
IG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAg
bV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50LT5maW5hbGl6ZSgpOwotICAgICAgICBtX3JlbW92
ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudC0+ZmluYWxpemUoKTsKLSAgICAgICAgbV9kYXRh
YmFzZS5jbG9zZSgpOwotICAgIH0KKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbG9hZFNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9pbnNlcnRTZWFyY2hUZXJtU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBt
X3JlbW92ZVNlYXJjaFRlcm1zRm9yTmFtZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kYXRh
YmFzZS5jbG9zZSgpOwogfQogCiB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjp2ZXJpZnlTY2hlbWFW
ZXJzaW9uKCkKIHsKLSAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNl
LCAiUFJBR01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKKyAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJf
cyk7CisgICAgaW50IHZlcnNpb24gPSBzdGF0ZW1lbnQgPyBzdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgwKSA6IDA7CiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNzEsMjMgKzI3MywyNSBAQCB2b2lkIFNlYXJjaFBvcHVwTWVudURCOjpjaGVj
a1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKIAogaW50IFNlYXJjaFBvcHVwTWVudURCOjpl
eGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29sIGlnbm9yZUVycm9yKQogewot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3FsKTsKLSAgICBpbnQg
cmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7Ci0gICAgc3RhdGVtZW50LmZpbmFsaXpl
KCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoc3Fs
KTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUo
c3RhdGVtZW50LmVycm9yKCkpOworICAgICAgICByZXR1cm4gc3RhdGVtZW50LmVycm9yKCk7Cisg
ICAgfQogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7CisgICAgaW50IHJldCA9IHN0
YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYmIHJldCAhPSBTUUxJ
VEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3IpCiAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFzY2lpKCkuZGF0
YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLQogICAgIHJldHVybiByZXQ7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVwTWVudURCOjpjcmVh
dGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKK3N0ZDo6dW5pcXVlX3B0cjxT
UUxpdGVTdGF0ZW1lbnQ+IFNlYXJjaFBvcHVwTWVudURCOjpjcmVhdGVQcmVwYXJlZFN0YXRlbWVu
dChBU0NJSUxpdGVyYWwgc3FsKQogewotICAgIGF1dG8gc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxT
UUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7Ci0gICAgaW50IHJldCA9IHN0YXRlbWVu
dC0+cHJlcGFyZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1FMSVRFX09LKTsK
LSAgICByZXR1cm4gc3RhdGVtZW50OworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5w
cmVwYXJlSGVhcFN0YXRlbWVudChzcWwpOworICAgIEFTU0VSVChzdGF0ZW1lbnQpOworICAgIGlm
ICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGVt
ZW50LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudURCLmgKaW5kZXggYTI1NWNmNDI2ZTdhN2I5
NGU3NmNjODQ2NWFkZjE4MjQ0YmNmZTYzNi4uZjkxM2Y0M2VhNWQwYTRmNzQzMWE3OTJiMTY4Mzgw
ZDc5ZDcyYTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJj
aFBvcHVwTWVudURCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NlYXJjaFBv
cHVwTWVudURCLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZlcmlmeVNj
aGVtYVZlcnNpb24oKTsKICAgICBpbnQgZXhlY3V0ZVNpbXBsZVNxbChjb25zdCBTdHJpbmcmIHNx
bCwgYm9vbCBpZ25vcmVFcnJvciA9IGZhbHNlKTsKICAgICB2b2lkIGNoZWNrU1FMaXRlUmV0dXJu
Q29kZShpbnQgYWN0dWFsKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlU3RhdGVtZW50PiBj
cmVhdGVQcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gY3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQoQVNDSUlMaXRl
cmFsIHNxbCk7CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAgIFNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCmluZGV4IDg5MmMz
ZjQ5ZTkwMTRhMzVmZTkyOTg0ZWY5YTI5MDRhN2JkZWQ1NjAuLmIwYzcxNjFhODA2YTg2OGVjNGZm
NDQ3NjUzYmI4NTNmYzA5Njg0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC0y
ODUsMTEgKzI4NSwxMSBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlk
UmVjb3Jkc1RhYmxlKCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAg
IC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMgdGFibGUuCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSwg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciKTsKLSAgICAg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQotICAgICAgICAgICAgcmV0
dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUg
UmVjb3JkcyB0YWJsZS4iOworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuICJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iX3M7CiAKLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBSZWNvcmRzIHRhYmxlIGF0IGFs
bCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCiAgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0g
U1FMSVRFX0RPTkUpIHsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0
YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKICAgICAgICAgaWYgKHNxbGl0ZVJlc3Vs
dCAhPSBTUUxJVEVfUk9XKQogICAgICAgICAgICAgcmV0dXJuICJFcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIjsKIAotICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMSk7CiAgICAgfQogCiAgICAg
QVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CkBAIC00MjcsMTggKzQyNywxOCBAQCBi
b29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2
aWNlV29ya2VyQ29udGV4dERhdGE+JgogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9u
KCptX2RhdGFiYXNlKTsKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7Ci0gICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBpbnNlcnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LT5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZBTFVFUyAoPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykiX3MpOworICAgIGlmICghaW5zZXJ0U3RhdGVtZW50
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gc3RvcmUgcmVnaXN0cmF0aW9uIGRhdGEgaW50byByZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBhdXRv
JiBzY3JpcHRTdG9yYWdlID0gdGhpcy0+c2NyaXB0U3RvcmFnZSgpOwogICAgIGZvciAoYXV0byYg
cmVnaXN0cmF0aW9uIDogcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0g
PyIpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IHNxbC5iaW5kVGV4dCgxLCByZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgYXV0byBkZWxldGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJE
RUxFVEUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9ID8iX3MpOworICAgICAgICBpZiAoIWRlbGV0
ZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgZGVsZXRlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBy
ZWdpc3RyYXRpb24udG9EYXRhYmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IGRlbGV0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHJlbW92ZSByZWdpc3Ry
YXRpb24gZGF0YSBmcm9tIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtNDU3LDE5ICs0NTcsMTkgQEAgYm9vbCBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRl
eHREYXRhPiYKICAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBjZXJ0aWZpY2F0ZUlu
Zm9FbmNvZGVyOwogICAgICAgICBjZXJ0aWZpY2F0ZUluZm9FbmNvZGVyIDw8IGRhdGEuY2VydGlm
aWNhdGVJbmZvOwogCi0gICAgICAgIGlmIChzcWwuYmluZFRleHQoMSwgZGF0YS5yZWdpc3RyYXRp
b24ua2V5LnRvRGF0YWJhc2VLZXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwu
YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9y
dCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgzLCBkYXRhLnJl
Z2lzdHJhdGlvbi5zY29wZVVSTC5wYXRoKCkudG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoNCwgZGF0YS5yZWdpc3RyYXRpb24ua2V5LnRvcE9yaWdp
bigpLmRhdGFiYXNlSWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5iaW5kRG91YmxlKDUsIGRhdGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmlu
ZFRleHQoNiwgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhkYXRhLnJlZ2lzdHJhdGlvbi51cGRhdGVW
aWFDYWNoZSkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDcsIGRh
dGEuc2NyaXB0VVJMLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5i
aW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53b3JrZXJUeXBlKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoOSwgY3NwRW5jb2Rlci5idWZmZXIoKSwg
Y3NwRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3Fs
LmJpbmRUZXh0KDEwLCBkYXRhLnJlZmVycmVyUG9saWN5KSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZlcigp
LCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigxMiwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZm
ZXIoKSwgY2VydGlmaWNhdGVJbmZvRW5jb2Rlci5idWZmZXJTaXplKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkYXRhLnJlZ2lzdHJhdGlvbi5rZXkudG9EYXRh
YmFzZUtleSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+
YmluZFRleHQoMiwgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucHJvdG9jb2xIb3N0QW5kUG9y
dCgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoMywgZGF0YS5yZWdpc3RyYXRpb24uc2NvcGVVUkwucGF0aCgpLnRvU3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg0LCBkYXRh
LnJlZ2lzdHJhdGlvbi5rZXkudG9wT3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kRG91YmxlKDUsIGRh
dGEucmVnaXN0cmF0aW9uLmxhc3RVcGRhdGVUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQtPmJpbmRUZXh0
KDYsIHVwZGF0ZVZpYUNhY2hlVG9TdHJpbmcoZGF0YS5yZWdpc3RyYXRpb24udXBkYXRlVmlhQ2Fj
aGUpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRl
eHQoNywgZGF0YS5zY3JpcHRVUkwuc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgaW5zZXJ0U3RhdGVtZW50LT5iaW5kVGV4dCg4LCB3b3JrZXJUeXBlVG9TdHJpbmcoZGF0YS53
b3JrZXJUeXBlKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRTdGF0ZW1lbnQt
PmJpbmRCbG9iKDksIGNzcEVuY29kZXIuYnVmZmVyKCksIGNzcEVuY29kZXIuYnVmZmVyU2l6ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZFRleHQo
MTAsIGRhdGEucmVmZXJyZXJQb2xpY3kpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0U3RhdGVtZW50LT5iaW5kQmxvYigxMSwgc2NyaXB0UmVzb3VyY2VNYXBFbmNvZGVyLmJ1ZmZl
cigpLCBzY3JpcHRSZXNvdXJjZU1hcEVuY29kZXIuYnVmZmVyU2l6ZSgpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+YmluZEJsb2IoMTIsIGNlcnRpZmljYXRl
SW5mb0VuY29kZXIuYnVmZmVyKCksIGNlcnRpZmljYXRlSW5mb0VuY29kZXIuYnVmZmVyU2l6ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29y
a2VyLCAiRmFpbGVkIHRvIHN0b3JlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gcmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MDIs
MjYgKzUwMiwyNiBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMo
KQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUkVMRUFTRV9MT0coU2Vydmlj
ZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzOiIpOwotICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9z
KTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzcWwgPSBt
X2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsK
KyAgICBpZiAoIXNxbCkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZyb20gcmVjb3JkcyB0YWJs
ZSAoIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwogCi0gICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgaW50IHJlc3Vs
dCA9IHNxbC0+c3RlcCgpOwogCi0gICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1
bHQgPSBzcWwuc3RlcCgpKSB7CisgICAgZm9yICg7IHJlc3VsdCA9PSBTUUxJVEVfUk9XOyByZXN1
bHQgPSBzcWwtPnN0ZXAoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAi
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6IEltcG9ydGluZyBhIHJlZ2lzdHJh
dGlvbiBmcm9tIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBhdXRvIGtleSA9IFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXk6OmZyb21EYXRhYmFzZUtleShzcWwuZ2V0Q29sdW1uVGV4dCgwKSk7
Ci0gICAgICAgIGF1dG8gb3JpZ2luVVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0
KDEpIH07Ci0gICAgICAgIGF1dG8gc2NvcGVQYXRoID0gc3FsLmdldENvbHVtblRleHQoMik7Cisg
ICAgICAgIGF1dG8ga2V5ID0gU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleTo6ZnJvbURhdGFi
YXNlS2V5KHNxbC0+Z2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIGF1dG8gb3JpZ2luVVJMID0g
VVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCgxKSB9OworICAgICAgICBhdXRvIHNjb3Bl
UGF0aCA9IHNxbC0+Z2V0Q29sdW1uVGV4dCgyKTsKICAgICAgICAgYXV0byBzY29wZVVSTCA9IFVS
TCB7IG9yaWdpblVSTCwgc2NvcGVQYXRoIH07Ci0gICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC5nZXRDb2x1bW5UZXh0
KDMpKTsKLSAgICAgICAgYXV0byBsYXN0VXBkYXRlQ2hlY2tUaW1lID0gV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKHNxbC5nZXRDb2x1bW5Eb3VibGUoNCkpOwotICAgICAgICBhdXRvIHVwZGF0ZVZp
YUNhY2hlID0gc3RyaW5nVG9VcGRhdGVWaWFDYWNoZShzcWwuZ2V0Q29sdW1uVGV4dCg1KSk7Ci0g
ICAgICAgIGF1dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC5nZXRDb2x1bW5UZXh0KDYp
IH07Ci0gICAgICAgIGF1dG8gd29ya2VyVHlwZSA9IHN0cmluZ1RvV29ya2VyVHlwZShzcWwuZ2V0
Q29sdW1uVGV4dCg3KSk7CisgICAgICAgIGF1dG8gdG9wT3JpZ2luID0gU2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKHNxbC0+Z2V0Q29sdW1uVGV4dCgzKSk7CisgICAg
ICAgIGF1dG8gbGFzdFVwZGF0ZUNoZWNrVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhz
cWwtPmdldENvbHVtbkRvdWJsZSg0KSk7CisgICAgICAgIGF1dG8gdXBkYXRlVmlhQ2FjaGUgPSBz
dHJpbmdUb1VwZGF0ZVZpYUNhY2hlKHNxbC0+Z2V0Q29sdW1uVGV4dCg1KSk7CisgICAgICAgIGF1
dG8gc2NyaXB0VVJMID0gVVJMIHsgVVJMKCksIHNxbC0+Z2V0Q29sdW1uVGV4dCg2KSB9OworICAg
ICAgICBhdXRvIHdvcmtlclR5cGUgPSBzdHJpbmdUb1dvcmtlclR5cGUoc3FsLT5nZXRDb2x1bW5U
ZXh0KDcpKTsKIAogICAgICAgICBWZWN0b3I8dWludDhfdD4gY29udGVudFNlY3VyaXR5UG9saWN5
RGF0YTsKLSAgICAgICAgc3FsLmdldENvbHVtbkJsb2JBc1ZlY3Rvcig4LCBjb250ZW50U2VjdXJp
dHlQb2xpY3lEYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoOCwgY29u
dGVudFNlY3VyaXR5UG9saWN5RGF0YSk7CiAgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgY3NwRGVjb2Rlcihjb250ZW50U2VjdXJpdHlQb2xpY3lEYXRhLmRhdGEoKSwgY29udGVudFNl
Y3VyaXR5UG9saWN5RGF0YS5zaXplKCkpOwogICAgICAgICBPcHRpb25hbDxDb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnM+IGNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgICAg
aWYgKGNvbnRlbnRTZWN1cml0eVBvbGljeURhdGEuc2l6ZSgpKSB7CkBAIC01MzIsMTAgKzUzMiwx
MCBAQCBTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgYXV0byByZWZlcnJlclBvbGljeSA9IHNxbC5n
ZXRDb2x1bW5UZXh0KDkpOworICAgICAgICBhdXRvIHJlZmVycmVyUG9saWN5ID0gc3FsLT5nZXRD
b2x1bW5UZXh0KDkpOwogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBzY3JpcHRSZXNvdXJjZU1h
cERhdGE7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTAsIHNjcmlwdFJlc291
cmNlTWFwRGF0YSk7CisgICAgICAgIHNxbC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDEwLCBzY3Jp
cHRSZXNvdXJjZU1hcERhdGEpOwogICAgICAgICBIYXNoTWFwPFVSTCwgU2VydmljZVdvcmtlckNv
bnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdD4gc2NyaXB0UmVzb3VyY2VNYXA7CiAKICAgICAgICAg
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBzY3JpcHRSZXNvdXJjZU1hcERlY29kZXIoc2NyaXB0
UmVzb3VyY2VNYXBEYXRhLmRhdGEoKSwgc2NyaXB0UmVzb3VyY2VNYXBEYXRhLnNpemUoKSk7CkBA
IC01NTAsNyArNTUwLDcgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNv
cmRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBjZXJ0aWZpY2F0ZUlu
Zm9EYXRhOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDExLCBjZXJ0aWZpY2F0
ZUluZm9EYXRhKTsKKyAgICAgICAgc3FsLT5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMTEsIGNlcnRp
ZmljYXRlSW5mb0RhdGEpOwogICAgICAgICBPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRp
ZmljYXRlSW5mbzsKIAogICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGNlcnRpZmlj
YXRlSW5mb0RlY29kZXIoY2VydGlmaWNhdGVJbmZvRGF0YS5kYXRhKCksIGNlcnRpZmljYXRlSW5m
b0RhdGEuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IGUyYzc3MTVhMzE1NmEwZmY2OTYyYWRlZjNkOWZmYWE2
MGIxZTA3NmIuLmE4YWVkNzMxNjUxNTVlMGNmMWYyYmQzNjJiMTFlODlmOWIyZGUyOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtMTA2LDcgKzEwNiw3IEBAIGNvbnN0ZXhwciBhdXRvIHRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHNFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFCiBjb25zdGV4cHIg
YXV0byBzdG9yYWdlQWNjZXNzRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEg
RlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/
IEFORCB0b3BMZXZlbERvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKIAogLy8gVVBEQVRFIFF1ZXJp
ZXMKLWNvbnN0ZXhwciBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSA9ID8gIgorY29uc3RleHByIGF1dG8gbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRl
cmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyAiX3MKICAgICAi
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29uc3RleHByIGF1dG8gdXBkYXRlTGFz
dFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwogY29uc3RleHByIGF1dG8gdXBkYXRlRGF0YVJl
Y29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29y
ZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7CkBAIC0xMjcsOCAr
MTI3LDggQEAgY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJT
RUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXIKIGNvbnN0ZXhwciBhdXRvIGhhZFVzZXJJ
bnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNF
TEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKIGNvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9u
UXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVz
ZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJf
czsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNF
TEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyI7
Ci1jb25zdGV4cHIgYXV0byBnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wUXVlcnkgPSAi
U0VMRUNUIE1BWChsYXN0VXBkYXRlZCkgRlJPTSAoU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyBhbmQg
dG9wRnJhbWVEb21haW5JRCA9ID8iCitjb25zdGV4cHIgYXV0byBnZXRSZXNvdXJjZURhdGFCeURv
bWFpbk5hbWVRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBnZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wUXVlcnkgPSAiU0VMRUNUIE1BWChsYXN0VXBkYXRlZCkgRlJPTSAoU0VMRUNU
IGxhc3RVcGRhdGVkIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJG
cmFtZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iX3MKICAgICAiVU5JT04g
QUxMIFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSBX
SEVSRSB0b0RvbWFpbklEID0gPyBhbmQgZnJvbURvbWFpbklEID0gPyIKICAgICAiVU5JT04gQUxM
IFNFTEVDVCBsYXN0VXBkYXRlZCBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gYW5kIHRvcEZyYW1lRG9tYWluSUQgPSA/Igog
ICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBhbmQgdG9Eb21haW5JRCA9
ID8pIl9zOwpAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc2V0QnVzeVRpbWVvdXQobV9k
YXRhYmFzZSwgIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIik7Ci0gICAgaWYgKHNldEJ1c3lU
aW1lb3V0LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sgfHwgc2V0QnVzeVRpbWVvdXQuc3RlcCgpICE9
IFNRTElURV9ST1cpIHsKKyAgICBhdXRvIHNldEJ1c3lUaW1lb3V0ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAwMCJfcyk7CisgICAgaWYgKCFz
ZXRCdXN5VGltZW91dCB8fCBzZXRCdXN5VGltZW91dC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQw
MSwyMiArNDAxLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5JVFBEYXRhYmFzZSgpCiBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkK
IHsKICAgICBWZWN0b3I8U3RyaW5nPiBtaXNzaW5nVGFibGVzOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVS
RSB0eXBlPSd0YWJsZScgYW5kIHRibF9uYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIDEgZnJvbSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3Rh
YmxlJyBhbmQgdGJsX25hbWU9PyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVw
YXJlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
CiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5r
ZXlzKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5iaW5kVGV4dCgxLCB0YWJsZSkgIT0gU1FM
SVRFX09LKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAhPSBT
UUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJs
ZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVz
SW5TY2hlbWEgc2NoZW1hIGlzIG1pc3NpbmcgdGFibGU6ICVzIiwgdGhpcywgdGFibGUuYXNjaWko
KS5kYXRhKCkpOwogICAgICAgICAgICAgbWlzc2luZ1RhYmxlcy5hcHBlbmQoU3RyaW5nKHRhYmxl
KSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIHN0YXRl
bWVudC0+cmVzZXQoKTsKICAgICB9CiAgICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtNDI2LDggKzQyNiw4IEBAIE9wdGlvbmFs
PFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2hl
Y2tGb3JNaXNzaW5nVGFiCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZW5hYmxlRm9y
ZWlnbktleXMobV9kYXRhYmFzZSwgIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiIpOwotICAgIGlm
IChlbmFibGVGb3JlaWduS2V5cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8IGVuYWJsZUZvcmVp
Z25LZXlzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktl
eXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBP
TiJfcyk7CisgICAgaWYgKCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3Jl
aWduS2V5cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CkBAIC00MzYsMzEgKzQzNiwzMSBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbmFibGVGb3JlaWduS2V5cygpCiAKIFRhYmxl
QW5kSW5kZXhQYWlyIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjdXJyZW50
VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IGdldFRhYmxlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNF
TEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSciLCB0YWJsZU5hbWUs
ICInIEFORCB0eXBlID0gJ3RhYmxlJyIpKTsKLSAgICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZ2V0VGFibGVTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAndGFi
bGUnIikpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IGlmIChnZXRUYWJsZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgIGlmIChn
ZXRUYWJsZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVjdXRpbmcgc3RhdGVt
ZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgU3RyaW5n
IGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwor
ICAgIFN0cmluZyBjcmVhdGVUYWJsZVF1ZXJ5ID0gZ2V0VGFibGVTdGF0ZW1lbnQtPmdldENvbHVt
blRleHQoMCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0SW5kZXhTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJs
X25hbWU9JyIsIHRhYmxlTmFtZSwgIicgQU5EIHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChn
ZXRJbmRleFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBnZXRJ
bmRleFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nIiwgdGFibGVOYW1l
LCAiJyBBTkQgdHlwZSA9ICdpbmRleCciKSk7CisgICAgaWYgKCFnZXRJbmRleFN0YXRlbWVudCkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJs
ZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4OwotICAgIGlmIChnZXRJ
bmRleFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0lu
ZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgIGlm
IChnZXRJbmRleFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgYXV0
byByYXdJbmRleCA9IFN0cmluZyhnZXRJbmRleFN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgwKSk7
CiAgICAgICAgIGlmICghcmF3SW5kZXguaXNFbXB0eSgpKQogICAgICAgICAgICAgaW5kZXggPSBy
YXdJbmRleDsKICAgICB9CkBAIC00ODAsMjAgKzQ4MCwyMCBAQCBib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dFNjaAogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaXNzaW5n
VW5pcXVlSW5kaWNlcygpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGUgPSAnaW5kZXgnIikpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgn
Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlzc2lu
Z1VuaXF1ZUluZGljZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4
IGNvdW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
aWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0
Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAotICAgIGlmIChzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApIDwgZXhw
ZWN0ZWRJbmRleENvdW50KQorICAgIGlmIChzdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSA8IGV4
cGVjdGVkSW5kZXhDb3VudCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NTQsOCArNTU0LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAo
YXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAg
ICAgICAgIGF1dG8gcXVlcnkgPSBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZSwgIiBS
RU5BTUUgVE8gXyIsIHRhYmxlKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IGFsdGVyVGFibGUo
bV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBpZiAoYWx0ZXJUYWJsZS5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LIHx8IGFsdGVyVGFibGUuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAg
IGF1dG8gYWx0ZXJUYWJsZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7Cisg
ICAgICAgIGlmICghYWx0ZXJUYWJsZSB8fCBhbHRlclRhYmxlLT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDE2ICs1NzAsMTYgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5KCkKIAogICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5k
SW5kZXhRdWVyaWVzKCkua2V5cygpKSB7CiAgICAgICAgIGF1dG8gcXVlcnkgPSBpbnNlcnREaXN0
aW5jdFZhbHVlc0luVGFibGVRdWVyeSh0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBt
aWdyYXRlVGFibGVEYXRhKG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKG1pZ3JhdGVU
YWJsZURhdGEucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBtaWdyYXRlVGFibGVEYXRhLnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVUYWJsZURhdGEgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJs
ZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZh
aWxlZCB0byBtaWdyYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBkcm9wUXVlcnkg
PSBtYWtlU3RyaW5nKCJEUk9QIFRBQkxFIF8iLCB0YWJsZSk7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBkcm9wVGFibGVRdWVyeShtX2RhdGFiYXNlLCBkcm9wUXVlcnkpOwotICAgICAgICBpZiAo
ZHJvcFRhYmxlUXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSyB8fCBkcm9wVGFibGVRdWVyeS5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChkcm9wUXVlcnkpOworICAgICAgICBpZiAoIWRyb3BU
YWJsZVF1ZXJ5IHx8IGRyb3BUYWJsZVF1ZXJ5LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nhcnkg
ZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTk3LDE3ICs1OTcsMTcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5KCkKIAogVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlBS
QUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7CisgICAgYXV0byBzdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiUFJBR01BIHRhYmxlX2lu
Zm8oIiwgdGFibGVOYW1lLCAiKSIpKTsKIAotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSykgeworICAgIGlmICghc3RhdGVtZW50KSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpnZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
VmVjdG9yPFN0cmluZz4gY29sdW1uczsKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7Ci0gICAgICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpOworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIGF1dG8gbmFtZSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICAgICAgY29s
dW1ucy5hcHBlbmQobmFtZSk7CiAgICAgfQogCkBAIC02MjIsMTggKzYyMiwxOCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUoU3RyaW5nJiYgdGFibAogICAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5zLmNvbnRhaW5zKGNv
bHVtbikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiQUxURVIgVEFCTEUgIiwg
dGFibGVOYW1lLCAiIEFERCBDT0xVTU4gIiwgY29sdW1uKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJs
ZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5h
YmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBhZGQgbWlzc2luZyBjb2x1bW5zIHRvIHRh
YmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7
CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiB9CiAKQEAgLTY0OCwxMyArNjQ4
LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zSWZOZWNlc3NhcnkoKQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhpc3Rp
bmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUmJiBl
eHBlY3RlZENvbHVtbk5hbWUpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENP
TFVNTiAiLCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7
Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZygiQUxURVIg
VEFCTEUgIiwgdGFibGVOYW1lLCAiIFJFTkFNRSBDT0xVTU4gIiwgZXhpc3RpbmdDb2x1bW5OYW1l
LCAiIFRPICIsIGV4cGVjdGVkQ29sdW1uTmFtZSkpOworICAgIGlmICghc3RhdGVtZW50KSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHBy
ZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgaWYgKHN0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nQ29sdW1uc1RvVGFibGUgZXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byByZW5hbWUg
Y29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzEyLDE1ICs3MTIsMTUgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNz
YXJ5KCkKICAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKICAgICB7CiAgICAgICAgIC8vIEZldGNo
IHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYnNlcnZlZERvbWFpbnMnIik7
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5
cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09ic2VydmVkRG9tYWlu
cyciX3MpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2Jz
ZXJ2ZWREb21haW5zIHRhYmxlLiIpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBPYnNlcnZlZERvbWFpbnMgdGFibGUgYXQgYWxsLCBvciB0aGVyZSBpcyBhbiBlcnJvciBl
eGVjdXRpbmcgdGhlIGZldGNoLCBkZWxldGUgdGhlIGZpbGUuCi0gICAgICAgIGlmIChzdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5n
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxl
LiIpOwogICAgICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlm
TmVjZXNzYXJ5KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Z2V0Q29sdW1uVGV4dCgxKTsKICAgICB9CiAKICAgICBBU1NF
UlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKQEAgLTc0OCwxNSArNzQ4LDE3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJ
Zk5lY2Vzc2FyeSgpCiAgICAgbWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCk7CiB9
CiAKLVNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4mIHN0YXRlbWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3Ry
aW5nJiBsb2dTdHJpbmcpIGNvbnN0CitTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0ZXJh
bCBxdWVyeSwgY29uc3QgU3RyaW5nJiBsb2dTdHJpbmcpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHF1ZXJ5KTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpOwotICAgICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhl
YXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWko
KS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jl
c2V0U2NvcGUgeyB9OwogICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9y
RXJyb3IudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJh
c2UuaXNPcGVuKCkpOwogICAgIH0KICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgeyBzdGF0ZW1lbnQuZ2V0KCkgfTsKIH0KQEAgLTEwMDQsOSArMTAwNiw4IEBAIE9wdGlv
bmFsPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlu
SUQoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gU3Rh
dGVtZW50OiAlcy4gRXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBz
Y29wZWRTdGF0ZW1lbnQtPnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTAzOSwyMyArMTA0MCwyMyBAQCBTdHJpbmcgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNv
bnN0IEhhc2hTZQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25z
dCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluTGlzdCwgdW5zaWduZWQgZG9tYWlu
SUQpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3Qo
ZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQobWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVu
c3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7IikpOwogICAgIAotICAgIGlm
IChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQuYmluZEludCgxLCBkb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklE
KSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICBpZiAoc3Rh
dGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKLSAgICAgICAgaWYgKGluc2VydFJlbGF0aW9u
c2hpcFN0YXRlbWVudC5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgeworICAgICAgICBpZiAoaW5zZXJ0UmVsYXRp
b25zaGlwU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5zZXJ0UmVsYXRpb25z
aGlwU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChpbnNlcnRSZWxh
dGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CkBAIC0xMjI5LDE3ICsxMjMwLDE3IEBAIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
CiAKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YT4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIGNvbnN0IGF1dG8gcHJldmFsZW50RG9tYWlu
c0JpbmRQYXJhbWV0ZXIgPSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsID8gIiUiIDogIjEiOwotICAgIFNRTGl0ZVN0YXRl
bWVudCBzb3J0ZWRTdGF0aXN0aWNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCAiLCBq
b2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKSkpOwotICAgIGlmIChzb3J0ZWRTdGF0aXN0aWNz
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy5iaW5k
VGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKLSAgICAgICAgfHwgc29ydGVk
U3RhdGlzdGljcy5iaW5kVGV4dCgyLCAiJSIpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gc29y
dGVkU3RhdGlzdGljcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJT
RUxFQ1QgIiwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkpKTsKKyAgICBpZiAoIXNvcnRl
ZFN0YXRpc3RpY3MKKyAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMSwgcHJl
dmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCisgICAgICAgIHx8IHNvcnRlZFN0YXRpc3RpY3Mt
PmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVn
YXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwogICAgIH0KLSAgICB3aGlsZSAo
c29ydGVkU3RhdGlzdGljcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBpZiAoaGFz
QmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy5nZXRDb2x1bW5JbnQoMSkpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHRoaXJkUGFydHlEb21haW5JRCA9IHNvcnRlZFN0YXRpc3RpY3MuZ2V0Q29s
dW1uSW50KDApOworICAgIHdoaWxlIChzb3J0ZWRTdGF0aXN0aWNzLT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykgeworICAgICAgICBpZiAoaGFzQmVlblRoaXJkUGFydHkoc29ydGVkU3RhdGlzdGljcy0+
Z2V0Q29sdW1uSW50KDEpKSkgeworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluSUQg
PSBzb3J0ZWRTdGF0aXN0aWNzLT5nZXRDb2x1bW5JbnQoMCk7CiAgICAgICAgICAgICBhdXRvIHRo
aXJkUGFydHlEb21haW4gPSBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJl
Z2lzdHJhYmxlRG9tYWluU3RyaW5nKGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh0aGlyZFBh
cnR5RG9tYWluSUQpKTsKICAgICAgICAgICAgIHRoaXJkUGFydHlEYXRhTGlzdC5hcHBlbmQoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSB7IHRoaXJkUGFydHlE
b21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh0aGly
ZFBhcnR5RG9tYWluSUQsIHRoaXJkUGFydHlEb21haW4pIH0pOwogICAgICAgICB9CkBAIC0xMjY1
LDkgKzEyNjYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucwogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOwotICAg
IGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29y
ZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFp
biBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5j
cmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xMjg1LDMxICsxMjg1LDMwIEBAIHVu
c2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZp
bmROb25QcmV2YWxlbnREb21haW5zCiAgICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOwogCiAg
ICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOwotICAgIFNRTGl0ZVN0
YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsICJTRUxFQ1QgU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMu
ZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAwIl9zKTsKLSAgICBpZiAoZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IGZpbmRTdWJyZXNvdXJjZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWlu
SUQpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gZmluZFN1YnJlc291cmNlcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIg
Sk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURv
bWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCJfcyk7CisgICAg
aWYgKCFmaW5kU3VicmVzb3VyY2VzIHx8IGZpbmRTdWJyZXNvdXJjZXMtPmJpbmRJbnQoMSwgcHJp
bWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgaW50IG5ld0Rv
bWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmdldENvbHVtbkludCgwKTsKICAgICAgICAgYXV0
byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5l
d0RvbWFpbklEKTsKICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAg
ICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgfQogCi0g
ICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFzZSwgIlNFTEVDVCBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlu
cy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hF
UkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAw
Il9zKTsKLSAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGZpbmRUb3BGcmFtZXMuYmluZEludCgxLCBwcmltYXJ5RG9tYWluSUQpICE9IFNRTElU
RV9PSykgeworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJv
bSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMg
T04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
LmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlu
cy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZyYW1lcworICAgICAgICB8
fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09L
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdEb21haW5JRCA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29s
dW1uSW50KDApOworICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5nZXRDb2x1bW5J
bnQoMCk7CiAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rp
b25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CiAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQu
c2Vjb25kKQogICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9t
YWluSUQpOwpAQCAtMTM0MSwyMSArMTM0MCwyMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbAog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgU3RkU2V0PHVuc2lnbmVkPiBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVJl
ZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9t
YWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOwotICAgIGlmIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHN1
YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
ICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVJlZGlyZWN0U3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZST00gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQg
QU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGly
ZWN0U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVu
dER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQtPmdldENv
bHVtbkludCgwKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBK
T0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZh
bGVudCA9IDEiX3MpOwotICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUo
KSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGly
ZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Cisg
ICAgYXV0byB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VE
b21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFp
bnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
by50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAg
ICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAodG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBw
cmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LT5n
ZXRDb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVl
VG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikp
OwotICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxl
bnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdl
PFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2lu
KCksIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKCFtYXJr
UHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEz
NjYsMTIgKzEzNjQsMTIgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXM+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3RhdGVtZW50IG5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0
cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVy
eVByZXZhbGVudCA9IDAiX3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3Rh
dGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKLSAgICAgICAgd2hpbGUgKG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCi0gICAgICAgICAgICAgICAgLCBub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKKyAgICBhdXRv
IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAg
IGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CisgICAg
ICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFibGVEb21h
aW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAg
ICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDIp
ID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkxvdwogICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKICAgICAgICAgICAgIHJlc3Vs
dHMuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICB9CkBAIC0xMzg2LDQzICsxMzg0LDQzIEBAIEhh
c2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAKICAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIs
IGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7
Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgewotICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAg
dW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQo
dG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpOwogICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwogICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDEpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7Ci0gICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VE
b21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3Vy
Y2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3ViZnJhbWVEb21haW5JRCwg
Q09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YmZyYW1lRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdS
T1VQIEJZIHN1YmZyYW1lRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9t
YWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7Ci0gICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1h
a2VTdHJpbmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21h
aW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAo
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxl
ICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5J
RCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50
LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSkpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNTQ5LDEwICsxNTQ3LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWlu
JiYKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbmNyZW1lbnRTdG9y
YWdlQWNjZXNzKG1fZGF0YWJhc2UsICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Iik7
Ci0gICAgaWYgKGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgKnN1YkZyYW1lU3Rh
dHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nl
c3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNj
ZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGlt
ZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9t
YWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAg
fHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vj
b25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0xNjQ2LDkgKzE2NDQsOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRh
dGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0
YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7Ci0gICAg
aWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhl
cmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRv
bWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTE3NzYsMTAgKzE3NzMsMTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWluSUQg
PSA/Iik7Ci0gICAgaWYgKHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS5i
aW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
cmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJfcyk7Cisg
ICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAgICAgICAgfHwgcmVtb3Zl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQuc2Vjb25k
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTgzMiwxMCArMTgyOSwxMCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25z
dCBSZWdpc3RyYWJsZQogICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxz
ZSwgeyB9KTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hF
UkUgZG9tYWluSUQgPSA/Iik7Ci0gICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwg
KnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9y
YWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gcmVtb3ZlU3RvcmFn
ZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAg
aWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Mt
PmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8
fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CkBAIC0xOTE4LDkgKzE5MTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPgogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2
ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxk
TGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFp
bnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKLSAgICBpZiAoZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGF1dG8gZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+
OjppdGVyYXRvcj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAg
IGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMwMSwxNiAr
MjI5NywxNSBAQCBDb29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBz
dWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpc1ByZXZhbGVudCwg
aGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4
dCgxLCBzdWJyZXNvdXJjZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVBY2Nlc3MgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAot
ICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKLSAg
ICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDApOwotICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3Rh
dGVtZW50LmdldENvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsKKyAgICBib29sIGhhc05vRW50
cnkgPSBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XOworICAgIGJvb2wgaXNQcmV2YWxl
bnQgPSAhaGFzTm9FbnRyeSAmJiAhIXN0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOworICAgIGJv
b2wgaGFkVXNlckludGVyYWN0aW9uID0gIWhhc05vRW50cnkgJiYgc3RhdGVtZW50LT5nZXRDb2x1
bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CiAKICAgICBpZiAoIWFyZUFsbFRoaXJkUGFydHlDb29r
aWVzQmxvY2tlZFVuZGVyKHRvcEZyYW1lRG9tYWluKSAmJiAhaXNQcmV2YWxlbnQpCiAgICAgICAg
IHJldHVybiBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xpY3k7CkBAIC0yMzMzLDE0ICsy
MzI4LDE0IEBAIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTCiAKICAgICBhdXRvIGZpcnN0UGFydHlQ
cmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWlu
SUQgPSA/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9t
YWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAo
IXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcmVxdWVzdGluZ0Rv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsIGZp
cnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQogICAgICAgICByZXR1cm4gU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duOjpObzsKIAotICAgIHJldHVybiAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9t
cHRXYXNTaG93bjo6Tm87CisgICAgcmV0dXJuICEhc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkg
PyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6Tm87CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0CkBAIC0yMzQ4LDEyICsyMzQzLDEyIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5k
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDAiX3MpOwotICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWlu
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlcklu
dGVyYWN0aW9uID0gMCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwogICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KTsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdp
c3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNjMsMTIgKzIzNTgsMTIgQEAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluc1RvQmxvY2tCdXQKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAx
Il9zKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0
byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3Ry
YWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5E
IGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAg
ICByZXR1cm4gcmVzdWx0czsKICAgICAKLSAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQotICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDAp
KSk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTIzNzgsMTIgKzIzNzMsMTIgQEAgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZG9tYWluc1dpdGhVc2VySW4KICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBP
YnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7Ci0gICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgIAotICAgIHdoaWxl
IChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5k
KFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5T
dHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKyAgICB3aGlsZSAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAt
MjM5MywxMyArMjM4OCwxMiBAQCBIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURv
bWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OgogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1YkZyYW1lRG9tYWluLCByZWdp
c3RyYWJsZURvbWFpbiBGUk9NIChTRUxFQ1Qgby5yZWdpc3RyYWJsZURvbWFpbiBhcyBzdWJGcmFt
ZURvbWFpbiwgcy50b3BMZXZlbERvbWFpbklEIGFzIHRvcExldmVsRG9tYWluSUQgRlJPTSBPYnNl
cnZlZERvbWFpbnMgYXMgbyBJTk5FUiBKT0lOIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyBhcyBzIFdIRVJFIG8uZG9tYWluSUQgPSBzLmRvbWFpbklEKSBhcyB6IElOTkVSIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIGRvbWFpbklEID0gei50b3BMZXZlbERvbWFpbklEOyJfcyk7Ci0K
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzdWJGcmFtZURvbWFp
biwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVnaXN0cmFibGVEb21haW4gYXMg
c3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0b3BMZXZlbERvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5kb21haW5JRCkgYXMgeiBJTk5F
UiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHoudG9wTGV2ZWxEb21haW5JRDsi
X3MpOworICAgIGlmICghc3RhdGVtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAg
IHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIHJlc3VsdHMu
YWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21h
aW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKSk7CisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYWRkKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEp
KSwgUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQtPmdldENvbHVtblRleHQoMCkpKTsKIAogICAgIHJldHVybiByZXN1
bHRzOwogfQpAQCAtMjQ0NSwxOSArMjQzOSwxOCBAQCBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYQog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIFZlY3RvcjxEb21haW5E
YXRhPiByZXN1bHRzOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBGUk9N
IE9ic2VydmVkRG9tYWlucyBMRUZUIEpPSU4gKFNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQo
KikgYXMgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBHUk9VUCBCWSBzb3VyY2VEb21haW5J
RCkgYXMgeiBPTiB6LnNvdXJjZURvbWFpbklEID0gZG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9t
YWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBn
cmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3Vu
dE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBPYnNlcnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxF
Q1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCopIGFzIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBm
cm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQpIGFzIHogT04gei5zb3VyY2VEb21haW5JRCA9IGRv
bWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7
CiAgICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAg
ICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2Vk
Q3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpKQotICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50Lmdl
dENvbHVtbkRvdWJsZSgyKSkKLSAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCgz
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQp
ID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNSkg
PyB0cnVlIDogZmFsc2UKLSAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNikpCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAsIFJlZ2lzdHJhYmxl
RG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVt
ZW50LT5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHMoc3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Z2V0Q29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmdldENvbHVtbkludCg2KSkKICAgICAgICAgfSk7
CiAgICAgfQogICAgIApAQCAtMjQ3MywxMSArMjQ2NiwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25l
ZD4mJgogCiAgICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFu
Z2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklEc1RvQ2xlYXIuYmVnaW4oKSwg
ZG9tYWluSURzVG9DbGVhci5lbmQoKSkpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyR3Jh
bmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgIGF1dG8gY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwg
bGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmICghY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgIGlmIChjbGVhckdyYW5kZmF0aGVy
aW5nU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTI2
MTcsMjMgKzI2MTAsMjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIHNpemVfdCBjb3VudExlZnRUb1BydW5l
ID0gY291bnQgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvOwogICAgIEFTU0VSVChj
b3VudExlZnRUb1BydW5lKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCByZWNvcmRzVG9QcnVuZSht
X2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZ
IGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iKTsKLSAg
ICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZWNvcmRzVG9QcnVuZS5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1bmUpICE9IFNRTElURV9PSykg
eworICAgIGF1dG8gcmVjb3Jkc1RvUHJ1bmUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50
ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBMSU1JVCA/Il9zKTsKKyAgICBpZiAoIXJl
Y29yZHNUb1BydW5lIHx8IHJlY29yZHNUb1BydW5lLT5iaW5kSW50KDEsIGNvdW50TGVmdFRvUHJ1
bmUpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gZW50
cmllc1RvUHJ1bmU7Ci0gICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQotICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmdldENv
bHVtbkludCgwKSk7CiAKICAgICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KFdURjo6SXRl
cmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZW50cmllc1RvUHJ1bmUuYmVn
aW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBwcnVu
ZUNvbW1hbmQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7Ci0gICAgaWYgKHBy
dW5lQ29tbWFuZC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHBydW5lQ29tbWFu
ZC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudChtYWtlU3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIpKTsKKyAgICBpZiAo
IXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNywzNSArMjcwOCwzMyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3Qg
UmVnaXN0cgogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0Nv
cnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YmZyYW1l
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50KG1fZGF0YWJhc2UsIGNvdW50
U3ViZnJhbWVVbmRlclRvcEZyYW1lUXVlcnkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVDb3VudChtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZVF1ZXJ5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbyhtX2RhdGFiYXNlLCBjb3VudFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVy
eSk7CisgICAgYXV0byBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChjb3VudFN1YmZyYW1lVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBhdXRv
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KGNvdW50U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChjb3Vu
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSk7CiAgICAgCi0gICAgaWYgKHN1YkZy
YW1lVW5kZXJUb3BGcmFtZUNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVz
dGluZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYg
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVE
b21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC5iaW5kSW50KDIsIGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQuYmlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LmJpbmRJbnQoMiwgZG9tYWlu
SUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSykgeworICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZElu
dCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklEKHRv
cEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4p
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJpbmRJ
bnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9w
RnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVDb3VudC5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgIGlmIChzdWJG
cmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAg
ICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIChzdWJGcmFtZVVuZGVy
VG9wRnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLmdldENvbHVtbkludCgwKSA9PSAxKTsKKyAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJU
b3BGcmFtZUNvdW50LT5nZXRDb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+Z2V0Q29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+Z2V0Q29sdW1uSW50KDApID09IDEpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBlbmRC
b29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wg
ZmxhZykKQEAgLTI4MTIsMjcgKzI4MDEsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJgogICAg
IGlmIChxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgZGF0YShtX2RhdGFiYXNlLCBxdWVyeSk7CisgICAgYXV0byBkYXRhID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KHF1ZXJ5KTsKICAgICAKLSAgICBpZiAoZGF0YS5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGRhdGEuYmluZEludCgxLCBkb21haW5JRChSZWdp
c3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoZG9tYWluKSkudmFsdWUoKSkg
IT0gU1FMSVRFX09LKSB7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEtPmJpbmRJbnQoMSwgZG9tYWlu
SUQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21Ib3N0KGRvbWFpbikpLnZh
bHVlKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxlZCB0byBwcmVwYXJlIG9y
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChkYXRhLnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKQorICAgIGlmIChkYXRhLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgICIpOwogICAgIGJ1aWxkZXIu
YXBwZW5kKHRhYmxlTmFtZSk7CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6XG4iKTsKICAg
ICAKLSAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLmdl
dENvbHVtbkludCgwKSk7CisgICAgYXV0byByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoZGF0YS0+Z2V0Q29sdW1uSW50KDApKTsKICAgICBhcHBlbmROZXh0RW50cnkoYnVpbGRl
ciwgcmVzdWx0KTsKICAgICAKLSAgICB3aGlsZSAoZGF0YS5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS5nZXRD
b2x1bW5JbnQoMCkpOworICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewor
ICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Z2V0Q29s
dW1uSW50KDApKTsKICAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CiAg
ICAgfQogfQpAQCAtMjk0NiwyOCArMjkzNCwyNiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklEKQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRp
bmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRp
bmdEYXRlczsiX3MpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRNb3N0UmVjZW50T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUICogRlJPTSBPcGVyYXRpbmdEYXRlcyBP
UkRFUiBCWSB5ZWFyIERFU0MsIG1vbnRoIERFU0MsIG1vbnRoRGF5IERFU0MgTElNSVQgMTsiX3Mp
OwotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVT
QywgbW9udGggREVTQywgbW9udGhEYXkgREVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CisgICAg
YXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdEYXRlczsiX3MpOworICAgIGF1
dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBE
RVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7Il9zKTsKKyAgICBhdXRvIGdl
dE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250
aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87Il9zKTsKIAotICAgIGlmIChj
b3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9wZXJhdGlu
Z0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50
T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9vcGVyYXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKTsKKyAgICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5n
RGF0ZXNTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKIAotICAgIGlmIChnZXRNb3N0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVz
UGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdE
YXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmdldENvbHVtbkludCgwKSwg
Z2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpLCBnZXRN
b3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikpOworICAgIG1f
bW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMikpOwogCi0gICAgaWYgKGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGlmICghZ2V0
T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIGR1cmluZyB0aGUgY2FsbCB0byBwcmVwYXJlKCkgd2l0
aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4iLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI5NzYsMjYgKzI5NjIsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKICAg
ICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAt
IDEpCiAgICAgICAgIG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gV1RGOjpudWxsb3B0Owog
ICAgIGVsc2UgewotICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5i
aW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRl
bWVudCBmYWlsZWQgd2l0aCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4g
VGhlIGVycm9yIGNvdWxkIGJlIGluIHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9zaG9y
dFdpbmRvd09wZXJhdGluZ0RhdGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5k
b3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LmdldENvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRD
b2x1bW5JbnQoMikpOworICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJh
dGluZ0RhdGUoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
LCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogCiAg
ICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAt
IDEpCiAgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBXVEY6Om51bGxvcHQ7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQucmVzZXQo
KTsKLSAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuYmluZEludCgx
LCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+cmVzZXQoKTsKKyAg
ICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRo
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQg
YmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdE
YXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LmdldENv
bHVtbkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpKTsKKyAg
ICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3BlcmF0
aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPmdldENvbHVtbkludCgyKSk7CiAgICAgfQogfQogCkBAIC0zMDExLDIxICsyOTk3
LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVU
b2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBt
X29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAg
aWYgKHJvd3NUb1BydW5lID4gMCkgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlTGVh
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBP
cGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3Mp
OwotICAgICAgICBpZiAoZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBkZWxldGVMZWFzdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVU
RSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERheSBMSU1J
VCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNs
dWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVMZWFzdFJlY2VudE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
SU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwgbW9udGhE
YXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKGluc2VydE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LmJpbmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5iaW5kSW50KDIsIHRvZGF5Lm1vbnRo
KCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50
LmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
YXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRo
LCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICBpZiAoIWluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
YmluZEludCgxLCB0b2RheS55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMs
IHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTMwNjksMTYg
KzMwNTUsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAgICAgICAgZGF5c0Fnb0luU2Vj
b25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlz
VG9TdWJ0cmFjdDsKICAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpm
cm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsK
IAotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCht
X2RhdGFiYXNlLCAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBt
b250aCwgbW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgICAgIGlmIChpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQuYmluZEludCgxLCBkYXRlVG9JbnNlcnQu
eWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQuYmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LmJpbmRJbnQoMywgZGF0
ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgaW5zZXJ0
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
YXV0byBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRo
LCBtb250aERheSkgU0VMRUNUID8sID8sID87Il9zKTsKKyAgICAgICAgaWYgKCFpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3Rh
dGVtZW50LT5iaW5kSW50KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCBkYXRl
VG9JbnNlcnQubW9udGgoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGluc2VydE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBpbnNlcnRPcGVyYXRp
bmdEYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0
ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0
ZXJzKCk7CkBAIC0zMjAxLDM2ICszMTg3LDM2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDCiAg
ICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2
YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFs
aWQgcmVwb3J0IHRpbWVzLgogICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
ICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKIAotICAgICAg
ICBhdXRvIHN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJ
bnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0
YXRlbWVudC5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMywgYXR0cmlidXRp
b24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQu
YmluZEludCg0LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kSW50KDUsIHByaW9yaXR5KSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xp
Y2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg4LCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQuYmlu
ZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5z
aWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LmJpbmREb3VibGUoMTEsIGRlc3RpbmF0
aW9uRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGluYXRp
b25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQoKS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoNSwgcHJpb3JpdHkp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDYsIGF0
dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDcsIHNvdXJj
ZUVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDgsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVU
b2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOSwgc291cmNlVW5saW5rYWJsZVRva2VuID8g
c291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoMTAsIHNv
dXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRV
UkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVu
dC0+YmluZERvdWJsZSgxMSwgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVy
eSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0YXRlbWVudCA9IFNR
TGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5KTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9u
RGVzdGluYXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVu
dC5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNr
KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3RhdGVtZW50LmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlu
a2FibGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/
IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCg3LCBzb3VyY2VV
bmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDog
ZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudChpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
KnNvdXJjZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDIsICphdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMywgYXR0cmlidXRpb24uc291cmNlSUQo
KS5pZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg0LCBh
dHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg1LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1w
dHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQo
Niwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5zaWduYXR1
cmVCYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Rh
dGVtZW50LT5iaW5kVGV4dCg3LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmth
YmxlVG9rZW4tPmtleUlEQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBp
bnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNDM1LDE0ICsz
NDIxLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXR0
cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTCiAKIFN0cmluZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZygp
CiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cyhtX2RhdGFiYXNlLCAiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MiJfcyk7Ci0gICAgaWYgKHBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LIHx8
IHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKKyAgICBp
ZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFz
dXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0
Q29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMuZ2V0Q29s
dW1uSW50KDEpKQorICAgIGlmICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5n
ZXRDb2x1bW5JbnQoMCkgJiYgIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Z2V0
Q29sdW1uSW50KDEpKQogICAgICAgICByZXR1cm4gIlxuTm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnQgZGF0YS5cbiJfczsKIAogICAgIGF1dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQsIGFsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25zUXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFRvU3RyaW5nIl9zKTsKQEAgLTM1NzMsMTEgKzM1NTksMTEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6
UHJpdmF0ZUMKICAgICBpZiAoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgfHwgc291cmNl
RWFybGllc3RUaW1lVG9TZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoY2xlYXJBdHRy
aWJ1dGVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50LmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC5iaW5kSW50KDIsICpk
ZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBhdXRvIGNsZWFy
QXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfcyk7CisgICAgaWYg
KCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0byBzdGVwLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNTg3LDE4
ICszNTczLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1h
cmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBleHBpcmVk
VGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAotICAgIGF1dG8gZWFybGllc3RU
aW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBTUUxpdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvU291cmNlID0gPyIpOwotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0
aW5hdGlvblN0YXRlbWVudCA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiA9IG51bGwiKTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNl
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9
ID8iX3MpOworICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51
bGwiX3MpOwogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2VTdGF0ZW1lbnQuYmluZEludCgxLCBleHBpcmVkVGltZVRvU2VuZC5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICBpZiAoIWVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGVhcmxpZXN0
VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgaWYgKGVhcmxpZXN0VGltZVRv
U2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0
YXRlbWVudCB8fCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGlu
ZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApp
bmRleCA3NDExYmQ1ZDBiYWZmN2U0ZmRhNThiMmNjYjU2NmNlNDhmMmYwYjMxLi5hMWUzNTE1MzQ0
NmM1N2ZkMzg4NTlhNmRjZjg2MjRiMDE2MDMwOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMTc1LDcgKzE3NSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtaXNzaW5nUmVmZXJlbmNlVG9PYnNlcnZlZERvbWFpbnMoKTsKICAg
ICB2b2lkIG1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgZGVz
dHJveVN0YXRlbWVudHMoKTsKLSAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRT
Y29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBBU0NJSUxpdGVyYWwsIGNvbnN0IFN0
cmluZyYpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25zdDsKICAgICBWZWN0b3I8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQ
YXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2ln
bmVkLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VE
YXRhYmFzZS5jcHAKaW5kZXggNzYwMTFlM2EyOGQ1ZDEzNDk5ODU4ZDNiY2MzMmEyMDEwN2VkM2Ux
Yi4uNGM3OGZjZTk0Nzg5Mjg3MmU1ZGExNjVkZTNmNWFjOTdkYzJlMGQ4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgY29uc3QgY2hhciBnZXRJdGVt
c1F1ZXJ5U3RyaW5nW10gPSAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiOworc3Rh
dGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXks
IHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07CiAKIFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4g
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShTdHJpbmcmJiBkYXRhYmFzZVBhdGgsIHVuc2ln
bmVkIHF1b3RhSW5CeXRlcykKIHsKQEAgLTk5LDEwICs5OSwxMCBAQCBib29sIExvY2FsU3RvcmFn
ZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgIGlmICghbV9kYXRhYmFz
ZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVt
VGFibGUgTElNSVQgMSIpOworICAgIGF1dG8gcXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIl9zKTsKIAogICAgIC8v
IFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sg
dGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDAp
KQorICAgIGlmIChxdWVyeSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgd2l0aCB0aGUg
cmlnaHQgdHlwZSwgY29weSBhbGwgdGhlIGRhdGEgb3ZlciB0byBpdCBhbmQgdGhlbiByZXBsYWNl
IHRoZSBuZXcgdGFibGUgd2l0aCB0aGUgb2xkIHRhYmxlLgpAQCAtMzAyLDE5ICszMDIsMTggQEAg
Ym9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gSXRl
bVRhYmxlIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBh
dXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikg
RlJPTSBJdGVtVGFibGUiX3MpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgIGlm
IChxdWVyeS0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgTE9HX0VSUk9SKCJObyBy
ZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2Nh
bCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4g
IXF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICByZXR1cm4gIXF1ZXJ5LT5nZXRDb2x1bW5JbnQo
MCk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0aW5nKCkKQEAg
LTMzMCwxNCArMzI5LDE1IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5JZkV4aXN0
aW5nKCkKICAgICAgICAgc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0
ZW1zUXVlcnlTdHJpbmcpOwogfQogCi1TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVT
dGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0CitTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2NvcGVkU3RhdGVt
ZW50KHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+JiBzdGF0ZW1lbnQsIEFTQ0lJTGl0
ZXJhbCBxdWVyeSkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBzdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0
ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgcXVlcnkpOwotICAgICAgICBBU1NFUlQobV9kYXRhYmFz
ZS5pc09wZW4oKSk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spCisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhl
YXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpCiAgICAg
ICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9OworICAgICAg
ICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7
CisgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKICAgICB9CiAgICAgcmV0dXJu
IFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGRiOGFkOTgzZWVhZDgwZjhjNWU5MGI2ZjAx
YTJmNjMxNDY1MTc3MzIuLjQ2MDM2ZDY1N2ViZTk3NDQ4ZTEyYzBkYThkODU0N2I4ZDRmOTFlZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRhdGFiYXNl
SXNFbXB0eSgpIGNvbnN0OwogCi0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+JiwgY29uc3QgU3RyaW5nJiBxdWVyeSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlMaXRlcmFsIHF1ZXJ5KSBjb25zdDsKIAog
ICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvSWNvbkRhdGFiYXNlLmNwcAppbmRleCAzMzk2MDJhNDlmMTE0M2Q5ZmZlNDYzMDVhYjFhZDk5
YTY4NzRjYjYzLi42NTA4ODZlZTU2NjE2MjBiODgzMGE2MzUwNmI5N2YzNDQwZDdmNzg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAK
QEAgLTY2LDcgKzY2LDggQEAgSWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBwYXRoLCBBbGxvd0RhdGFiYXNlV3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJhc2VWZXJzaW9uTnVtYmVyID0g
U1FMaXRlU3RhdGVtZW50KG1fZGIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJY29uRGF0YWJhc2VJbmZv
IFdIRVJFIGtleSA9ICdWZXJzaW9uJzsiKS5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8g
dmVyc2lvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHZhbHVlIEZS
T00gSWNvbkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnVmVyc2lvbic7Il9zKTsKKyAgICAgICAg
YXV0byBkYXRhYmFzZVZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uU3RhdGVtZW50ID8gdmVyc2lvblN0
YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApIDogMDsKICAgICAgICAgaWYgKGRhdGFiYXNlVmVyc2lv
bk51bWJlciA+IGN1cnJlbnREYXRhYmFzZVZlcnNpb24pIHsKICAgICAgICAgICAgIExPRyhJY29u
RGF0YWJhc2UsICJEYXRhYmFzZSB2ZXJzaW9uIG51bWJlciAlZCBpcyBncmVhdGVyIHRoYW4gb3Vy
IGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgJWQgLSBjbG9zaW5nIHRoZSBkYXRhYmFzZSB0byBwcmV2
ZW50IG92ZXJ3cml0aW5nIG5ld2VyIHZlcnNpb25zIiwKICAgICAgICAgICAgICAgICBkYXRhYmFz
ZVZlcnNpb25OdW1iZXIsIGN1cnJlbnREYXRhYmFzZVZlcnNpb24pOwpAQCAtODQsNyArODUsNyBA
QCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgsIEFsbG93RGF0
YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmVkdWNl
IHNxbGl0ZSBSQU0gY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgMjAwMCBwYWdlcyAofjEuNWtCIHBl
ciBwYWdlKS4gM01CIG9mIGNhY2hlIGZvciBpY29uIGRhdGFiYXNlIGlzIG92ZXJraWxsLgotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQobV9kYiwgIlBSQUdNQSBjYWNoZV9zaXplID0gMjAwOyIpLmV4
ZWN1dGVDb21tYW5kKCk7CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBjYWNo
ZV9zaXplID0gMjAwOyJfcyk7CiAKICAgICAgICAgaWYgKGFsbG93RGF0YWJhc2VXcml0ZSA9PSBB
bGxvd0RhdGFiYXNlV3JpdGU6OlllcykgewogICAgICAgICAgICAgbV9wcnVuZVRpbWVyID0gbWFr
ZVVuaXF1ZTxSdW5Mb29wOjpUaW1lcjxJY29uRGF0YWJhc2U+PihSdW5Mb29wOjpjdXJyZW50KCks
IHRoaXMsICZJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCk7CkBAIC0xNzUsMTcgKzE3Niwx
NyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cG9wdWxhdGVQYWdlVVJMVG9JY29uVVJMTWFwKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGltcG9ydFF1ZXJ5ID0gbWFrZVN0cmluZygiU0VM
RUNUIFBhZ2VVUkwudXJsLCBJY29uSW5mby51cmwsIEljb25JbmZvLnN0YW1wIEZST00gUGFnZVVS
TCBJTk5FUiBKT0lOIEljb25JbmZvIE9OIFBhZ2VVUkwuaWNvbklEPUljb25JbmZvLmljb25JRCBX
SEVSRSBJY29uSW5mby5zdGFtcCA+ICIsIGZsb29yKChXYWxsVGltZTo6bm93KCkgLSBub3RVc2Vk
SWNvbkV4cGlyYXRpb25UaW1lKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSksICc7Jyk7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIGltcG9ydFF1ZXJ5KTsKLSAgICBpZiAo
cXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgIGF1dG8gcXVlcnkgPSBtX2RiLnBy
ZXBhcmVTdGF0ZW1lbnQoaW1wb3J0UXVlcnkpOworICAgIGlmICghcXVlcnkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBpY29uIHVybCBpbXBvcnQgcXVlcnkiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwor
ICAgIGF1dG8gcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICBMb2NrSG9sZGVyIGxvY2tIb2xk
ZXIobV9wYWdlVVJMVG9JY29uVVJMTWFwTG9jayk7CiAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIG1fcGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocXVlcnkuZ2V0Q29s
dW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uVGV4dCgxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1
ZXJ5LnN0ZXAoKTsKKyAgICAgICAgbV9wYWdlVVJMVG9JY29uVVJMTWFwLnNldChxdWVyeS0+Z2V0
Q29sdW1uVGV4dCgwKSwgcXVlcnktPmdldENvbHVtblRleHQoMSkpOworICAgICAgICByZXN1bHQg
PSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIAogICAgIHN0YXJ0UHJ1bmVUaW1lcigpOwpAQCAtMjE0
LDEyICsyMTUsMTIgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBydW5lVGltZXJGaXJlZCgpCiAgICAg
QVNTRVJUKG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX3BydW5lSWNvbnNTdGF0ZW1lbnQp
IHsKLSAgICAgICAgbV9wcnVuZUljb25zU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGIsICJERUxFVEUgRlJPTSBJY29uSW5mbyBXSEVSRSBzdGFtcCA8PSAoPyk7Iik7
Ci0gICAgICAgIGlmIChtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgYXV0byBwcnVuZUljb25zU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVh
cFN0YXRlbWVudCgiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgc3RhbXAgPD0gKD8pOyJfcyk7
CisgICAgICAgIGlmICghcHJ1bmVJY29uc1N0YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IHBydW5lSWNvbnMgZmFpbGVkIik7Ci0gICAgICAgICAg
ICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CisgICAgICAgIG1fcHJ1bmVJY29uc1N0YXRlbWVudCA9IHBydW5lSWNvbnNTdGF0
ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9wcnVu
ZUljb25zU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgZmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIG5v
dFVzZWRJY29uRXhwaXJhdGlvblRpbWUpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSkg
IT0gU1FMSVRFX09LKSB7CkBAIC0yMzAsOCArMjMxLDggQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBy
dW5lVGltZXJGaXJlZCgpCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYik7
CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBpZiAobV9wcnVuZUljb25zU3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgi
REVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBG
Uk9NIEljb25JbmZvKTsiKTsKLSAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZS
T00gUGFnZVVSTCBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbklu
Zm8pOyIpOworICAgICAgICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJERUxFVEUgRlJPTSBJY29uRGF0
YSBXSEVSRSBpY29uSUQgTk9UIElOIChTRUxFQ1QgaWNvbklEIEZST00gSWNvbkluZm8pOyJfcyk7
CisgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUg
aWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiX3MpOwogICAgIH0K
ICAgICBtX3BydW5lSWNvbnNTdGF0ZW1lbnQtPnJlc2V0KCk7CiAKQEAgLTI4NSwxMiArMjg2LDEy
IEBAIE9wdGlvbmFsPGludDY0X3Q+IEljb25EYXRhYmFzZTo6aWNvbklERm9ySWNvblVSTChjb25z
dCBTdHJpbmcmIGljb25VUkwsIGJvb2wmIGV4CiAgICAgQVNTRVJUKG1fZGIuaXNPcGVuKCkpOwog
CiAgICAgaWYgKCFtX2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9pY29u
SURGb3JJY29uVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIs
ICJTRUxFQ1QgSWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdI
RVJFIEljb25JbmZvLnVybCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1faWNvbklERm9ySWNvblVS
TFN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25J
REZvckljb25VUkxTdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJTRUxFQ1Qg
SWNvbkluZm8uaWNvbklELCBJY29uSW5mby5zdGFtcCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25J
bmZvLnVybCA9ICg/KTsiX3MpOworICAgICAgICBpZiAoIWljb25JREZvckljb25VUkxTdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBpY29uSURG
b3JJY29uVVJMIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVt
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IH0KKyAgICAgICAgbV9pY29uSURGb3JJY29uVVJMU3RhdGVtZW50ID0gaWNvbklERm9ySWNvblVS
TFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmICht
X2ljb25JREZvckljb25VUkxTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGljb25VUkwpICE9IFNRTElU
RV9PSykgewpAQCAtMzE1LDEyICszMTYsMTIgQEAgYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25J
REZvclBhZ2VVUkwoaW50NjRfdCBpY29uSUQsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKICAgICBB
U1NFUlQobV9hbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwog
CiAgICAgaWYgKCFtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9z
ZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGIsICJJTlNFUlQgSU5UTyBQYWdlVVJMICh1cmwsIGljb25JRCkgVkFMVUVTICgoPyksID8p
OyIpOwotICAgICAgICBpZiAobV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRl
bWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFBhZ2VVUkwgKHVy
bCwgaWNvbklEKSBWQUxVRVMgKCg/KSwgPyk7Il9zKTsKKyAgICAgICAgaWYgKCFzZXRJY29uSURG
b3JQYWdlVVJMU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBz
dGF0ZW1lbnQgc2V0SWNvbklERm9yUGFnZVVSTCBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fc2V0
SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50
ID0gc2V0SWNvbklERm9yUGFnZVVSTFN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KIAogICAgIGlmIChtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1lbnQtPmJpbmRU
ZXh0KDEsIHBhZ2VVUkwpICE9IFNRTElURV9PSwpAQCAtMzQyLDEyICszNDMsMTIgQEAgVmVjdG9y
PGNoYXI+IEljb25EYXRhYmFzZTo6aWNvbkRhdGEoaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJU
KG1fZGIuaXNPcGVuKCkpOwogCiAgICAgaWYgKCFtX2ljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAg
ICAgIG1faWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9k
YiwgIlNFTEVDVCBJY29uRGF0YS5kYXRhIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNv
bklEID0gKD8pOyIpOwotICAgICAgICBpZiAobV9pY29uRGF0YVN0YXRlbWVudC0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGljb25EYXRhU3RhdGVtZW50ID0gbV9kYi5w
cmVwYXJlSGVhcFN0YXRlbWVudCgiU0VMRUNUIEljb25EYXRhLmRhdGEgRlJPTSBJY29uRGF0YSBX
SEVSRSBJY29uRGF0YS5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYgKCFpY29uRGF0YVN0
YXRlbWVudCkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJQcmVwYXJpbmcgc3RhdGVtZW50IGlj
b25EYXRhIGZhaWxlZCIpOwotICAgICAgICAgICAgbV9pY29uRGF0YVN0YXRlbWVudCA9IG51bGxw
dHI7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CisgICAgICAgIG1faWNvbkRh
dGFTdGF0ZW1lbnQgPSBpY29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigp
OwogICAgIH0KIAogICAgIGlmIChtX2ljb25EYXRhU3RhdGVtZW50LT5iaW5kSW50NjQoMSwgaWNv
bklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTM3MCwyMCArMzcxLDIwIEBAIE9wdGlvbmFsPGludDY0
X3Q+IEljb25EYXRhYmFzZTo6YWRkSWNvbihjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFZl
Y3RvcjxjaGFyCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09IEFsbG93RGF0YWJh
c2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9hZGRJY29uU3RhdGVtZW50KSB7Ci0gICAgICAg
IG1fYWRkSWNvblN0YXRlbWVudCA9IG1ha2VVbmlxdWU8U1FMaXRlU3RhdGVtZW50PihtX2RiLCAi
SU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Iik7Ci0gICAg
ICAgIGlmIChtX2FkZEljb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgYXV0byBhZGRJY29uU3RhdGVtZW50ID0gbV9kYi5wcmVwYXJlSGVhcFN0YXRlbWVudCgi
SU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7Il9zKTsKKyAg
ICAgICAgaWYgKCFhZGRJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlBy
ZXBhcmluZyBzdGF0ZW1lbnQgYWRkSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNv
blN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICB9CisgICAgICAgIG1fYWRkSWNvblN0YXRlbWVudCA9IGFkZEljb25TdGF0ZW1lbnQu
dmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2FkZEljb25EYXRh
U3RhdGVtZW50KSB7Ci0gICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1lbnQgPSBtYWtlVW5pcXVl
PFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRh
dGEpIFZBTFVFUyAoPywgPyk7Iik7Ci0gICAgICAgIGlmIChtX2FkZEljb25EYXRhU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIGF1dG8gYWRkSWNvbkRhdGFTdGF0
ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBJY29uRGF0YSAo
aWNvbklELCBkYXRhKSBWQUxVRVMgKD8sID8pOyJfcyk7CisgICAgICAgIGlmICghYWRkSWNvbkRh
dGFTdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVu
dCBhZGRJY29uRGF0YSBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fYWRkSWNvbkRhdGFTdGF0ZW1l
bnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
fQorICAgICAgICBtX2FkZEljb25EYXRhU3RhdGVtZW50ID0gYWRkSWNvbkRhdGFTdGF0ZW1lbnQu
dmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAKICAgICBpZiAobV9hZGRJY29uU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJMKSAhPSBTUUxJVEVfT0spIHsKQEAgLTQxMywxMiAr
NDE0LDEyIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjp1cGRhdGVJY29uVGltZXN0YW1wKGludDY0X3Qg
aWNvbklELCBpbnQ2NF90IHRpbWVzdGFtcCkKICAgICBBU1NFUlQobV9hbGxvd0RhdGFiYXNlV3Jp
dGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpZZXMpOwogCiAgICAgaWYgKCFtX3VwZGF0ZUljb25U
aW1lc3RhbXBTdGF0ZW1lbnQpIHsKLSAgICAgICAgbV91cGRhdGVJY29uVGltZXN0YW1wU3RhdGVt
ZW50ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGIsICJVUERBVEUgSWNvbkluZm8g
U0VUIHN0YW1wID0gPyBXSEVSRSBpY29uSUQgPSA/OyIpOwotICAgICAgICBpZiAobV91cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
IGF1dG8gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0
ZW1lbnQoIlVQREFURSBJY29uSW5mbyBTRVQgc3RhbXAgPSA/IFdIRVJFIGljb25JRCA9ID87Il9z
KTsKKyAgICAgICAgaWYgKCF1cGRhdGVJY29uVGltZXN0YW1wU3RhdGVtZW50KSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgdXBkYXRlSWNvblRpbWVzdGFtcCBm
YWlsZWQiKTsKLSAgICAgICAgICAgIG1fdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudCA9IG51
bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV91cGRhdGVJ
Y29uVGltZXN0YW1wU3RhdGVtZW50ID0gdXBkYXRlSWNvblRpbWVzdGFtcFN0YXRlbWVudC52YWx1
ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX3VwZGF0ZUljb25UaW1l
c3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCB0aW1lc3RhbXApICE9IFNRTElURV9PSyB8fCBt
X3VwZGF0ZUljb25UaW1lc3RhbXBTdGF0ZW1lbnQtPmJpbmRJbnQ2NCgyLCBpY29uSUQpICE9IFNR
TElURV9PSykgewpAQCAtNDM3LDI4ICs0MzgsMjggQEAgdm9pZCBJY29uRGF0YWJhc2U6OmRlbGV0
ZUljb24oaW50NjRfdCBpY29uSUQpCiAgICAgQVNTRVJUKG1fYWxsb3dEYXRhYmFzZVdyaXRlID09
IEFsbG93RGF0YWJhc2VXcml0ZTo6WWVzKTsKIAogICAgIGlmICghbV9kZWxldGVQYWdlVVJMc0Zv
ckljb25TdGF0ZW1lbnQpIHsKLSAgICAgICAgbV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIFBhZ2VV
UkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7Iik7Ci0gICAgICAgIGlmIChtX2RlbGV0ZVBh
Z2VVUkxzRm9ySWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAg
ICBhdXRvIGRlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBT
dGF0ZW1lbnQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgUGFnZVVSTC5pY29uSUQgPSAoPyk7
Il9zKTsKKyAgICAgICAgaWYgKCFkZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQpIHsKICAg
ICAgICAgICAgIExPR19FUlJPUigiUHJlcGFyaW5nIHN0YXRlbWVudCBkZWxldGVQYWdlVVJMc0Zv
ckljb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblN0YXRl
bWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAg
bV9kZWxldGVQYWdlVVJMc0Zvckljb25TdGF0ZW1lbnQgPSBkZWxldGVQYWdlVVJMc0Zvckljb25T
dGF0ZW1lbnQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICB9CiAgICAgaWYgKCFtX2Rl
bGV0ZUljb25EYXRhU3RhdGVtZW50KSB7Ci0gICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25E
YXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRl
SWNvbkRhdGFTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgYXV0
byBkZWxldGVJY29uRGF0YVN0YXRlbWVudCA9IG1fZGIucHJlcGFyZUhlYXBTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCA9ICg/KTsiX3MpOworICAg
ICAgICBpZiAoIWRlbGV0ZUljb25EYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAg
IG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisgICAgICAgIG1fZGVsZXRlSWNvbkRhdGFTdGF0ZW1lbnQgPSBkZWxldGVJ
Y29uRGF0YVN0YXRlbWVudC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KICAgICBp
ZiAoIW1fZGVsZXRlSWNvblN0YXRlbWVudCkgewotICAgICAgICBtX2RlbGV0ZUljb25TdGF0ZW1l
bnQgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYiwgIkRFTEVURSBGUk9NIEljb25J
bmZvIFdIRVJFIEljb25JbmZvLmljb25JRCA9ICg/KTsiKTsKLSAgICAgICAgaWYgKG1fZGVsZXRl
SWNvblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRl
bGV0ZUljb25TdGF0ZW1lbnQgPSBtX2RiLnByZXBhcmVIZWFwU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby5pY29uSUQgPSAoPyk7Il9zKTsKKyAgICAgICAgaWYg
KCFkZWxldGVJY29uU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlByZXBhcmlu
ZyBzdGF0ZW1lbnQgZGVsZXRlSWNvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1fZGVsZXRlSWNv
blN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgbV9kZWxldGVJY29uU3RhdGVtZW50ID0gZGVsZXRlSWNvblN0YXRlbWVudC52YWx1ZSgp
Lm1vdmVUb1VuaXF1ZVB0cigpOwogICAgIH0KIAogICAgIGlmIChtX2RlbGV0ZVBhZ2VVUkxzRm9y
SWNvblN0YXRlbWVudC0+YmluZEludDY0KDEsIGljb25JRCkgIT0gU1FMSVRFX09LCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IGNlNWMy
OWJhYTU4MDVjYTQyZjQ4ZWYwNTBiODMyZDBjZDVjY2UxMWMuLmNhZTA4MmYxM2RjZDM2OGM0ODE5
NWJlMzExZjIwYTViNjY0NDhmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFn
ZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBTdG9yYWdlQXJl
YVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFs
dWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQg
MSJfcyk7CiAgICAgICAgIC8vIHRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZC4KLSAgICAg
ICAgaWYgKHF1ZXJ5LmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2IoMCkpCisgICAgICAgIGlmIChxdWVy
eSAmJiBxdWVyeS0+aXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTMyNiw4ICszMjYsOCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVy
Zm9ybUltcG9ydCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIik7
Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHF1ZXJ5
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0
ZW1UYWJsZSJfcyk7CisgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAg
ICAgICAgbWFya0ltcG9ydGVkKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSwxMCArMzM1LDEw
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KCkKIAogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7CiAKLSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgp
OworICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIHdoaWxlIChyZXN1bHQgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDAp
LCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkpOwotICAgICAgICByZXN1bHQgPSBxdWVy
eS5zdGVwKCk7CisgICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LT5nZXRDb2x1bW5UZXh0KDApLCBx
dWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnkt
PnN0ZXAoKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CkBAIC00
MTIsMjcgKzQxMiwyNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRl
bXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcwogCiAgICAgLy8gSWYgdGhl
IGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdl
IHdyaXRlIGFueSBuZXcgb25lcyBpbi4KICAgICBpZiAoY2xlYXJJdGVtcykgewotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIp
OwotICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBh
dXRvIGNsZWFyID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBJdGVt
VGFibGUiX3MpOworICAgICAgICBpZiAoIWNsZWFyKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOworICAgICAgICBpbnQgcmVzdWx0ID0g
Y2xlYXItPnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIGluc2VydCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3Mp
OworICAgIGlmICghaW5zZXJ0KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcmVt
b3ZlKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKLSAg
ICBpZiAocmVtb3ZlLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICBhdXRvIHJlbW92ZSA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJF
IGtleT0/Il9zKTsKKyAgICBpZiAoIXJlbW92ZSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDQzLDIxICs0NDMs
MjEgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRl
bXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBu
dWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBh
biBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBp
dC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7CisgICAgICAgIGF1dG8mIHF1ZXJ5
ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5
LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworICAgICAgICBxdWVyeS0+YmluZFRleHQoMSwgaXQtPmtl
eSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2Un
cmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4KICAgICAgICAgaWYg
KCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+
dmFsdWUpOworICAgICAgICAgICAgcXVlcnktPmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKLSAg
ICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHF1
ZXJ5LT5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9y
YWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBxdWVyeS5yZXNldCgpOworICAgICAgICBxdWVyeS0+cmVzZXQoKTsKICAg
ICB9CiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CkBAIC00OTksMzEgKzQ5OSwzMyBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSgpCiAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIpOwotICAg
IGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gY291bnQgPSBbJl0gewor
ICAgICAgICBhdXRvIHF1ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBJdGVtVGFibGUiX3MpOworICAgICAgICBpZiAoIXF1ZXJ5KSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVt
VGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8gcmVzdWx0
cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3Rv
cmFnZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKLSAgICBpbnQgcmVz
dWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAg
ICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Ygcm93cyBp
biBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LT5n
ZXRDb2x1bW5JbnQoMCk7CisgICAgfSgpOworICAgIGlmIChjb3VudCkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAotICAgIGludCBjb3VudCA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsKLSAgICBp
ZiAoIWNvdW50KSB7Ci0gICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7Ci0gICAgICAgIG1fZGF0YWJh
c2UuY2xvc2UoKTsKLSAgICAgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuaXNBY3Rp
dmUoKSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVy
ID0gbV9kYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgICAgICAg
ICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGRh
dGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERh
dGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKCFG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQotICAgICAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFz
ZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9CisgICAgbV9kYXRhYmFzZS5jbG9z
ZSgpOworICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyID0gbV9kYXRhYmFzZUlk
ZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0
cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsK
KyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5h
bWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkYXRhYmFzZUZpbGVu
YW1lKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBm
aWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKaW5kZXgg
ZDM1ZDVjMzg1MDAzY2FjZDQ2ZjcwMGQ3YWRlNmUyMGEyOWZmZWRiOS4uM2VjY2ZhNzVkMjAyNmU1
ZDMwZDk3YjAwMzZlM2ZlMjM3ZDRiNzcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0
b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBAIC0xODksOCArMTg5LDggQEAgdm9pZCBTdG9yYWdl
VHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKICAgICAgICAgaWYgKG1fZGF0
YWJhc2UuaXNPcGVuKCkpIHsKICAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKIAotICAgICAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMi
KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIl9zKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVt
ZW50KSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTk5
LDggKzE5OSw4IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlm
aWVycygpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0TXV0ZXgpOwotICAgICAgICAgICAgICAgIHdo
aWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlz
b2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNl
dC5hZGQoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVf
RE9ORSkgewpAQCAtMzE2LDE2ICszMTYsMTYgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1Nl
dE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdAogICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxV
RVMgKD8sID8pIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRo
ZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9IAogICAgIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAgICBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKICAgICAKLSAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkKKyAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBp
biB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAg
ewpAQCAtNDA0LDIzICs0MDQsMjMgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFs
bE9yaWdpbnMoKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIik7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmlnaW5zIl9zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0
YXRlbWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpbnQgcmVzdWx0
OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMSVRFX1JPVykg
ewotICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgw
KSkpCisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKSkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRl
eHQoMCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUoc3RhdGVtZW50LT5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKICAgICAgICAgICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgICAgICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQtPmdldENvbHVtblRleHQo
MCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDQxLDEyICs0NDEsMTIgQEAgdm9pZCBT
dG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQogICAgICAgICBvcGVuVHJhY2tl
ckRhdGFiYXNlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50
KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIik7Ci0gICAgICAgIGlmIChkZWxldGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBhdXRvIGRlbGV0ZVN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3JpZ2lu
cyJfcyk7CisgICAgICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQu
ZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC0+ZXhlY3V0
ZUNvbW1hbmQoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBk
ZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7Ci0gICAgaWYgKGRlbGV0ZVN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgYXV0byBkZWxldGVTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hl
cmUgb3JpZ2luPT8iX3MpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50KSB7CiAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmln
aW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYg
KCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgIGRlbGV0ZVN0YXRlbWVu
dC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1l
bnQtPmV4ZWN1dGVDb21tYW5kKCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhl
Y3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjE0LDE3ICs2MTQsMTcgQEAgU3Ry
aW5nIFN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKQogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0Nv
dW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49
PyIpOwotICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICBhdXRvIHBhdGhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVD
VCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyJfcyk7CisgICAgaWYgKCFwYXRoU3Rh
dGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9u
IG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEo
KSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9Ci0gICAgcGF0aFN0YXRlbWVudC5i
aW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRl
bWVudC5zdGVwKCk7CisgICAgcGF0aFN0YXRlbWVudC0+YmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ST1cpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJl
dHVybiBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgcmV0dXJuIHBhdGhTdGF0
ZW1lbnQtPmdldENvbHVtblRleHQoMCk7CiB9CiAgICAgCiB1aW50NjRfdCBTdG9yYWdlVHJhY2tl
cjo6ZGlza1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjdkNTI3NDc5MDdhZWYz
NGE1ZTMxZmQ0MzI2OTQzMTFmYmYxMDAxZi4uZTY2ZTdjYThkOTRmMGNmNDRlODBmNDUxNzMwN2E4
ZGFjZjM4NTA1ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA1LTEzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVtZW50
IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSBub3cgdGhhdCB0aGUgU1FMaXRlRGF0
YWJhc2UgJiBTUUxpdGVTdGF0ZW1lbnQgQVBJIGhhcyBjaGFuZ2VkLgorICAgICAgICBBbHNvIHVz
ZSBtb3JlIEFTQ0lJTGl0ZXJhbHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY29jb2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmFkZFRvRGF0YWJhc2VzVGFibGUpOgorCiAyMDIxLTA1LTE0ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNzczMTMpOiBbIERlYnVnIF0g
MiBUZXN0V2ViS2l0QVBJLklQQ1Rlc3RpbmdBUEkgKEFQSS1UZXN0cykgYXJlIGNvbnN0YW50IHRp
bWVvdXRzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29j
b2EvRGF0YWJhc2VUcmFja2VyVGVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tCmluZGV4IGY4MjBjZmVhMjBjZGM4ZWYx
ZjNlZWExZGE5MzhhMDRjZDliZmU2YWYuLjc1N2VjMjQyNTg1MTFhN2Y5MTIxMWFhY2NhMTQ1MWYz
YWJkZTJiMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
b2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jb2NvYS9EYXRhYmFzZVRyYWNrZXJUZXN0Lm1tCkBAIC02NSwxMiArNjUsMTIg
QEAgc3RhdGljIHZvaWQgYWRkVG9EYXRhYmFzZXNUYWJsZShjb25zdCBTdHJpbmcmIGRhdGFiYXNl
UGF0aCwgY29uc3QgU2VjdXJpdHlPcmlnaW4KICAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsK
ICAgICBkYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
YWRkRGF0YWJhc2VTdGF0ZW1lbnQoZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG9y
aWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/KTsiKTsKLSAgICBhZGREYXRhYmFzZVN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuYmluZFRleHQoMSwg
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBhZGREYXRhYmFzZVN0YXRlbWVudC5i
aW5kVGV4dCgyLCBuZXdEYXRhYmFzZU5hbWUpOwotICAgIGFkZERhdGFiYXNlU3RhdGVtZW50LmJp
bmRUZXh0KDMsIG5ld0RhdGFiYXNlUGF0aCk7Ci0gICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQuZXhl
Y3V0ZUNvbW1hbmQoKTsKKyAgICBpZiAoYXV0byBhZGREYXRhYmFzZVN0YXRlbWVudCA9IGRhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIERhdGFiYXNlcyAob3JpZ2luLCBuYW1l
LCBwYXRoKSBWQUxVRVMgKD8sID8sID8pOyJfcykpIHsKKyAgICAgICAgYWRkRGF0YWJhc2VTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAg
IGFkZERhdGFiYXNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBuZXdEYXRhYmFzZU5hbWUpOworICAg
ICAgICBhZGREYXRhYmFzZVN0YXRlbWVudC0+YmluZFRleHQoMywgbmV3RGF0YWJhc2VQYXRoKTsK
KyAgICAgICAgYWRkRGF0YWJhc2VTdGF0ZW1lbnQtPmV4ZWN1dGVDb21tYW5kKCk7CisgICAgfQog
CiAgICAgZGF0YWJhc2UuY2xvc2UoKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>