<?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>39041</bug_id>
          
          <creation_ts>2010-05-12 20:41:49 -0700</creation_ts>
          <short_desc>Move the code that should be shared by sync and async DBs to a separate class</short_desc>
          <delta_ts>2010-06-30 04:46:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34990</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ericu</cc>
    
    <cc>eric</cc>
    
    <cc>michaeln</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225082</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-12 20:41:49 -0700</bug_when>
    <thetext>Some code in Database.cpp can be reused by DatabaseSync.cpp. We should move it to a common parent class. A parent class is probably better than a member variable, because then DatabaseTracker could handle both types of DBs in the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225092</commentid>
    <comment_count>1</comment_count>
      <attachid>55936</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-12 21:20:12 -0700</bug_when>
    <thetext>Created attachment 55936
patch #1: Add a base class for Database and DatabaseSync</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225117</commentid>
    <comment_count>2</comment_count>
      <attachid>55936</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-12 22:22:56 -0700</bug_when>
    <thetext>Comment on attachment 55936
patch #1: Add a base class for Database and DatabaseSync

Ok.  I think you&apos;re over reacting to bradee-oh, but whatever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225165</commentid>
    <comment_count>3</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-12 23:49:41 -0700</bug_when>
    <thetext>patch #1 landed as r59349.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225347</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-05-13 09:39:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 55936 [details])
&gt; Ok.  I think you&apos;re over reacting to bradee-oh, but whatever.

Lol.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225562</commentid>
    <comment_count>5</comment_count>
      <attachid>56032</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-13 16:26:02 -0700</bug_when>
    <thetext>Created attachment 56032
patch #2: clean up

Cleaning up the DB classes to make it easier to move code out of them into new classes: removing unused #includes, replacing #includes in header files with forward class declarations as much as possible, removing &apos;friend&apos; declarations, and adding getters for private fields where necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225564</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-13 16:28:35 -0700</bug_when>
    <thetext>Attachment 56032 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/storage/Database.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225572</commentid>
    <comment_count>7</comment_count>
      <attachid>56032</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-13 17:00:33 -0700</bug_when>
    <thetext>Comment on attachment 56032
patch #2: clean up

Looks reasonable overall.  I need to look at it more carefully later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225578</commentid>
    <comment_count>8</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-13 17:07:06 -0700</bug_when>
    <thetext>&gt; WebCore/storage/Database.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]

Will take care of this when landing/re-uploading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230417</commentid>
    <comment_count>9</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-25 13:33:54 -0700</bug_when>
    <thetext>Ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232878</commentid>
    <comment_count>10</comment_count>
      <attachid>56032</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-01 11:47:38 -0700</bug_when>
    <thetext>Comment on attachment 56032
patch #2: clean up

Looks great!  Nice work.

WebCore/storage/Database.h:55
 +  class SecurityOrigin;
I don&apos;t think we need the NDEBUG conditional here.  It&apos;s not a terrible thing to forward declare this class.

WebCore/storage/DatabaseTask.cpp: 
 +          MutexLocker locker(m_transaction-&gt;database()-&gt;m_transactionInProgressMutex);
Not 100% sure why we lost this mutex here, but ok.

WebCore/storage/Database.cpp:660
 +      MutexLocker locker(m_transactionInProgressMutex);
Oh, I see.  It went here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232919</commentid>
    <comment_count>11</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-01 12:56:15 -0700</bug_when>
    <thetext>&gt; WebCore/storage/Database.h:55
&gt;  +  class SecurityOrigin;
&gt; I don&apos;t think we need the NDEBUG conditional here.  It&apos;s not a terrible thing to forward declare this class.

done.

&gt; WebCore/storage/DatabaseTask.cpp: 
&gt;  +          MutexLocker locker(m_transaction-&gt;database()-&gt;m_transactionInProgressMutex);
&gt; Not 100% sure why we lost this mutex here, but ok.
&gt; 
&gt; WebCore/storage/Database.cpp:660
&gt;  +      MutexLocker locker(m_transactionInProgressMutex);
&gt; Oh, I see.  It went here.

i made this change to keep m_transactionInProgressMutex private to the Database class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232958</commentid>
    <comment_count>12</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-01 14:40:59 -0700</bug_when>
    <thetext>patch #2 landed as r60508.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233205</commentid>
    <comment_count>13</comment_count>
      <attachid>57643</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-02 04:23:23 -0700</bug_when>
    <thetext>Created attachment 57643
patch #3: Move the reusable code from Database to AbstractDatabase

patch #3 has mostly mechanical changes, with a couple of exceptions:
1. guidToDatabaseMap() was removed from Database.cpp; it wasn&apos;t used by anybody.
2. Database::close() was changed to be callable from any thread by moving the logic from WebKit/chromium/src/WebDatabase.cpp there.

All storage/ and fast/workers/storage/ layout tests passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233206</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-02 04:27:29 -0700</bug_when>
    <thetext>Attachment 57643 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebsettings.cpp&quot;
WebCore/storage/AbstractDatabase.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/storage/AbstractDatabase.cpp:122:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/storage/AbstractDatabase.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/gtk/webkit/webkitwebview.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233207</commentid>
    <comment_count>15</comment_count>
      <attachid>57644</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-02 04:31:50 -0700</bug_when>
    <thetext>Created attachment 57644
patch #3: Move the reusable code from Database to AbstractDatabase

Same patch, fixed the style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233221</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-02 05:36:08 -0700</bug_when>
    <thetext>Attachment 57643 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2763107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233235</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-02 06:29:26 -0700</bug_when>
    <thetext>Attachment 57644 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2858004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233480</commentid>
    <comment_count>18</comment_count>
      <attachid>57711</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-02 16:05:23 -0700</bug_when>
    <thetext>Created attachment 57711
patch #3: Move the reusable code from Database to AbstractDatabase

The patch should build on all platforms now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235925</commentid>
    <comment_count>19</comment_count>
      <attachid>57711</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-09 12:12:27 -0700</bug_when>
    <thetext>Comment on attachment 57711
patch #3: Move the reusable code from Database to AbstractDatabase

WebCore/storage/AbstractDatabase.cpp:51
 +      if (origin.endsWith(&quot;/&quot;))
This shouldn&apos;t ever happen.  Origins don&apos;t end in &quot;/&quot;.

WebCore/storage/AbstractDatabase.cpp:48
 +  static int guidForOriginAndName(const String&amp; origin, const String&amp; name)
You should use an anonymous namespace instead of &quot;static&quot;.  It doesn&apos;t matter much, but it&apos;s the C++ way.

Oh, I guess this is all just moving code around.  I thought I was supposed to review the correctness of the code (which is quite complicated).  Let me try this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235929</commentid>
    <comment_count>20</comment_count>
      <attachid>57711</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-09 12:16:58 -0700</bug_when>
    <thetext>Comment on attachment 57711
patch #3: Move the reusable code from Database to AbstractDatabase

This is too complicated for me to review.  The general approach seems reasonable.  The perform* methods don&apos;t seem quite ideal...

I&apos;ve also never seen this code before, so it&apos;s all new to me.  Is there someone more familiar with this stuff who can review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236543</commentid>
    <comment_count>21</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-10 14:46:28 -0700</bug_when>
    <thetext>Let&apos;s postpone patch #3, since we don&apos;t have a sync implementation yet and don&apos;t know what parts will be reused and which ones won&apos;t.

We can do a refactoring (merge code from Database and DatabaseSync into AbstractDatabase) after DatabaseSync is implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236554</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-10 15:05:48 -0700</bug_when>
    <thetext>Yup... getting further along in the sync impl may help inform this refactoring effort.

I&apos;m not sure having promoted so much to the public interface is an improvement. The set of classes that make up the database system are a tightly couple bunch. The public interface being determined what that set of classes needs really makes it difficult for an innocent consumer of the Database class to know what methods they should be calling from the oustide looking in.

***** DatabaseThread.h

Since this class only works with async Database instances, I don&apos;t think the unscheduleDatabaseTasks() method should accept an AbstractDatabase* as a parameter.

***** DatabaseThread.cpp

It looks like you&apos;ve renamed the existing non-virtual close(ClosePolicy) method to performClose(ClosePolicy)... and added a new virtual method for close(). I think this callsite can continue to call the renamed non-virtual performClose(ClosePolicy) method.

If the class interface is not modified, the changes to SameDatabasePredicate class are not needed.
Also, it might be nice to put the SameDatabasePredicate in an anon namespace.


***** ScriptExecutionContext.cpp

Since the DBThread only works with async Databases, it seems like the call to unscheduleTasks for AbstactDatabases is out of place in stopDatabases.

Hmmm... does the script execution context even need to keep SyncDatabases in its collection of open databases. It looks like the only reason it has the collection is to &apos;stop&apos; anyhing in async process when the time comes to do so... but with SyncDatabases... there never is anything going on in the background to &apos;stop&apos;.

***** WebKit\chromium\src\WebDatabase.cpp

I&apos;m still getting a handle on what has been virtualized and why so can&apos;t comment on this quite yet.

***** AbstractDatabse vs Database

virtual void performCreationCallback();
Why virtualize this method, its only called for concrete Databases?

virtual void notifyDatabaseThreadDatabaseOpen();
This method feels very out of place in this class. Maybe this is something the &apos;openTask&apos; could do after having called performOpenAndVerify()?

virtual void close();
virtual void stop();
I think you&apos;ve virtualized this pair of methods to support the following callsites.
- ScriptExcecutionContext::stopDatabases()
- WebDatabase::closeDatabaseImmediately()

The virtual stop() method on the abstract class feels a little out of place. What does &apos;stop&apos; mean for a sync database class. I&apos;m trying to track down the callsites for close(), it looks like WebDatabase::closeDatabaseImmediately the only usage of that method. Maybe we could use a virtualized method for that?
virtual void closeImmediately();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236651</commentid>
    <comment_count>23</comment_count>
      <attachid>58437</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-10 19:44:08 -0700</bug_when>
    <thetext>Created attachment 58437
patch #3: Get DatabaseTracker ready for sync DBs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236654</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-10 19:56:49 -0700</bug_when>
    <thetext>Attachment 58437 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3214175</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236656</commentid>
    <comment_count>25</comment_count>
      <attachid>58438</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-10 19:59:38 -0700</bug_when>
    <thetext>Created attachment 58438
patch #3: Get DatabaseTracker ready for sync DBs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236972</commentid>
    <comment_count>26</comment_count>
      <attachid>58438</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-11 12:30:01 -0700</bug_when>
    <thetext>Comment on attachment 58438
patch #3: Get DatabaseTracker ready for sync DBs

This change is so much easier to grok! Fwiw... LGTM


WebKit/chromium/src/WebDatabase.cpp:114
 +      PassRefPtr&lt;SecurityOrigin&gt; originPrp(WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
Maybe use SecurityOrigin::createFromDatabaseIdentifier() directly instead of the awkward local PassRefPtr variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236984</commentid>
    <comment_count>27</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-11 12:50:41 -0700</bug_when>
    <thetext>&gt; WebKit/chromium/src/WebDatabase.cpp:114
&gt;  +      PassRefPtr&lt;SecurityOrigin&gt; originPrp(WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
&gt; Maybe use SecurityOrigin::createFromDatabaseIdentifier() directly instead of the awkward local PassRefPtr variable?

let&apos;s leave it as it is for now, since it&apos;s not directly related to this patch. i&apos;ll bring this up with darin (fisher) and if he agrees, i&apos;ll change this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236993</commentid>
    <comment_count>28</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-11 13:12:33 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; WebKit/chromium/src/WebDatabase.cpp:114
&gt; &gt;  +      PassRefPtr&lt;SecurityOrigin&gt; originPrp(WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
&gt; &gt; Maybe use SecurityOrigin::createFromDatabaseIdentifier() directly instead of the awkward local PassRefPtr variable?
&gt; 
&gt; let&apos;s leave it as it is for now, since it&apos;s not directly related to this patch. i&apos;ll bring this up with darin (fisher) and if he agrees, i&apos;ll change this in a separate patch.

fixed, after our discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238020</commentid>
    <comment_count>29</comment_count>
      <attachid>58438</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-14 13:38:17 -0700</bug_when>
    <thetext>Comment on attachment 58438
patch #3: Get DatabaseTracker ready for sync DBs

LGTM.  Thanks for making this easy to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238070</commentid>
    <comment_count>30</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-14 15:09:37 -0700</bug_when>
    <thetext>patch #3 landed as r61154.

This bug should stay open until we have a fully working sync implementation of WebSQLDatabases in workers. Then we can move the common code to AbstractDatabase and close this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238083</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-14 15:23:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61154 might have broken Chromium Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/61153
http://trac.webkit.org/changeset/61154
http://trac.webkit.org/changeset/61155</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238314</commentid>
    <comment_count>32</comment_count>
      <attachid>58767</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-15 04:11:30 -0700</bug_when>
    <thetext>Created attachment 58767
patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag

Moved isAvailable() and setIsAvailable() from Database and DatabaseSync to AbstractDatabase. Also, made a cosmetic change to WorkerContext::openDatabaseSync() to make it match the style of WorkerContext::openDatabase().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238316</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-15 04:16:49 -0700</bug_when>
    <thetext>Attachment 58767 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebsettings.cpp&quot;
WebKit/gtk/webkit/webkitwebview.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238317</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-15 04:19:47 -0700</bug_when>
    <thetext>Attachment 58767 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3275191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238318</commentid>
    <comment_count>35</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-15 04:23:05 -0700</bug_when>
    <thetext>Attachment 58767 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3340192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238321</commentid>
    <comment_count>36</comment_count>
      <attachid>58768</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-15 04:28:38 -0700</bug_when>
    <thetext>Created attachment 58768
patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag

Same patch, should fix the style and build problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238323</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-15 04:33:45 -0700</bug_when>
    <thetext>Attachment 58768 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3290181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238327</commentid>
    <comment_count>38</comment_count>
      <attachid>58769</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-15 04:38:10 -0700</bug_when>
    <thetext>Created attachment 58769
patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag

Forgot to patch WebCore.base.exp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239654</commentid>
    <comment_count>39</comment_count>
      <attachid>58769</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-17 17:02:39 -0700</bug_when>
    <thetext>Comment on attachment 58769
patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag

Great!  A couple minor comments.

WebCore/storage/AbstractDatabase.cpp:36
 +  static bool isDatabaseAvailable = true;
I forget how the webkit-dev thread turned out.  g_isDatabaseAvailable?  Not sure.

WebCore/workers/WorkerContext.cpp:297
 +          ec = SECURITY_ERR;
Security Error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239663</commentid>
    <comment_count>40</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-17 17:16:08 -0700</bug_when>
    <thetext>&gt; WebCore/storage/AbstractDatabase.cpp:36
&gt;  +  static bool isDatabaseAvailable = true;
&gt; I forget how the webkit-dev thread turned out.  g_isDatabaseAvailable?  Not sure.

Took a look at that thread. Looks like Jeremy + Jon Mason proposed using the &quot;g_&quot; prefix for file-level static variables, Maciej objected, and that was the end of it.

&gt; WebCore/workers/WorkerContext.cpp:297
&gt;  +          ec = SECURITY_ERR;
&gt; Security Error?

From the DB spec: &quot;The user agent may raise a SECURITY_ERR exception instead of returning a Database object if the request violates a policy decision (e.g. if the user agent is configured to not allow the page to open databases).&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239824</commentid>
    <comment_count>41</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-18 02:16:53 -0700</bug_when>
    <thetext>patch #4 landed as r61388.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244727</commentid>
    <comment_count>42</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-30 04:46:57 -0700</bug_when>
    <thetext>All common code was moved to AbstractDatabase. There&apos;s still some clean up to do in AbstractDatabase; I&apos;ll open separate bugs for that as I get to it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55936</attachid>
            <date>2010-05-12 21:20:12 -0700</date>
            <delta_ts>2010-06-11 16:11:49 -0700</delta_ts>
            <desc>patch #1: Add a base class for Database and DatabaseSync</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11529</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTM0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDUtMTIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIHBhcmVudCBjbGFzcyBmb3IgRGF0YWJhc2UgYW5kIERhdGFiYXNlU3luYy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
QWJzdHJhY3REYXRhYmFzZS5oOiBBZGRlZC4KKwogMjAxMC0wNS0xMiAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0
dC4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTkzMzgpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzQxLDYgKzIzNDEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVRyYW5zYWN0aW9uLmggXAorCVdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNl
LmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaCBcCiAJV2ViQ29yZS9z
dG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL0NoYW5n
ZVZlcnNpb25XcmFwcGVyLmggXAogCVdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDU5MzM4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTMyOTcsNiArMzI5Nyw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1RyYW5zZm9y
bVN0YXRlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9icmVha19saW5lcy5jcHAnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9icmVha19saW5lcy5oJywKKyAgICAgICAgICAgICdzdG9yYWdl
L0Fic3RyYWN0RGF0YWJhc2UuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL0Fic3RyYWN0RGF0
YWJhc2UuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAn
LAogICAgICAgICAgICAgJ3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgnLApJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biA1OTMzOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIyODIs
NiArMjI4Miw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TUUxJVEU9MSkgewogICAgICAg
ICBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3Nx
bC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9zcWwvU1FMVmFsdWUu
Y3BwIFwKKyAgICAgICAgc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcCBcCiAgICAgICAgIHN0
b3JhZ2UvRGF0YWJhc2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwIFwKICAgICAgICAgc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCkBAIC0yMzM1LDYgKzIzMzYs
NyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTCiAKIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSB7CiAgICAgSEVBREVSUyArPSBcCisgICAg
ICAgIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oIFwKICAgICAgICAgc3RvcmFnZS9DaGFuZ2VW
ZXJzaW9uV3JhcHBlci5oIFwKICAgICAgICAgc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaCBc
CiAgICAgICAgIHN0b3JhZ2UvRGF0YWJhc2UuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU5MzM4KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMyNDksNiArNDMyNDksMTQgQEAK
IAkJCU5hbWU9InN0b3JhZ2UiDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxBYnN0cmFjdERhdGFiYXNlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcQWJzdHJhY3REYXRhYmFzZS5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDU5MzM4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTQyMDYsNiArNDIwNiw4IEBACiAJCUI1OURENkFBMTE5MDJBNzEwMDdF
OTY4NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU5REQ2QTgxMTkwMkE3MTAwN0U5Njg0IC8q
IEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi87IH07CiAJCUI1QTY4NDIyMEZGQUJF
OTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUE2ODQyMTBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRl
RmlsZVN5c3RlbS5oICovOyB9OwogCQlCNUE2ODQyNDBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRl
RmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi87
IH07CisJCUI1QjVEQzY5MTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QjVEQzY3MTE5
QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmNwcCAqLzsgfTsKKwkJQjVCNURDNkEx
MTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QjVEQzY4MTE5QkIzRDUwMDJBODc5MCAvKiBB
YnN0cmFjdERhdGFiYXNlLmggKi87IH07CiAJCUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI1QzExMjM5MTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKIAkJQjVDMTEyM0MxMDJCNkM0NjAwMDk2NTc4IC8q
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmggKi87IH07CiAJCUI1RDM2MDFBMTEyRjhCNTYwMDQ4REVBOCAvKiBE
YXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNUQzNjAxOTExMkY4QjU2MDA0OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5oICov
OyB9OwpAQCAtOTYyOSw2ICs5NjMxLDggQEAKIAkJQjU5REQ2QTgxMTkwMkE3MTAwN0U5Njg0IC8q
IEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCNUE2ODQyMTBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmls
ZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxpdGVGaWxlU3lz
dGVtLmg7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVt
LmNwcDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjVCNURDNjcxMTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWJzdHJhY3REYXRhYmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1QjVEQzY4MTE5QkIzRDUwMDJB
ODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFic3RyYWN0RGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVD
MTEyMzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QzExMjNBMTAyQjZDNDYw
MDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VDYWxsYmFj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA4NzksNiArMTA4ODMsOCBAQAog
CQkxQUU4MkVDOTBDQUFFMTc3MDAyMjM3QUUgLyogc3RvcmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQjVCNURDNjcxMTlCQjNENTAwMkE4NzkwIC8q
IEFic3RyYWN0RGF0YWJhc2UuY3BwICovLAorCQkJCUI1QjVEQzY4MTE5QkIzRDUwMDJBODc5MCAv
KiBBYnN0cmFjdERhdGFiYXNlLmggKi8sCiAJCQkJNTE0MTg1RUQwQ0Q2NUYwNDAwNzYzQzk5IC8q
IENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLywKIAkJCQk1MTQxODVFQzBDRDY1RjA0MDA3NjND
OTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCAqLywKIAkJCQk1MTk2MTE1RTBDQUM1NjU3MDAx
MEE4MEMgLyogRGF0YWJhc2UuY3BwICovLApAQCAtMTkxNTcsNiArMTkxNjMsNyBAQAogCQkJCTJF
OTRGNDNDMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJFOTRGNDUxMTE5MjA5NkEwMEI3Rjc1RCAvKiBGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDQwQTJENzExOTFBNTIzMDAwODIwQjAgLyogU1ZHRkVMaWdodGluZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQjVCNURDNkExMTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjE0MjUsNiArMjE0MzIsNyBAQAogCQkJCTJFOTRGNDNC
MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkU5NEY0NTAxMTkyMDk2NDAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTQ0MEEyRDUxMTkxQTUwQjAwMDgyMEIwIC8qIFNWR0ZFTGlnaHRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQjVCNURDNjkxMTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBYnN0cmFjdERhdGFiYXNlX2gKKyNkZWZpbmUg
QWJzdHJhY3REYXRhYmFzZV9oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQWJzdHJhY3REYXRhYmFzZSB7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBBYnN0
cmFjdERhdGFiYXNlX2gK
</data>
<flag name="review"
          id="40253"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="40254"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56032</attachid>
            <date>2010-05-13 16:26:02 -0700</date>
            <delta_ts>2010-06-01 11:47:37 -0700</delta_ts>
            <desc>patch #2: clean up</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25005</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTM5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMTMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDbGVhbiB1cCB0aGUgREIgY2xhc3NlcyBpbiBwcmVwYXJhdGlvbiBmb3IgYSBiaWdnZXIgcmVm
YWN0b3JpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTA0MQorCisgICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA6Cisg
ICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oOgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlOjppblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c3FsaXRlRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRhdGFiYXNlRGVidWdOYW1lKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZVRhc2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMU3RhdGVtZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aDoKKwogMjAxMC0wNS0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9DaGFu
Z2VWZXJzaW9uV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0NoYW5n
ZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2aXNpb24gNTkzOTMpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
Q2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJTUUxFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9D
aGFuZ2VWZXJzaW9uV3JhcHBlci5oCShyZXZpc2lvbiA1OTM5MykKKysrIFdlYkNvcmUvc3RvcmFn
ZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMiBA
QAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgU1FMRXJyb3I7CisKIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVyIDogcHVibGljIFNR
TFRyYW5zYWN0aW9uV3JhcHBlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hh
bmdlVmVyc2lvbldyYXBwZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgbmV3VmVyc2lvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3IENoYW5nZVZlcnNpb25X
cmFwcGVyKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pKTsgfQpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiA1OTM5MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJEYXRhYmFzZS5oIgogCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCkBAIC00MCwyMSArMzgsMjUgQEAKICNpbmNsdWRlICJE
YXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxSZXN1
bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCi0KLSNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgVVNFKEpTQykKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgpAQCAtNzEsOCArNzMsNiBAQCBjb25zdCBTdHJpbmcmIERhdGFiYXNlOjpkYXRhYmFzZUluZm9U
YWJsCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0KIHN0YXRp
YyBib29sIGlzRGF0YWJhc2VBdmFpbGFibGUgPSB0cnVlOwogCiB2b2lkIERhdGFiYXNlOjpzZXRJ
c0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKQEAgLTIxMyw4ICsyMTMsOCBAQCBEYXRhYmFzZTo6
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2so
Y3JlYXRpb25DYWxsYmFjaykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LmdldCgpKTsKLSAgICBtX21haW5UaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJp
dHlPcmlnaW4gPSBtX21haW5UaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsK
KyAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmln
aW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsKICAg
ICBpZiAobV9uYW1lLmlzTnVsbCgpKQogICAgICAgICBtX25hbWUgPSAiIjsKIApAQCAtNDkxLDYg
KzQ5MSwxOCBAQCB2b2lkIERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQogICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOwogfQogCitib29sIERhdGFiYXNlOjps
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOworICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkNoYW5n
ZWREYXRhYmFzZSgpOworfQorCitib29sIERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkK
K3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFi
YXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgpOworfQorCiBzdGF0aWMgaW50IGd1
aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgU3RyaW5nIHN0cmluZ0lEOwpAQCAtNjQzLDYgKzY1NSwxMyBAQCB2b2lkIERh
dGFiYXNlOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRCiAgICAgICAgIHNjaGVkdWxlVHJhbnNh
Y3Rpb24oKTsKIH0KIAordm9pZCBEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxl
dGVkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NN
dXRleCk7CisgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBzY2hlZHVs
ZVRyYW5zYWN0aW9uKCk7Cit9CisKIHZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24o
KQogewogICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleC50cnlMb2NrKCkp
OyAvLyBMb2NrZWQgYnkgY2FsbGVyLgpAQCAtNzgwLDggKzc5OSw4IEBAIHZvaWQgRGF0YWJhc2U6
OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCAKIAogU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpz
ZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7Ci0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBtX21haW5UaHJlYWRTZWN1cml0
eU9yaWdpbi5nZXQoKTsKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2lu
LmdldCgpOwogICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0gbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gbV9k
YXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpOwogICAgIHJldHVybiAwOwpAQCAtODE4
LDYgKzgzNyw2IEBAIHZvaWQgRGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQKICAg
ICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKIH0K
IAotI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9u
IDU5MzkzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDQyICszMSwzMyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgi
CisjaWZuZGVmIE5ERUJVRworI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5kaWYKIAot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KLSNlbHNlCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNlbmRp
ZgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKIGNsYXNzIERhdGFi
YXNlQ2FsbGJhY2s7CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7Ci1jbGFzcyBTUUxSZXN1bHRTZXQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudDsK
IGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s7Ci1jbGFzcyBTUUxWYWx1ZTsKK2NsYXNzIFZvaWRDYWxsYmFjazsKKyNpZmRl
ZiBOREVCVUcKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworI2VuZGlmCiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
RGF0YWJhc2U+IHsKLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7Ci0g
ICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVudDsKLSAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNh
Y3Rpb247CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7CiAg
ICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKQEAgLTc0LDE1ICs2NSwxMiBAQCBwdWJsaWM6
CiAgICAgfkRhdGFiYXNlKCk7CiAKICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBB
UEkKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRW
ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyB2ZXJzaW9uKCkg
Y29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgdm9pZCB0
cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKKyAg
ICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sCisgICAg
ICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgdm9pZCB0
cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICBQYXNz
UmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5KTsKIAog
ICAgIC8vIEludGVybmFsIGVuZ2luZSBzdXBwb3J0CkBAIC05MSwxMSArNzksMTQgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlzYWJsZUF1dGhvcml6ZXIoKTsKICAgICB2b2lkIGVuYWJsZUF1dGhvcml6
ZXIoKTsKICAgICB2b2lkIHNldEF1dGhvcml6ZXJSZWFkT25seSgpOworICAgIGJvb2wgbGFzdEFj
dGlvbkNoYW5nZWREYXRhYmFzZSgpOworICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwog
CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsgfQogICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OworICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0
dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KICAgICBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNv
bnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0OwpAQCAtMTI3LDYgKzExOCwxMCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZvaWQg
aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgdm9pZCBzY2hlZHVsZVRyYW5z
YWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICB2b2lkIHNjaGVkdWxlVHJhbnNh
Y3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiwgYm9vbCBpbW1lZGlhdGVseSA9IGZhbHNlKTsKKwog
ICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAgICAgdm9pZCBwZXJm
b3JtQ3JlYXRpb25DYWxsYmFjaygpOwogCkBAIC0xMzYsMTUgKzEzMSwxMiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CiAKIHByaXZhdGU6Ci0gICAgRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LAotICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLAotICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrKTsKKyAgICBE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4pOwogCiAgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlcHRpb25D
b2RlJik7CiAKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKLSAgICB2b2lkIHNjaGVk
dWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2NoZWR1
bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIGltbWVk
aWF0ZWx5ID0gZmFsc2UpOwogCiAgICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IG1f
dHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4
OwpAQCAtMTU0LDcgKzE0Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVsaXZlclBl
bmRpbmdDYWxsYmFjayh2b2lkKik7CiAKICAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
bV9tYWluVGhyZWFkU2VjdXJpdHlPcmlnaW47CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBt
X2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKICAgICBTdHJpbmcgbV9uYW1lOwogICAg
IGludCBtX2d1aWQ7CkBAIC0xNzcsMjEgKzE2OSwxMiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7CiAKICNpZm5kZWYgTkRFQlVHCi0g
ICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWluVGhyZWFk
U2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CisgICAgU3RyaW5n
IGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJp
dHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CiAjZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vsc2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgRGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZT4gewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOwotfTsK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKIAog
I2VuZGlmIC8vIERhdGFiYXNlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCShyZXZp
c2lvbiA1OTM5MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsMTEgKzE0Myw4IEBAIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjp+RGF0
YWJhc2VUcmFuc2EKIAogdm9pZCBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3JtVGFz
aygpCiB7Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1OZXh0U3RlcCgpKSB7Ci0gICAg
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZSwgd2UgY2FuIG1vdmUgb24gdG8gdGhl
IG5leHQgb25lLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS0+bV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Ci0gICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCktPnNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKLSAgICB9CisgICAgaWYg
KG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1OZXh0U3RlcCgpKQorICAgICAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5pblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKIH0KIAogI2lm
bmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHJldmlzaW9uIDU5MzkzKQor
KysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00MCwxMyArNDEsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlVGFzazsKLWNsYXNzIERhdGFiYXNlVGhy
ZWFkOwotY2xhc3MgU1FMVmFsdWU7Ci1jbGFzcyBTUUxDYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5z
YWN0aW9uOwotY2xhc3MgVmVyc2lvbkNoYW5nZUNhbGxiYWNrOwotCiAvLyBDYW4gYmUgdXNlZCB0
byB3YWl0IHVudGlsIERhdGFiYXNlVGFzayBpcyBjb21wbGV0ZWQuCiAvLyBIYXMgdG8gYmUgcGFz
c2VkIGludG8gRGF0YWJhc2VUYXNrOjpjcmVhdGUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0
YXNrLgogY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA1OTM5MykKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiAr
MzEsMTAgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgot
I2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTUUxFcnJvci5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCiAjaW5jbHVk
ZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKQEAgLTczLDcgKzcxLDcgQEAg
Ym9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQogICAgIGlmIChtX3JlYWRP
bmx5KQogICAgICAgICBkYi0+c2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CiAKLSAgICBTUUxpdGVE
YXRhYmFzZSogZGF0YWJhc2UgPSAmZGItPm1fc3FsaXRlRGF0YWJhc2U7CisgICAgU1FMaXRlRGF0
YWJhc2UqIGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgpOwogCiAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKICAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKQEAgLTEzMCw3ICsxMjgsNyBAQCBib29sIFNRTFN0YXRl
bWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHREb25lKSB7CiAgICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5n
LCBvciB3YXMgYW4gaW5zZXJ0Ci0gICAgICAgIGlmIChkYi0+bV9kYXRhYmFzZUF1dGhvcml6ZXIt
Pmxhc3RBY3Rpb25XYXNJbnNlcnQoKSkKKyAgICAgICAgaWYgKGRiLT5sYXN0QWN0aW9uV2FzSW5z
ZXJ0KCkpCiAgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRhdGFiYXNlLT5sYXN0
SW5zZXJ0Um93SUQoKSk7CiAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkg
ewogICAgICAgICAvLyBSZXR1cm4gdGhlIFF1b3RhIGVycm9yIC0gdGhlIGRlbGVnYXRlIHdpbGwg
YmUgYXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1
bgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAkocmV2aXNpb24gNTkzOTMpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwxOCBA
QAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0K
LSNpbmNsdWRlICJTUUxFcnJvci5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgotI2luY2x1
ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBTUUxFcnJvcjsK
K2NsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNrOworY2xhc3MgU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjazsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwotY2xhc3MgU3RyaW5nOwogCiBjbGFzcyBTUUxT
dGF0ZW1lbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0ZW1lbnQ+IHsKIHB1Ymxp
YzoKQEAgLTY2LDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgU1FMRXJyb3IqIHNxbEVycm9yKCkg
Y29uc3QgeyByZXR1cm4gbV9lcnJvci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBTUUxTdGF0ZW1l
bnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3Vt
ZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgYm9vbCByZWFkT25s
eSk7CisgICAgU1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsK
IAogICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsKICAgICB2b2lkIGNsZWFyRmFpbHVy
ZUR1ZVRvUXVvdGEoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNp
b24gNTkzOTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwyNiArMzEsMjYgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
RGF0YWJhc2VBdXRob3JpemVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNRTEVycm9yLmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNh
Y3Rpb24uaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1l
bnQuaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKICNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIC8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhh
Y3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVu
dCBoaXRzIHRoZSBxdW90YSBsaW1pdC4KIC8vIEZvciBub3csIHdlJ2xsIGFyYml0cmFyaWx5IGNo
b29zZSBjdXJyZW50UXVvdGEgKyAxbWIuCkBAIC02NSw4ICs2NSw4IEBAIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+IFNRTFRyYW5zYWN0aW8KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRy
YW5zYWN0aW9uKGRiLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3
cmFwcGVyLCByZWFkT25seSkpOwogfQogCi1TUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24o
RGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBl
ciwgYm9vbCByZWFkT25seSkKK1NRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFz
ZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29s
IHJlYWRPbmx5KQogICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2Nr
KQogICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkKICAgICAsIG1fZGF0YWJhc2UoZGIp
CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVkKCkK
IAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKIHsK
LSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKIAogICAg
IExPRyhTdG9yYWdlQVBJLCAiT3BlbmluZyBhbmQgcHJlZmxpZ2h0aW5nIHRyYW5zYWN0aW9uICVw
IiwgdGhpcyk7CkBAIC0yNDgsMTggKzI0OCwxOCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpvcGVu
VHJhbnNhY3Rpb25BbmRQCiAKICAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRoaXMg
dHJhbnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seQogICAgIGlm
ICghbV9yZWFkT25seSkKLSAgICAgICAgbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS5zZXRN
YXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKKyAgICAgICAgbV9kYXRhYmFz
ZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRNYXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6
ZSgpKTsKIAogICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7Ci0gICAgbV9zcWxpdGVU
cmFuc2FjdGlvbi5zZXQobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPm1fc3FsaXRl
RGF0YWJhc2UsIG1fcmVhZE9ubHkpKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLnNldChuZXcg
U1FMaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgbV9yZWFkT25s
eSkpOwogCi0gICAgbV9kYXRhYmFzZS0+bV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsK
KyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwogICAgIG1fc3FsaXRlVHJhbnNh
Y3Rpb24tPmJlZ2luKCk7Ci0gICAgbV9kYXRhYmFzZS0+bV9kYXRhYmFzZUF1dGhvcml6ZXItPmVu
YWJsZSgpOworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKIAogICAgIC8vIFRy
YW5zYWN0aW9uIFN0ZXBzIDErMiAtIE9wZW4gYSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0YWJhc2Us
IGp1bXBpbmcgdG8gdGhlIGVycm9yIGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKICAgICBpZiAoIW1f
c3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBBU1NFUlQoIW1fZGF0
YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwogICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgICAgIG1f
dHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoMCwgInVuYWJsZSB0byBvcGVuIGEg
dHJhbnNhY3Rpb24gdG8gdGhlIGRhdGFiYXNlIik7CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9u
RXJyb3IoZmFsc2UpOwpAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246Om9w
ZW5UcmFuc2FjdGlvbkFuZFAKIAogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDMgLSBQZWZvcm0g
cHJlZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZh
aWwKICAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZvcm1QcmVmbGlnaHQodGhp
cykpIHsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0ZURhdGFiYXNlLnRyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKICAgICAgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi5jbGVhcigpOwogICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXIt
PnNxbEVycm9yKCk7CiAgICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKQpAQCAtMzI2LDcg
KzMyNiw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQogICAgICAgICAg
ICAgLy8gbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgaXMgc2V0IHRvIHRydWUgb25seSB3
aGVuIGEgc3RhdGVtZW50IGV4Y2VlZHMKICAgICAgICAgICAgIC8vIHRoZSBxdW90YSwgd2hpY2gg
Y2FuIGhhcHBlbiBvbmx5IGluIGEgcmVhZC13cml0ZSB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB0
aGVyZQogICAgICAgICAgICAgLy8gaXMgbm8gbmVlZCB0byBjaGVjayBoZXJlIGlmIHRoZSB0cmFu
c2FjdGlvbiBpcyByZWFkLXdyaXRlLgotICAgICAgICAgICAgbV9kYXRhYmFzZS0+bV9zcWxpdGVE
YXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkuc2V0TWF4aW11bVNpemUobV9kYXRh
YmFzZS0+bWF4aW11bVNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBydW4sIGZhaWxlZCBkdWUg
dG8gcXVvdGEgY29uc3RyYWludHMsIGFuZCB3ZSdyZSBub3QgcmV0cnlpbmcgaXQsCiAgICAgICAg
ICAgICAvLyB0aGF0IG1lYW5zIGl0IGVuZGVkIGluIGFuIGVycm9yLiAgSGFuZGxlIGl0IG5vdwpA
QCAtMzYzLDEwICszNjMsMTAgQEAgYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRl
bWVudAogICAgIGlmICghbV9jdXJyZW50U3RhdGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKKyAgICBt
X2RhdGFiYXNlLT5yZXNldEF1dGhvcml6ZXIoKTsKIAogICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1l
bnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKG1fZGF0YWJhc2Ut
Pm1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkpIHsKKyAg
ICAgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgewogICAg
ICAgICAgICAgLy8gRmxhZyB0aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBk
YXRhYmFzZSBmb3IgbGF0ZXIgZGVsZWdhdGUgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICBtX21v
ZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6
ZSBvZiB0aGlzIGRhdGFiYXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCkBAIC00
NTUsOSArNDU1LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdAog
ICAgIC8vIFRyYW5zYWN0b24gU3RlcCA4KzkgLSBDb21taXQgdGhlIHRyYW5zYWN0aW9uLCBqdW1w
aW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGF0IGZhaWxzCiAgICAgQVNTRVJUKG1fc3Fs
aXRlVHJhbnNhY3Rpb24pOwogCi0gICAgbV9kYXRhYmFzZS0+bV9kYXRhYmFzZUF1dGhvcml6ZXIt
PmRpc2FibGUoKTsKKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwogICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VB
dXRob3JpemVyLT5lbmFibGUoKTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7
CiAKICAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3Rp
bGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlv
bi0+aW5Qcm9ncmVzcygpKSB7CkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6Y2xlYW51cEFmdGVyU3VjY2VzcwogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEgLSBFbmQg
dHJhbnNhY3Rpb24gc3RlcHMKICAgICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKICAgICBMT0co
U3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlXG4iLCB0aGlzKTsKLSAgICBB
U1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNz
KCkpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlv
bkluUHJvZ3Jlc3MoKSk7CiAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwogICAgIG1f
bmV4dFN0ZXAgPSAwOwogCkBAIC01NTksMTUgKzU1OSwxNSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiB7CiAgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKIAot
ICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CisgICAgbV9k
YXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlv
bikgewogICAgICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5z
YWN0aW9uLgogICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogCi0gICAg
ICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJv
Z3Jlc3MoKSk7CisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xl
YXIoKTsKICAgICB9Ci0gICAgbV9kYXRhYmFzZS0+bV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJs
ZSgpOworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKIAogICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXAgMTIgLSBBbnkgc3RpbGwtcGVuZGluZyBzdGF0ZW1lbnRzIGluIHRoZSB0cmFu
c2FjdGlvbiBhcmUgZGlzY2FyZGVkLgogICAgIHsKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFNR
TFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiAKICAgICAvLyBUcmFuc2FjdGlvbiBp
cyBjb21wbGV0ZSEgIFRoZXJlIGlzIG5vIG5leHQgc3RlcAogICAgIExPRyhTdG9yYWdlQVBJLCAi
VHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGUgd2l0aCBhbiBlcnJvclxuIiwgdGhpcyk7Ci0gICAg
QVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVz
cygpKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOwogICAgIG1fbmV4dFN0ZXAgPSAwOwogCiAgICAgLy8gTm93IHJlbGVh
c2Ugb3VyIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA1OTM5MykKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsOSBAQAogCiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgogCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIK
ICNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsOSArNDMsMTIgQEAgdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBTUUxFcnJvcjsKK2NsYXNz
IFNRTGl0ZVRyYW5zYWN0aW9uOwogY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7CiBjbGFzcyBT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
OwogY2xhc3MgU1FMVmFsdWU7CiBjbGFzcyBTdHJpbmc7CiBjbGFzcyBWb2lkQ2FsbGJhY2s7CkBA
IC03Miw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB+U1FMVHJhbnNhY3Rpb24oKTsKIAogICAgIHZv
aWQgZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNR
TFZhbHVlPiYgYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFN0
YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrPiBjYWxsYmFja0Vycm9yLCBFeGNlcHRpb25Db2RlJiBlKTsKKyAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgbG9ja0Fj
cXVpcmVkKCk7CiAgICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAoKTsK
</data>
<flag name="review"
          id="40355"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="40356"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57643</attachid>
            <date>2010-06-02 04:23:23 -0700</date>
            <delta_ts>2010-06-02 04:31:50 -0700</delta_ts>
            <desc>patch #3: Move the reusable code from Database to AbstractDatabase</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>75833</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDU1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDYtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIHRoZSBjb2RlIHRoYXQgd2lsbCBiZSByZXVzZWQgYnkgRGF0YWJhc2VTeW5jIGZyb20g
RGF0YWJhc2UgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVu
YWJsZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VTeW5jRW5hYmxlZCk6CisgICAgICAg
ICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgICog
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z3VpZEZvck9yaWdpbkFuZE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z3VpZE11dGV4KToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb1Zl
cnNpb25NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlR3VpZFZlcnNpb25NYXApOgorICAg
ICAgICAoV2ViQ29yZTo6ZGF0YWJhc2VWZXJzaW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
dHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0
VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNl
dElzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZh
aWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZv
VGFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c3RvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpoYWREZWxldGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hl
c0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVj
dGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpub3RpZnlE
YXRhYmFzZVRocmVhZERhdGFiYXNlT3Blbik6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERh
dGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZWN1cml0eU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNxbGl0ZURh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50
aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpvcGVuZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6c3RvcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkZWxldGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlRGVidWdOYW1l
KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZl
cmlmeVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlv
bkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtQ2xvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
Ojpub3RpZnlEYXRhYmFzZVRocmVhZERhdGFiYXNlT3Blbik6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5hbWUp
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQ2xvc2VUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpkYXRh
YmFzZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTYW1lRGF0YWJhc2VQcmVkaWNhdGU6OlNh
bWVEYXRhYmFzZVByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6
dW5zY2hlZHVsZURhdGFiYXNlVGFza3MpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJh
c2UpOgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICog
c3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYWNrZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNrOjpUcmFja2VyUmVtb3ZlT3BlbkRh
dGFiYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9w
ZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5E
YXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXpl
Rm9yRGF0YWJhc2UpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOgorCiAyMDEwLTA2LTAy
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
dXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOCArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
RGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2lu
Y2x1ZGUgIldlYlNvY2tldC5oIgpAQCAtOTUsMTIgKzk0LDEyIEBAIGJvb2wgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6d2ViU29ja2V0RW4KICNpZiBFTkFCTEUoREFUQUJBU0UpCiBib29sIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZUVuYWJsZWQoKQogewotICAgIHJldHVybiBE
YXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6aXNB
dmFpbGFibGUoKTsKIH0KIAogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJh
c2VTeW5jRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlU3luYzo6aXNBdmFpbGFibGUo
KTsKKyAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKIH0KICNlbmRp
ZgogCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24g
NjA1NTYpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAj
aWYgRU5BQkxFKEZJTEVfUkVBREVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCkBAIC0xMDksNyAr
MTA5LDcgQEAgRGF0YWJhc2VUaHJlYWQqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OgogICAgIHJl
dHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFz
ZSkKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwogICAgIGlmICghbV9vcGVuRGF0
YWJhc2VTZXQpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjphZGRPcGVuRGF0YQogICAgIG1fb3BlbkRhdGFiYXNlU2V0LT5hZGQoZGF0YWJhc2UpOwogfQog
Ci12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFz
ZSogZGF0YWJhc2UpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRh
YmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX29wZW5EYXRhYmFzZVNldCAmJiBtX29wZW5EYXRhYmFz
ZVNldC0+Y29udGFpbnMoZGF0YWJhc2UpKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEFjdGl2ZURPTU9iamVjdDsKICNpZiBFTkFCTEUoREFUQUJBU0Up
Ci0gICAgY2xhc3MgRGF0YWJhc2U7CisgICAgY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKICAgICBj
bGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7CiAgICAgY2xhc3MgRGF0YWJhc2VUaHJlYWQ7
CiAjZW5kaWYKQEAgLTcwLDggKzcwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBE
YXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsKICAgICAgICAgdm9pZCBzZXRIYXNPcGVu
RGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9CiAgICAgICAgIGJvb2wg
aGFzT3BlbkRhdGFiYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQot
ICAgICAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgICAgICB2b2lkIHJl
bW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSopOworICAgICAgICB2b2lkIGFkZE9wZW5EYXRhYmFz
ZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFi
c3RyYWN0RGF0YWJhc2UqKTsKICAgICAgICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBp
cyBkb25lLCBjbGVhbnVwU3luYyB3aWxsIGJlIHNpZ25hbGxlZC4KICAgICAgICAgdm9pZCBzdG9w
RGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogI2VuZGlmCkBAIC0xNjAsNyAr
MTYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAg
ICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX2RhdGFiYXNlVGhyZWFkOwogICAgICAgICBib29s
IG1faGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFsc2Us
IGV2ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCi0gICAgICAgIHR5cGVk
ZWYgSGFzaFNldDxEYXRhYmFzZSogPiBEYXRhYmFzZVNldDsKKyAgICAgICAgdHlwZWRlZiBIYXNo
U2V0PEFic3RyYWN0RGF0YWJhc2UqID4gRGF0YWJhc2VTZXQ7CiAgICAgICAgIE93blB0cjxEYXRh
YmFzZVNldD4gbV9vcGVuRGF0YWJhc2VTZXQ7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9zdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
QWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDM5MiBAQAog
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNp
bmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5B
bmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
U3RyaW5nIHN0cmluZ0lEOworICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKKyAgICAgICAg
c3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5nSUQgPSBv
cmlnaW4gKyAiLyIgKyBuYW1lOworCisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2Ug
QXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZSB0aGlzCisgICAgLy8gZnVu
Y3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVh
ZCBvciB0aGUgd29ya2VyJ3MKKyAgICAvLyBjb250ZXh0IHRocmVhZCBiZWZvcmUgYW55IG90aGVy
IHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChNdXRleCwgc3RyaW5nSWRlbnRpZmllck11dGV4LCAoKSk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHN0cmluZ0lkZW50aWZpZXJNdXRleCk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgaW50PiBJREd1aWRNYXA7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRN
YXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKKyAgICBpbnQgZ3VpZCA9IHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKKyAgICBpZiAoIWd1aWQpIHsKKyAg
ICAgICAgc3RhdGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7CisgICAgICAgIGd1aWQgPSBjdXJy
ZW50TmV3R1VJRCsrOworICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJp
bmdJRCwgZ3VpZCk7CisgICAgfQorCisgICAgcmV0dXJuIGd1aWQ7Cit9CisKK3N0YXRpYyBNdXRl
eCYgZ3VpZE11dGV4KCkKK3sKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlIHRoaXMKKyAgICAvLyBmdW5jdGlv
biBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkIG9y
IHRoZSB3b3JrZXIncworICAgIC8vIGNvbnRleHQgdGhyZWFkIGJlZm9yZSBhbnkgb3RoZXIgdGhy
ZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30KKwordHlwZWRl
ZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVyc2lv
bk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlk
VmVyc2lvbk1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworLy8gTk9URTogQ2Fs
bGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlk
VmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCit7CisgICAgLy8gRW5zdXJl
IHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9j
aygpKTsKKworICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJp
bmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KKyAgICAvLyBUaGF0J3MgYmVjYXVz
ZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJl
YWQuCisgICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0
cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAorICAgIC8vIHRocmVhZCwgYnV0IHdlIG5l
ZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUu
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhh
dmUgdG8gcHJvZ3JhbSB3aXRoLgorCisgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0
cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3Vp
ZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2Fm
ZUNvcHkoKSk7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFz
ZVZlcnNpb25LZXkiKSk7CisgICAgcmV0dXJuIGtleTsKK30KKworc3RhdGljIGJvb2wgcmV0cmll
dmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChkYiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgp
OworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1Io
IkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20g
ZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICByZXN1bHRTdHJpbmcg
PSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAo
JXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRl
RGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKKyAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8g
c2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFs
dWUpOworCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0
ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGJvb2wgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRydWU7CisKK3ZvaWQgQWJzdHJh
Y3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisgICAgaXNEYXRh
YmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpp
c0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGlzRGF0YWJhc2VBdmFpbGFibGU7Cit9CisKK0Fi
c3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAg
LCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkK
KyAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAg
ICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9jcmVhdGlvbkNhbGxi
YWNrKGNyZWF0aW9uQ2FsbGJhY2spCisgICAgLCBtX2d1aWQoMCkKKyAgICAsIG1fbmV3KGZhbHNl
KQorICAgICwgbV9vcGVuZWQoZmFsc2UpCisgICAgLCBtX3N0b3BwZWQoZmFsc2UpCisgICAgLCBt
X2RlbGV0ZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlQXV0aG9yaXplcihEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZSgpKQoreworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
Z2V0KCkpOworICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOworCisgICAgaWYgKG1fbmFtZS5pc051bGwo
KSkKKyAgICAgICAgbV9uYW1lID0gIiI7CisKKyAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5k
TmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKKworICAgIG1fZmlsZW5h
bWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3Vy
aXR5T3JpZ2luKCksIG1fbmFtZSk7CisKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5h
ZGRPcGVuRGF0YWJhc2UodGhpcyk7CisgICAgY29udGV4dC0+YWRkT3BlbkRhdGFiYXNlKHRoaXMp
OworfQorCitBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCit7Cit9CisKK2Nv
bnN0IFN0cmluZyYgQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJfX1dlYktpdERhdGFiYXNl
SW5mb1RhYmxlX18iKSk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBBYnN0cmFjdERh
dGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAg
ICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVDb3B5KCk7
Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c3RvcCgpCit7CisgICAgbV9zdG9wcGVkID0g
dHJ1ZTsKK30KKworLy8gSWYgd2Ugc2xlZXAgZm9yIG1vcmUgdGhlIDMwIHNlY29uZHMgd2hpbGUg
YmxvY2tlZCBvbiBTUUxJVEVfQlVTWSwgZ2l2ZSB1cC4KK3N0YXRpYyBjb25zdCBpbnQgbWF4U3Fs
aXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9y
bU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gb3BlbiBkYXRhYmFzZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0
b1ZhY3V1bSgpKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVu
dGFsIGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRh
KCkpOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0ZURh
dGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRl
RGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKworICAgIFN0
cmluZyBjdXJyZW50VmVyc2lvbjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihn
dWlkTXV0ZXgoKSk7CisKKyAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0g
Z3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGd1
aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5n
IHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAgICAgICAg
ICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6
IGVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2Fj
aGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisgICAgICAg
ICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVO
YW1lKCkpKSB7CisgICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOworICAgICAgICAgICAgICAg
IGlmICghbV9zcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFICIgKyBk
YXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBD
T05GTElDVCBGQUlMKTsiKSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBjcmVhdGUgdGFibGUgJXMgaW4gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZUluZm9UYWJsZU5h
bWUoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAg
ICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAg
ICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJzaW9uKSkg
eworICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBjdXJyZW50IHZlcnNp
b24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAg
ICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgICAg
ICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmxlbmd0
aCgpKSB7CisgICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQgY3VycmVu
dCB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRh
dGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSB7CisgICAgICAgICAgICAg
ICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMgdGhh
dCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRh
dGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGlmICgh
c2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7CisgICAgICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVz
IiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRh
YmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJy
ZW50VmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudFZlcnNpb24u
aXNOdWxsKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBkb2VzIG5v
dCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOworICAgIH0KKworICAgIC8vIElmIHRo
ZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJpbmcsIGVuc3VyZSB0aGF0IHRo
ZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRjaGVzIHRoYXQgdmVyc2lvbi4g
T3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgorICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJz
aW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlzIHJldHVybiB3aXRoIHdoYXRl
dmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCisgICAgaWYgKCghbV9uZXcgfHwg
IW1fY3JlYXRpb25DYWxsYmFjaykgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9l
eHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJwYWdlIGV4cGVjdHMgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzLCB3aGljaCBhY3R1
YWxseSBoYXMgdmVyc2lvbiBuYW1lICVzIC0gb3BlbkRhdGFiYXNlKCkgY2FsbCB3aWxsIGZhaWwi
LCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAgIGRhdGFiYXNl
RGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgLy8gQ2xvc2UgdGhl
IGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQWxsIGNoZWNr
cyBwYXNzZWQgYW5kIHdlIHN0aWxsIGhhdmUgYSBoYW5kbGUgdG8gdGhpcyBkYXRhYmFzZSBmaWxl
LgorICAgIC8vIE1ha2Ugc3VyZSBEYXRhYmFzZVRocmVhZCBjbG9zZXMgaXQgd2hlbiBEYXRhYmFz
ZVRocmVhZCBnb2VzIGF3YXkuCisgICAgbV9vcGVuZWQgPSB0cnVlOworICAgIG5vdGlmeURhdGFi
YXNlVGhyZWFkRGF0YWJhc2VPcGVuKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcigpCit7CisgICAgQVNTRVJUKG1fZGF0
YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwor
fQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmVuYWJsZUF1dGhvcml6ZXIoKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVu
YWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25s
eSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpy
ZXNldEF1dGhvcml6ZXIoKQoreworICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplcikKKyAgICAg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRh
YmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rp
b25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0
aW9uV2FzSW5zZXJ0KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAg
IHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgpOworfQor
Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXREZWxl
dGVzKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVsZXRlcygpCit7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1l
bnRhbFZhY3V1bUlmTmVlZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3Nx
bGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1f
c3FsaXRlRGF0YWJhc2UudG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZy
ZWVTcGFjZVNpemUpCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1
dW1Db21tYW5kKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21E
YXRhYmFzZShTdHJpbmcmIHZlcnNpb24pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGdldFZlcnNpb25RdWVyeSwgKCJTRUxFQ1QgdmFsdWUgRlJPTSAiICsgZGF0YWJhc2VJbmZv
VGFibGVOYW1lKCkgKyAiIFdIRVJFIGtleSA9ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAi
JzsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworCisgICAgYm9v
bCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFz
ZSwgZ2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZy
b20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKwor
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uKQoreworICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4
aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVy
LCBkdWUgdG8KKyAgICAvLyB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UgY2xhdXNlIGlu
IHRoZSBDUkVBVEUgc3RhdGVtZW50IChzZWUgcGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNldFZlcnNpb25RdWVyeSwgKCJJTlNFUlQgSU5U
TyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXksIHZhbHVlKSBWQUxVRVMgKCci
ICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJywgPyk7IikpOworCisgICAgbV9kYXRhYmFzZUF1
dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVlSW5E
YXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBzZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHko
KSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0
YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1
dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0
cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIoZ3VpZE11dGV4KCkpOworICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3Vp
ZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJp
bmcmIHZlcnNpb24pCit7CisgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNh
ZmVDb3B5KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9u
IG1hcC4KKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHVwZGF0ZUd1
aWRWZXJzaW9uTWFwKG1fZ3VpZCwgdmVyc2lvbik7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFz
ZTo6bm90aWZ5RGF0YWJhc2VUaHJlYWREYXRhYmFzZU9wZW4oKQoreworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9zdG9yYWdl
L0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDk4IEBACiAj
ZGVmaW5lIEFic3RyYWN0RGF0YWJhc2VfaAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aWZuZGVmIE5ERUJVRworI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBYnN0cmFjdERhdGFiYXNlIHsKK2NsYXNzIERhdGFi
YXNlQXV0aG9yaXplcjsKK2NsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK3R5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7CisKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNo
YXJlZDxBYnN0cmFjdERhdGFiYXNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0SXNB
dmFpbGFibGUoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKworICAgIHZp
cnR1YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUluZm9UYWJsZU5hbWUoKTsKKworICAgIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKTsgfQorICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7IH0KKyAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0
YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9CisKKyAgICBTdHJpbmcgc3RyaW5n
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOyB9Cisg
ICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJl
YWRzYWZlQ29weSgpOyB9CisgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9lc3RpbWF0ZWRTaXplOyB9CisgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZlQ29weSgpOyB9CisgICAgYm9vbCBpc05ldygp
IGNvbnN0IHsgcmV0dXJuIG1fbmV3OyB9CisgICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVy
biBtX29wZW5lZDsgfQorICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHBl
ZDsgfQorICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CisK
KyAgICBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKSA9IDA7CisKKyAgICB2b2lkIGRpc2Fi
bGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBz
ZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICB2b2lkIHJlc2V0QXV0aG9yaXplcigpOworICAg
IGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOworICAgIGJvb2wgbGFzdEFjdGlvbldh
c0luc2VydCgpOworICAgIHZvaWQgcmVzZXREZWxldGVzKCk7CisgICAgYm9vbCBoYWREZWxldGVz
KCk7CisKKyAgICB2b2lkIGluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKworICAgIGJvb2wg
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmKTsKKyAgICBib29sIHNldFZlcnNpb25JbkRh
dGFiYXNlKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOworCisg
ICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpID0gMDsKKworcHJvdGVjdGVk
OgorICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4pOworCisgICAgdmlydHVhbCB2b2lk
IG5vdGlmeURhdGFiYXNlVGhyZWFkRGF0YWJhc2VPcGVuKCk7CisKKyAgICBTdHJpbmcgbV9uYW1l
OworICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFt
ZTsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKKyAgICBSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOworCisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOworCisgICAgaW50IG1fZ3Vp
ZDsKKyAgICBTdHJpbmcgbV9maWxlbmFtZTsKKworICAgIGJvb2wgbV9uZXc7CisgICAgYm9vbCBt
X29wZW5lZDsKKyAgICBib29sIG1fc3RvcHBlZDsKKyAgICBib29sIG1fZGVsZXRlZDsKKworICAg
IFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7CisgICAgUmVmUHRyPERhdGFiYXNlQXV0
aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3Ry
aW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CisjZW5kaWYKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24g
NjA1NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3NCArNjQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIElmIHdlIHNsZWVw
IGZvciBtb3JlIHRoZSAzMCBzZWNvbmRzIHdoaWxlIGJsb2NrZWQgb24gU1FMSVRFX0JVU1ksIGdp
dmUgdXAuCi1zdGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwot
Ci1jb25zdCBTdHJpbmcmIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZv
VGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIGJvb2wgaXNEYXRhYmFz
ZUF2YWlsYWJsZSA9IHRydWU7Ci0KLXZvaWQgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGJvb2wg
YXZhaWxhYmxlKQotewotICAgIGlzRGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7Ci19Ci0K
LWJvb2wgRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkKLXsKLSAgICByZXR1cm4gaXNEYXRhYmFzZUF2
YWlsYWJsZTsKLX0KLQotc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQotewotICAgIC8vIE5vdGU6
IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJl
Y2F1c2UKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1
Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMg
dGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChNdXRleCwgbXV0ZXgsICgpKTsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXR5cGVkZWYgSGFz
aE1hcDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7Ci1zdGF0aWMgR3VpZFZlcnNpb25NYXAm
IGd1aWRUb1ZlcnNpb25NYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNp
b25NYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLS8vIE5PVEU6IENhbGxlciBt
dXN0IGxvY2sgZ3VpZE11dGV4KCkuCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNp
b25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQotewotICAgIC8vIEVuc3VyZSB0aGUg
dGhlIG11dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7
Ci0KLSAgICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGlu
dG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhl
IG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgot
ICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcg
eW91IGNhbiB1c2Ugb24gdGhlIGN1cnJlbnQKLSAgICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEg
c3RyaW5nIHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0dXJlLgotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRv
IHByb2dyYW0gd2l0aC4KLQotICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcg
KHNlZSBjb21tZW50IGFib3ZlKS4KLSAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5l
d1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLnRocmVhZHNhZmVDb3B5
KCkpOwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PERhdGFiYXNlKj4qPiBHdWlk
RGF0YWJhc2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOwot
ICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lv
bktleSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXRE
YXRhYmFzZVZlcnNpb25LZXkiKSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RhdGljIGludCBn
dWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKLQogY2xhc3MgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gZGF0YWJhc2UpCkBAIC0xOTgsNDcgKzEzMCwxNSBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBE
YXRhYmFzZTo6b3BlbkRhdGFiCiB9CiAKIERhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFj
aykKLSAgICA6IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQorICAgIDogQWJzdHJhY3RE
YXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrKQorICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jl
c3MoZmFsc2UpCiAgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKLSAgICAs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwgbV9uYW1lKG5hbWUuY3Jv
c3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZ3VpZCgwKQotICAgICwgbV9leHBlY3RlZFZlcnNp
b24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2Rpc3BsYXlO
YW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2VzdGltYXRlZFNp
emUoZXN0aW1hdGVkU2l6ZSkKLSAgICAsIG1fZGVsZXRlZChmYWxzZSkKLSAgICAsIG1fc3RvcHBl
ZChmYWxzZSkKLSAgICAsIG1fb3BlbmVkKGZhbHNlKQotICAgICwgbV9uZXcoZmFsc2UpCi0gICAg
LCBtX2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxsYmFjaykKIHsKICAgICBBU1NFUlQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0
eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKKwog
ICAgIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRocmVhZFNlY3Vy
aXR5T3JpZ2luLT50aHJlYWRzYWZlQ29weSgpOwotICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCi0g
ICAgICAgIG1fbmFtZSA9ICIiOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwotCi0gICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAgICAgICAgSGFzaFNldDxEYXRhYmFzZSo+KiBoYXNo
U2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAgaWYgKCFoYXNo
U2V0KSB7Ci0gICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8RGF0YWJhc2UqPjsKLSAg
ICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7Ci0gICAgbV9maWxl
bmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2Vj
dXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKLQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKLSAgICBjb250ZXh0LT5hZGRPcGVuRGF0YWJhc2UodGhp
cyk7CiB9CiAKIGNsYXNzIERlcmVmQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7CkBAIC0yNjksNyArMTY5LDYgQEAgYm9vbCBEYXRhYmFzZTo6b3BlbkFu
ZFZlcmlmeVZlcnNpb24oRXhjZQogewogICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5kYXRhYmFzZVRocmVhZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9kYXRhYmFz
ZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXpl
cjsKQEAgLTI4MSw5MSArMTgwLDEwIEBAIGJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJz
aW9uKEV4Y2UKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotCi1zdGF0aWMgYm9vbCByZXRyaWV2
ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7
Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBk
YXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAg
IGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9
IFN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBM
T0dfRVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICgl
cykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBEYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJp
bmcmIHZlcnNpb24pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGdldFZlcnNp
b25RdWVyeSwgKCJTRUxFQ1QgdmFsdWUgRlJPTSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkg
KyAiIFdIRVJFIGtleSA9ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJzsiKSk7Ci0KLSAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSBy
ZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgZ2V0VmVyc2lv
blF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOwotICAgIGlmICghcmVzdWx0KQotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2Ug
JXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5lbmFibGUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBh
cmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNl
ICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOwotCi0gICAgcmVzdWx0ID0g
c3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGlu
IGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6c2V0
VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIC8vIFRoZSBJ
TlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0
aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBDT05GTElDVCBS
RVBMQUNFCi0gICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChzZWUgRGF0YWJh
c2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBzZXRWZXJzaW9uUXVlcnksICgiSU5TRVJUIElOVE8gIiArIGRhdGFiYXNlSW5mb1RhYmxl
TmFtZSgpICsgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRhdGFiYXNlVmVyc2lvbktleSgp
ICsgIicsID8pOyIpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci0K
LSAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFz
ZSwgc2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBk
YXRhYmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgc2V0VmVyc2lvblF1ZXJ5LmFz
Y2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnZlcnNpb25NYXRjaGVzRXhw
ZWN0ZWQoKSBjb25zdAordm9pZCBEYXRhYmFzZTo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKQog
ewotICAgIGlmICghbV9leHBlY3RlZFZlcnNpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgICAgIHJldHVybiBtX2V4cGVjdGVkVmVy
c2lvbiA9PSBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKG1fY3JlYXRpb25DYWxsYmFjaykKKyAgICAgICAgbV9jcmVhdGlv
bkNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRo
aXMpOwogfQogCiB2b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQpAQCAtNDE4
LDcgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOwog
fTsKIAotdm9pZCBEYXRhYmFzZTo6Y2xvc2UoQ2xvc2VQb2xpY3kgcG9saWN5KQordm9pZCBEYXRh
YmFzZTo6cGVyZm9ybUNsb3NlKENsb3NlUG9saWN5IHBvbGljeSkKIHsKICAgICBSZWZQdHI8RGF0
YWJhc2U+IHByb3RlY3QgPSB0aGlzOwogCkBAIC00MzIsMjUgKzI1MCwyNCBAQCB2b2lkIERhdGFi
YXNlOjpjbG9zZShDbG9zZVBvbGljeSBwb2xpY3kpCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKICAgICBt
X29wZW5lZCA9IGZhbHNlOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3Vp
ZE11dGV4KCkpOwotCi0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRU
b0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0KTsKLSAg
ICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKLSAgICAgICAgaGFzaFNldC0+
cmVtb3ZlKHRoaXMpOwotICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAgICAgICAgZGVs
ZXRlIGhhc2hTZXQ7Ci0gICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1fZ3Vp
ZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRh
dGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwogICAgIGlmIChw
b2xpY3kgPT0gUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCkKICAgICAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzayhDb250ZXh0UmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3Jl
YXRlKHRoaXMpKTsKIH0KIAordm9pZCBEYXRhYmFzZTo6Y2xvc2UoKQoreworICAgIERhdGFiYXNl
VGhyZWFkKiBkYXRhYmFzZVRocmVhZCA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJh
c2VUaHJlYWQoKTsKKyAgICBpZiAoIWRhdGFiYXNlVGhyZWFkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoY3VycmVudFRocmVhZCgpICE9IGRhdGFiYXNlVGhyZWFkLT5nZXRUaHJlYWRJRCgp
KSB7CisgICAgICAgIGlmICghZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkp
CisgICAgICAgICAgICBkYXRhYmFzZVRocmVhZC0+c2NoZWR1bGVUYXNrKERhdGFiYXNlQ2xvc2VU
YXNrOjpjcmVhdGUodGhpcywgRGF0YWJhc2U6OlJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQsIDAp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGVyZm9ybUNsb3NlKERhdGFiYXNlOjpSZW1vdmVEYXRh
YmFzZUZyb21Db250ZXh0KTsKK30KKwogdm9pZCBEYXRhYmFzZTo6c3RvcCgpCiB7CiAgICAgLy8g
RklYTUU6IFRoZSBuZXQgZWZmZWN0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyB0byByZW1vdmUg
YWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGFuZCBzdGF0ZW1lbnRzLCBidXQgYWxsb3cgdGhlIGN1
cnJlbnQgc3RhdGVtZW50CkBAIC00NzMsNzkgKzI5MCw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBE
YXRhYmFzZTo6bWF4aW11bVNpemUKICAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMpOwogfQogCi12b2lkIERhdGFiYXNlOjpkaXNh
YmxlQXV0aG9yaXplcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotfQotCi12b2lkIERhdGFiYXNlOjpl
bmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwot
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6
c2V0QXV0aG9yaXplclJlYWRPbmx5KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6
ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOwotfQotCi1ib29s
IERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFz
dEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotfQotCi1ib29sIERhdGFiYXNlOjpsYXN0QWN0aW9u
V2FzSW5zZXJ0KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJl
dHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgpOwotfQotCi12
b2lkIERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0
aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOwotfQot
Ci1ib29sIERhdGFiYXNlOjpoYWREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+aGFkRGVsZXRlcygp
OwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgU3RyaW5nIHN0cmluZ0lEOwotICAgIGlm
IChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKLSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1l
OwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOwotCi0g
ICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3Rh
dGljIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4g
dGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIGJlZm9yZSBhbnkgb3Ro
ZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgpKTsKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3Vp
ZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOwotICAgIGludCBndWlkID0gc3Ry
aW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOwotICAgIGlmICghZ3VpZCkgewot
ICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKLSAgICAgICAgZ3VpZCA9IGN1
cnJlbnROZXdHVUlEKys7Ci0gICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0
cmluZ0lELCBndWlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3VpZDsKLX0KLQotdm9pZCBEYXRh
YmFzZTo6cmVzZXRBdXRob3JpemVyKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIp
Ci0gICAgICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOwotfQotCiB2b2lkIERhdGFi
YXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKIHsKICAgICAvLyBGSVhNRTogQ29kZSBzaW1pbGFy
IHRvIHRoZSBmb2xsb3dpbmcgd2lsbCBuZWVkIHRvIGJlIHJ1biB0byBlbmZvcmNlIHRoZSBwZXIt
b3JpZ2luIHNpemUgbGltaXQgdGhlIHNwZWMgbWFuZGF0ZXMuCkBAIC01NjAsOTQgKzMwNCw2IEBA
IHZvaWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLWJvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNv
ZGUmIGUpCi17Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1
ZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBkYXRhYmFzZSBhdCBwYXRo
ICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZBTElEX1NU
QVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1fc3FsaXRl
RGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCi0gICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gZm9yIGRhdGFiYXNl
ICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBBU1NFUlQobV9kYXRhYmFz
ZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFi
YXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhT
cWxpdGVCdXN5V2FpdFRpbWUpOwotCi0gICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOwotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBHdWlk
VmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1
aWQpOwotICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7Ci0g
ICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRl
R3VpZFZlcnNpb25NYXAoKSkuCi0gICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5z
ZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZDsKLSAgICAgICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAl
cyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3Ig
Z3VpZCAlaSIsIG1fZ3VpZCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50
YWJsZUV4aXN0cyhkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBt
X25ldyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAi
IChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBS
RVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRh
dGFiYXNlICVzIiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFi
YXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICBlID0g
SU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5k
bGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0
YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFnZXRWZXJzaW9u
RnJvbURhdGFiYXNlKGN1cnJlbnRWZXJzaW9uKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGdldCBjdXJyZW50IHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFi
YXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGUgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRo
ZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2Uo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAl
cyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFz
Y2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8ICFtX2NyZWF0
aW9uQ2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNldHRpbmcg
dmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBtX2V4cGVj
dGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZShtX2V4cGVj
dGVkVmVyc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
c2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgp
LmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgLy8g
Q2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICAg
ICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9u
ID0gbV9leHBlY3RlZFZlcnNpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0
ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiRGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRh
YmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgY3VycmVudFZlcnNpb24g
PSAiIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUg
ZW1wdHkgc3RyaW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdl
IGhhdmUgbWF0Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4K
LSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVu
IHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3
ZSBoYXZlLgotICAgIGlmICgoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2spICYmIG1fZXhw
ZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJz
aW9uKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMg
ZnJvbSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9w
ZW5EYXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5k
YXRhKCksCi0gICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBj
dXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZBTElEX1NUQVRF
X0VSUjsKLSAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4K
LSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gQWxsIGNoZWNrcyBwYXNzZWQgYW5kIHdlIHN0aWxsIGhhdmUgYSBo
YW5kbGUgdG8gdGhpcyBkYXRhYmFzZSBmaWxlLgotICAgIC8vIE1ha2Ugc3VyZSBEYXRhYmFzZVRo
cmVhZCBjbG9zZXMgaXQgd2hlbiBEYXRhYmFzZVRocmVhZCBnb2VzIGF3YXkuCi0gICAgbV9vcGVu
ZWQgPSB0cnVlOwotICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhy
ZWFkKCkpCi0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQo
KS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZv
aWQgRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIG5ld1ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQpAQCAt
Njg5LDggKzM0NSw3IEBAIHZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKQogICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sg
JXAgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0YXNrLmdldCgpLCB0YXNrLT50cmFuc2FjdGlvbigp
KTsKICAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNr
LnJlbGVhc2UoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNz
ID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9u
U3RlcChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHkpCkBAIC03
NjEsMTEgKzQxNiw2IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGUK
ICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAotdm9pZCBEYXRhYmFzZTo6cGVyZm9ybUNyZWF0
aW9uQ2FsbGJhY2soKQotewotICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsKLX0KLQogU1FMVHJhbnNhY3Rpb25D
bGllbnQqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25D
bGllbnQoKTsKQEAgLTc3NiwxNCArNDI2LDYgQEAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciog
RGF0YWJhc2U6OnRyYQogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFi
YXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKIH0KIAotU3RyaW5nIERhdGFi
YXNlOjp2ZXJzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9kZWxldGVkKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICBy
ZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVDb3B5KCk7Ci19
Ci0KIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKIHsKICAgICAvLyBGSVhN
RTogTm90IHVzaW5nIHRocmVhZHNhZmVDb3B5IG9uIHRoZXNlIHN0cmluZ3MgbG9va3Mgb2sgc2lu
Y2UgdGhyZWFkcyB0YWtlIHN0cmljdCB0dXJucwpAQCAtODAxLDE0ICs0NDMsNiBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikK
LXsKLSAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24udGhyZWFkc2FmZUNvcHkoKTsKLSAg
ICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KLSAgICBNdXRl
eExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1f
Z3VpZCwgdmVyc2lvbik7Ci19Ci0KIFNlY3VyaXR5T3JpZ2luKiBEYXRhYmFzZTo6c2VjdXJpdHlP
cmlnaW4oKSBjb25zdAogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKQpAQCAtODE4LDM1ICs0NTIsMTAgQEAgU2VjdXJpdHlPcmlnaW4qIERhdGFi
YXNlOjpzZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQogCi1TdHJpbmcgRGF0YWJhc2U6
OnN0cmluZ0lkZW50aWZpZXIoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBm
b3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNh
ZmVDb3B5KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAotewot
ICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkK
LSAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi11bnNpZ25l
ZCBsb25nIERhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9l
c3RpbWF0ZWRTaXplOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKK3Zv
aWQgRGF0YWJhc2U6Om5vdGlmeURhdGFiYXNlVGhyZWFkRGF0YWJhc2VPcGVuKCkKIHsKLSAgICAv
LyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAg
cmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6
aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCi17Ci0gICAgaW50NjRfdCBmcmVlU3BhY2VTaXpl
ID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7Ci0gICAgaW50NjRfdCB0b3RhbFNp
emUgPSBtX3NxbGl0ZURhdGFiYXNlLnRvdGFsU2l6ZSgpOwotICAgIGlmICh0b3RhbFNpemUgPD0g
MTAgKiBmcmVlU3BhY2VTaXplKQotICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVu
dGFsVmFjdXVtQ29tbWFuZCgpOworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRh
dGFiYXNlVGhyZWFkKCkpCisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJh
c2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjAgKzMwLDE0IEBACiAj
ZGVmaW5lIERhdGFiYXNlX2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgotI2VuZGlmCi0KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlQXV0aG9yaXpl
cjsKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7Ci1jbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNz
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uOwpAQCAtNTUsMTIyICs0OSw2NiBAQCBjbGFzcyBWb2lkQ2FsbGJhY2s7CiAK
IHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIERhdGFiYXNlIDogcHVibGljIFRo
cmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2U+IHsKK2NsYXNzIERhdGFiYXNlIDogcHVibGljIEFic3Ry
YWN0RGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldElzQXZhaWxhYmxlKGJv
b2wpOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0KLSAgICB+RGF0YWJhc2UoKTsK
KyAgICB2aXJ0dWFsIH5EYXRhYmFzZSgpOwogCiAgICAgLy8gRGlyZWN0IHN1cHBvcnQgZm9yIHRo
ZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgdHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
LAogICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjaywgYm9vbCByZWFkT25seSk7CiAKLSAgICAvLyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9y
dAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOwotCi0g
ICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOwotICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigp
OwotICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7Ci0gICAgYm9vbCBsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCk7Ci0gICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7Ci0gICAg
dm9pZCByZXNldERlbGV0ZXMoKTsKLSAgICBib29sIGhhZERlbGV0ZXMoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHRh
YmxlTmFtZXMoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7
IH0KLSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICBTUUxp
dGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9
Ci0gICAgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKLSAgICBTdHJpbmcgZGlzcGxh
eU5hbWUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsK
LSAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21E
YXRhYmFzZShTdHJpbmcmKTsKLSAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYpOwotICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwotICAg
IGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAKLSAgICB2b2lkIG1hcmtBc0RlbGV0
ZWRBbmRDbG9zZSgpOwotICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRl
ZDsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKIAogICAgIGVu
dW0gQ2xvc2VQb2xpY3kgeyBEb05vdFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQsIFJlbW92ZURh
dGFiYXNlRnJvbUNvbnRleHQgfTsKLSAgICB2b2lkIGNsb3NlKENsb3NlUG9saWN5KTsKLSAgICBi
b29sIG9wZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9Ci0KLSAgICB2b2lkIHN0b3Ao
KTsKLSAgICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3N0b3BwZWQ7IH0KLQotICAg
IGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQorICAgIHZvaWQgcGVyZm9ybUNs
b3NlKENsb3NlUG9saWN5KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpOwogCiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSgpIGNv
bnN0OwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwogCiAgICAg
Ly8gQ2FsbGVkIGZyb20gRGF0YWJhc2VUaHJlYWQsIG11c3QgYmUgcHJlcGFyZWQgdG8gd29yayBv
biB0aGUgYmFja2dyb3VuZCB0aHJlYWQKLSAgICB2b2lkIHJlc2V0QXV0aG9yaXplcigpOwogICAg
IHZvaWQgcGVyZm9ybVBvbGljeUNoZWNrcygpOwogCi0gICAgYm9vbCBwZXJmb3JtT3BlbkFuZFZl
cmlmeShFeGNlcHRpb25Db2RlJik7CisgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybUdldFRhYmxl
TmFtZXMoKTsKIAogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAg
ICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKICAg
ICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiwgYm9vbCBpbW1l
ZGlhdGVseSA9IGZhbHNlKTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5h
bWVzKCk7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRpb25DYWxsYmFjaygpOwotCiAgICAgU1FMVHJh
bnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwogCi0gICAg
dm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7Ci0KIHByaXZhdGU6CiAgICAgRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+KTsKIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEYXRhYmFzZVRocmVhZERhdGFiYXNl
T3BlbigpOworCiAgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlcHRpb25Db2RlJik7
CiAKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIAorICAgIHN0YXRpYyB2b2lkIGRl
bGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOworCiAgICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5z
YWN0aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzc011dGV4OwogICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgYm9v
bCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQ7CiAKLSAgICBzdGF0aWMgdm9pZCBkZWxpdmVy
UGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKLQotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIGludCBtX2d1aWQ7Ci0gICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0cmlu
ZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwotICAg
IFN0cmluZyBtX2ZpbGVuYW1lOwogCiAgICAgYm9vbCBtX2RlbGV0ZWQ7Ci0KLSAgICBib29sIG1f
c3RvcHBlZDsKLQotICAgIGJvb2wgbV9vcGVuZWQ7Ci0KLSAgICBib29sIG1fbmV3OwotCi0gICAg
U1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VBdXRo
b3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKLQotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRh
dGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlP
cmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9Ci0jZW5kaWYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTgsNyArMzk4LDcgQEAgaW50IERh
dGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZQogICAgIC8vICAgIGVxdWFsSWdub3Jp
bmdDYXNlKHRhYmxlTmFtZSwgInNxbGl0ZV9zZXF1ZW5jZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKICAgICAvLyAg
ICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRh
YmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKSkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBT
UUxBdXRoQWxsb3c7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gNjA1
NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDcgKzExOCw3IEBAIERhdGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNsb3NlVGFzayhE
YXQKIAogdm9pZCBEYXRhYmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFzaygpCiB7Ci0gICAgZGF0
YWJhc2UoKS0+Y2xvc2UobV9jbG9zZVBvbGljeSk7CisgICAgZGF0YWJhc2UoKS0+cGVyZm9ybUNs
b3NlKG1fY2xvc2VQb2xpY3kpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUaHJlYWQuY3BwCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lm
IEVOQUJMRShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNs
dWRlICJBdXRvZHJhaW5lZFBvb2wuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlVGFzay5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIHZvaWQqIERhdGFiYXNlVGhyZWFk
OjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5TZXRDb3B5LnN3YXAobV9vcGVuRGF0YWJh
c2VTZXQpOwogICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZW5kID0gb3BlblNldENvcHku
ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gb3BlblNldENv
cHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAoKml0KS0+Y2xvc2UoRGF0
YWJhc2U6OlJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQpOworICAgICAgICAgICAgKCppdCktPmNs
b3NlKCk7CiAgICAgfQogCiAgICAgLy8gRGV0YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNl
cyBhcmUgbm8gbG9uZ2VyIG9mIGFueSBjb25jZXJuIHRvIGFueW9uZSBlbHNlCkBAIC0xNTgsMTMg
KzE1OSwxMyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hlZHVsZUltbWVkaWF0ZVRhCiAKIGNs
YXNzIFNhbWVEYXRhYmFzZVByZWRpY2F0ZSB7CiBwdWJsaWM6Ci0gICAgU2FtZURhdGFiYXNlUHJl
ZGljYXRlKGNvbnN0IERhdGFiYXNlKiBkYXRhYmFzZSkgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKSB7
IH0KKyAgICBTYW1lRGF0YWJhc2VQcmVkaWNhdGUoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0
YWJhc2UpIDogbV9kYXRhYmFzZShkYXRhYmFzZSkgeyB9CiAgICAgYm9vbCBvcGVyYXRvcigpKERh
dGFiYXNlVGFzayogdGFzaykgY29uc3QgeyByZXR1cm4gdGFzay0+ZGF0YWJhc2UoKSA9PSBtX2Rh
dGFiYXNlOyB9CiBwcml2YXRlOgotICAgIGNvbnN0IERhdGFiYXNlKiBtX2RhdGFiYXNlOworICAg
IGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIG1fZGF0YWJhc2U7CiB9OwogCi12b2lkIERhdGFiYXNl
VGhyZWFkOjp1bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lk
IERhdGFiYXNlVGhyZWFkOjp1bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhBYnN0cmFjdERhdGFiYXNl
KiBkYXRhYmFzZSkKIHsKICAgICAvLyBOb3RlIHRoYXQgdGhlIHRocmVhZCBsb29wIGlzIHJ1bm5p
bmcsIHNvIHNvbWUgdGFza3MgZm9yIHRoZSBkYXRhYmFzZQogICAgIC8vIG1heSBzdGlsbCBiZSBl
eGVjdXRlZC4gVGhpcyBpcyB1bmF2b2lkYWJsZS4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVh
ZC5oCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRGF0YWJh
c2VUYXNrOwogY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwpAQCAtNTksNyArNjAsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFz
az4pOwogICAgIHZvaWQgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VU
YXNrPik7IC8vIFRoaXMganVzdCBhZGRzIHRoZSB0YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVl
dWUgLSB0aGUgY2FsbGVyIG5lZWRzIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIG5vdCB0byBjcmVh
dGUgZGVhZGxvY2tzIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbi4KLSAgICB2b2lkIHVuc2No
ZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKik7CisgICAgdm9pZCB1bnNjaGVkdWxlRGF0YWJh
c2VUYXNrcyhBYnN0cmFjdERhdGFiYXNlKik7CiAKICAgICB2b2lkIHJlY29yZERhdGFiYXNlT3Bl
bihEYXRhYmFzZSopOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsK
QEAgLTgxLDYgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNr
PiBtX3F1ZXVlOwogCiAgICAgLy8gVGhpcyBzZXQga2VlcHMgdHJhY2sgb2YgdGhlIG9wZW4gZGF0
YWJhc2VzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgb24gdGhpcyB0aHJlYWQuCisgICAgLy8gT25seSBh
c3luYyBEQnMgc2hvdWxkIHVzZSB0aGlzIHRocmVhZC4KICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVm
UHRyPERhdGFiYXNlPiA+IERhdGFiYXNlU2V0OwogICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFi
YXNlU2V0OwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24g
NjA1NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsOSArMzEsOSBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
aHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCkBAIC0yMTksNyArMjE5LDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0Vu
dHJ5Rm9yRGF0YWJhcwogICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgpID09IFNRTFJlc3VsdFJv
dzsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZv
ckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlKiBkYXRhYmFzZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBE
YXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFi
YXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElE
KCkpOwogICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIGEgZGF0YWJhc2UgaXMgdGhlIGZ1bGwg
cXVvdGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHRoZSBjdXJyZW50IHVzYWdlIHdpdGhpbiB0aGUg
b3JpZ2luLApAQCAtMjMwLDcgKzIzMCw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRy
YWNrZXI6OmdldE0KICAgICByZXR1cm4gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSAtIG9y
aWdpblF1b3RhTWFuYWdlcigpLmRpc2tVc2FnZShvcmlnaW4pICsgU1FMaXRlRmlsZVN5c3RlbTo6
Z2V0RGF0YWJhc2VGaWxlU2l6ZShkYXRhYmFzZS0+ZmlsZU5hbWUoKSk7CiB9CiAKLXZvaWQgRGF0
YWJhc2VUcmFja2VyOjpkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBE
YXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFz
ZSkKIHsKICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIo
b3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLm1hcmtEYXRh
YmFzZShkYXRhYmFzZSk7CkBAIC00NzksNyArNDc5LDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIERh
dGFiYXNlVHJhY2tlcjo6dXNhZwogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRh
YmFzZUZpbGVTaXplKHBhdGgpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRh
dGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVu
RGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgaWYgKCFkYXRhYmFz
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjphZGRPcGVuRGF0YWJhc2UoRGEKICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShkYXRhYmFz
ZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiB9CiAK
LXZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFi
YXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERh
dGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICByZXR1cm47
CkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRh
YmFzZQogICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihkYXRhYmFzZS0+c2Vj
dXJpdHlPcmlnaW4oKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJh
c2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxS
ZWZQdHI8RGF0YWJhc2U+ID4qIGRhdGFiYXNlcykKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRP
cGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
SGFzaFNldDxSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKQogewogICAgIE11
dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CiAg
ICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKQEAgLTk3Myw3ICs5NzMsNyBAQCBib29sIERhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgfQogI2VuZGlmCiAKLSAgICBWZWN0
b3I8UmVmUHRyPERhdGFiYXNlPiA+IGRlbGV0ZWREYXRhYmFzZXM7CisgICAgVmVjdG9yPFJlZlB0
cjxBYnN0cmFjdERhdGFiYXNlPiA+IGRlbGV0ZWREYXRhYmFzZXM7CiAKICAgICAvLyBNYWtlIHN1
cmUgbm90IHRvIGhvbGQgdGhlIGFueSBsb2NrcyB3aGVuIGNhbGxpbmcKICAgICAvLyBEYXRhYmFz
ZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCksIHNpbmNlIHRoYXQgY2FuIGNhdXNlIGEgZGVhZGxv
Y2sKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlzaW9uIDYwNTU2KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2U7CitjbGFz
cyBBYnN0cmFjdERhdGFiYXNlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNz
IFNlY3VyaXR5T3JpZ2luOwogCkBAIC03MCwxNyArNzAsMTcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwog
ICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAKLSAgICB2b2lk
IGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNl
KERhdGFiYXNlKik7Ci0gICAgdm9pZCBnZXRPcGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID4qIGRh
dGFiYXNlcyk7CisgICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwor
ICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lk
IGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpOwogCi0g
ICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFz
ZSopOwotICAgIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNlKik7CisgICAgdW5zaWduZWQg
bG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKik7
CisgICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoQWJzdHJhY3REYXRhYmFzZSopOwogCiBwcml2YXRl
OgogICAgIERhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAKLSAg
ICB0eXBlZGVmIEhhc2hTZXQ8RGF0YWJhc2UqPiBEYXRhYmFzZVNldDsKKyAgICB0eXBlZGVmIEhh
c2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0OwogICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VOYW1lTWFwOwogICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBEYXRhYmFzZU5hbWVNYXAqLCBTZWN1cml0eU9y
aWdpbkhhc2g+IERhdGFiYXNlT3JpZ2luTWFwOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvT3Jp
Z2luUXVvdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvT3Jp
Z2luUXVvdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJB
YnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiT3JpZ2luVXNhZ2VSZWNvcmQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgT3JpZ2luUXVvdGFNYW5h
Z2VyOjpyZW1vdmVPcmlnaW4oU2UKICAgICB9CiB9CiAKLXZvaWQgT3JpZ2luUXVvdGFNYW5hZ2Vy
OjptYXJrRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBPcmlnaW5RdW90YU1hbmFn
ZXI6Om1hcmtEYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NF
UlQoZGF0YWJhc2UpOwogICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuaAkocmV2aXNpb24gNjA1NTYpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsKK2Ns
YXNzIEFic3RyYWN0RGF0YWJhc2U7CiBjbGFzcyBPcmlnaW5Vc2FnZVJlY29yZDsKIAogY2xhc3Mg
T3JpZ2luUXVvdGFNYW5hZ2VyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTU1LDcgKzU1LDcg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CiAgICAgdm9pZCByZW1vdmVPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qKTsKIAotICAgIHZvaWQgbWFya0RhdGFiYXNlKERhdGFiYXNlKik7IC8vIE1h
cmsgZGlydGluZXNzIG9mIGEgc3BlY2lmaWMgZGF0YWJhc2UuCisgICAgdm9pZCBtYXJrRGF0YWJh
c2UoQWJzdHJhY3REYXRhYmFzZSopOyAvLyBNYXJrIGRpcnRpbmVzcyBvZiBhIHNwZWNpZmljIGRh
dGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UoU2VjdXJpdHlPcmlnaW4q
KSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRh
YmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL2No
cm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJRdW90YVRyYWNrZXIuaCIKQEAgLTcy
LDcgKzcyLDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAg
IHJldHVybiBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi8iICsgbmFtZSArICIjIjsK
IH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0
YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0
YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFi
YXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKQEAgLTk5LDcgKzk5LDcgQEAgdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYQogCiBjbGFzcyBUcmFja2VyUmVt
b3ZlT3BlbkRhdGFiYXNlVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUcmFja2VyUmVtb3ZlT3BlbkRhdGFi
YXNlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPFRyYWNrZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKICAgICB7CiAgICAgICAgIHJldHVybiBu
ZXcgVHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2soZGF0YWJhc2UpOwogICAgIH0KQEAgLTEx
MCwxNSArMTEwLDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVHJhY2tlclJl
bW92ZU9wZW5EYXRhYmFzZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAg
VHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNl
PiBkYXRhYmFzZSkKICAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQogICAgIHsKICAgICB9
CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPEFic3RyYWN0
RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiB9OwogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3Zl
T3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpy
ZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgaWYg
KCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSkg
ewogICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhU
cmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7CkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZQogfQog
CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID4q
IGRhdGFiYXNlcykKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8QWJz
dHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKQogewogICAgIE11dGV4TG9ja2VyIG9wZW5EYXRh
YmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CiAgICAgaWYgKCFtX29wZW5EYXRh
YmFzZU1hcCkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3Bl
bkRhdGFiYXNlcyhTCiAgICAgICAgIGRhdGFiYXNlcy0+YWRkKCppdCk7CiB9CiAKLXVuc2lnbmVk
IGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBE
YXRhYmFzZSogZGF0YWJhc2UpCit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpn
ZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7
CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUgPSAwOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw3ICsyNzEsNyBAQCBOb3RpZmljYXRpb25DZW50
ZXIqIFdvcmtlckNvbnRleHQ6OndlYmtpCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogUGFzc1JlZlB0
cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFzZWN1cml0eU9y
aWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8ICFEYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkg
eworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSB8fCAhQWJz
dHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2
MDU1OCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNiBAQAorMjAxMC0wNi0wMiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZsYWcgdGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91
bGQgYmUgZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBzcmMvV2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJEYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZUltbWVkaWF0ZWx5KToKKyAgICAgICAg
KiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGlt
ZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVG
ZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQpOgorCiAyMDEwLTA2LTAyICBTdGVybGluZyBTd2ln
YXJ0ICA8c3N3aWdhcnRAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBM
ZXZpbi4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MDU1
NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsMTcgKzExMCwxMyBAQCB2b2lkIFdlYkRhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVNp
emUoCiAKIHZvaWQgV2ViRGF0YWJhc2U6OmNsb3NlRGF0YWJhc2VJbW1lZGlhdGVseShjb25zdCBX
ZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgZGF0YWJhc2VOYW1l
KQogewotICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+IGRhdGFiYXNlSGFuZGxlczsKKyAg
ICBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+IGRhdGFiYXNlSGFuZGxlczsKICAg
ICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5QcnAoV2ViU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikpOwogICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gb3JpZ2luUHJwOwogICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmdldE9wZW5EYXRhYmFzZXMob3JpZ2luLmdldCgpLCBkYXRhYmFzZU5h
bWUsICZkYXRhYmFzZUhhbmRsZXMpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+
ID46Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VIYW5kbGVzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
SGFuZGxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBpdC0+
Z2V0KCk7Ci0gICAgICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVhZCA9IGRhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgICAgIGlm
IChkYXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVk
KCkpIHsKLSAgICAgICAgICAgIGRhdGFiYXNlLT5zdG9wKCk7Ci0gICAgICAgICAgICBkYXRhYmFz
ZVRocmVhZC0+c2NoZWR1bGVUYXNrKERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUoZGF0YWJhc2Us
IERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCAwKSk7Ci0gICAgICAgIH0KKyAg
ICBmb3IgKEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID46Oml0ZXJhdG9yIGl0ID0g
ZGF0YWJhc2VIYW5kbGVzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlSGFuZGxlcy5lbmQoKTsgKytp
dCkgeworICAgICAgICBpdC0+Z2V0KCktPnN0b3AoKTsKKyAgICAgICAgaXQtPmdldCgpLT5jbG9z
ZSgpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVh
dHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZl
YXR1cmVzLmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1
bnRpbWVGZWF0dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKIAotI2luY2x1
ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllckNsaWVu
dEltcGwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTQzLDE0ICs0MywxNCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZShi
b29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2U6OnNldElz
QXZhaWxhYmxlKGVuYWJsZSk7CisgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUo
ZW5hYmxlKTsKICNlbmRpZgogfQogCiBib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFz
ZUVuYWJsZWQoKQogewogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICByZXR1cm4gRGF0YWJhc2U6
OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxl
KCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDYw
NTU4KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAxMC0wNi0wMiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0
aGUgbG9jYXRpb24gb2YgdGhlIGZsYWcgdGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91bGQgYmUg
ZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5MDQxCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfdXBkYXRlX3NldHRpbmdzKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19zZXR0aW5nc19ub3RpZnkpOgorICAgICAgICAod2Via2l0X2dldF9jYWNoZV9tb2RlbCk6CisK
IDIwMTAtMDYtMDEgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAid2Via2l0
d2ViYmFja2ZvcndhcmRsaXN0LmgiCiAjaW5jbHVkZSAid2Via2l0d2ViaGlzdG9yeWl0ZW0uaCIK
IAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKQEAg
LTQ5LDcgKzUwLDYgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJDb250ZXh0TWVudS5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgogI2luY2x1ZGUgIkRyYWdDbGllbnRHdGsuaCIKQEAgLTI3MzAsNyArMjczMCw3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld191cGRhdGVfc2V0dGkKICAgICBzZXR0aW5ncy0+c2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFibGVQcml2YXRlQnJvd3NpbmcpOwogICAgIHNldHRpbmdz
LT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChlbmFibGVDYXJldEJyb3dzaW5nKTsKICNpZiBFTkFC
TEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0
YWJhc2UpOworICAgIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1
RGF0YWJhc2UpOwogI2VuZGlmCiAgICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQo
ZW5hYmxlSFRNTDVMb2NhbFN0b3JhZ2UpOwogICAgIHNldHRpbmdzLT5zZXRYU1NBdWRpdG9yRW5h
YmxlZChlbmFibGVYU1NBdWRpdG9yKTsKQEAgLTI4MjMsNyArMjgyMyw3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3QKICAgICAgICAgc2V0dGluZ3MtPnNldENhcmV0
QnJvd3NpbmdFbmFibGVkKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogICAgIGVsc2UgaWYgKG5hbWUgPT0gZ19pbnRlcm5fc3RyaW5nKCJlbmFibGUt
aHRtbDUtZGF0YWJhc2UiKSkgewotICAgICAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZ192
YWx1ZV9nZXRfYm9vbGVhbigmdmFsdWUpKTsKKyAgICAgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0
SXNBdmFpbGFibGUoZ192YWx1ZV9nZXRfYm9vbGVhbigmdmFsdWUpKTsKICAgICB9CiAjZW5kaWYK
ICAgICBlbHNlIGlmIChuYW1lID09IGdfaW50ZXJuX3N0cmluZygiZW5hYmxlLWh0bWw1LWxvY2Fs
LXN0b3JhZ2UiKSkKQEAgLTQ0NTAsNCArNDQ1MCwzIEBAIFdlYktpdENhY2hlTW9kZWwgd2Via2l0
X2dldF9jYWNoZV9tb2RlbCgKICAgICB3ZWJraXRfaW5pdCgpOwogICAgIHJldHVybiBjYWNoZU1v
ZGVsOwogfQotCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjA1NTgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTAyICBEdW1pdHJ1IERh
bmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmxhZyB0aGF0
IGRldGVybWluZXMgaWYgREJzIHNob3VsZCBiZSBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZp
Y2F0aW9uOl0pOgorCiAyMDEwLTA2LTAyICBTdGVybGluZyBTd2lnYXJ0ICA8c3N3aWdhcnRAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxMyBAQAogI2ltcG9ydCA8Rm91
bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQWJzdHJhY3REYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0N1cnNvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9EYXRhYmFzZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgpAQCAtMTM1Niw3ICsxMzU2LDcgQEAgLSAo
dm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOgogICAgIHNldHRpbmdzLT5zZXRN
aW5pbXVtTG9naWNhbEZvbnRTaXplKFtwcmVmZXJlbmNlcyBtaW5pbXVtTG9naWNhbEZvbnRTaXpl
XSk7CiAgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKFtwcmVmZXJlbmNlcyBhcmVQbHVn
SW5zRW5hYmxlZF0pOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZTo6c2V0SXNB
dmFpbGFibGUoW3ByZWZlcmVuY2VzIGRhdGFiYXNlc0VuYWJsZWRdKTsKKyAgICBBYnN0cmFjdERh
dGFiYXNlOjpzZXRJc0F2YWlsYWJsZShbcHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxlZF0pOwog
I2VuZGlmCiAgICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoW3ByZWZlcmVuY2Vz
IGxvY2FsU3RvcmFnZUVuYWJsZWRdKTsKICAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVudGFsTm90
aWZpY2F0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNF
bmFibGVkXSk7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNTU4KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTAyICBEdW1pdHJ1IERhbmls
aXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmxhZyB0aGF0IGRl
dGVybWluZXMgaWYgREJzIHNob3VsZCBiZSBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIEFwaS9xd2Vic2V0
dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkpOgorCiAyMDEw
LTA2LTAxICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYktp
dC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3
ZWJzZXR0aW5ncy5jcHAJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsyNCw5IEBACiAjaW5jbHVkZSAicXdl
YnBhZ2VfcC5oIgogI2luY2x1ZGUgInF3ZWJwbHVnaW5kYXRhYmFzZV9wLmgiCiAKKyNpbmNsdWRl
ICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNh
Y2hlLmgiCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBRV2ViU2V0dGluZ3NQcml2YXRlOjphcHBs
eSgpCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFs
dWUoUVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVlKFFX
ZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpKTsKLSAgICAgICAgV2Vi
Q29yZTo6RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKHZhbHVlKTsKKyAgICAgICAgV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUodmFsdWUpOwogI2VuZGlmCiAKICAgICAg
ICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkLApJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNTU4KQorKysgV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0wMiAg
RHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhl
IGZsYWcgdGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAg
KiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdl
ZCk6CisKIDIwMTAtMDUtMzAgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGF0dGVtcHQgdG8gZml4IHRoZSBidWlsZCBhZnRlciBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC82MDQxOC4KSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNjA1NTYp
CisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3
IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Fic3RyYWN0RGF0YWJhc2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CkBAIC03Myw3
ICs3NCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2VXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1
cnNvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KQEAgLTQ3MDksNyArNDcwOSw3IEBAIEhSRVNVTFQgV2Vi
Vmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2UKICAgICBociA9IHByZWZzUHJpdmF0ZS0+ZGF0
YWJhc2VzRW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJl
dHVybiBocjsKLSAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CisgICAgQWJz
dHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CiAjZW5kaWYKIAogICAgIGhy
ID0gcHJlZnNQcml2YXRlLT5sb2NhbFN0b3JhZ2VFbmFibGVkKCZlbmFibGVkKTsKSW5kZXg6IFdl
YktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2
aXNpb24gNjA1NTgpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDYtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cGRhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmbGFnIHRoYXQgZGV0ZXJtaW5lcyBpZiBEQnMgc2hv
dWxkIGJlIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zOTA0MQorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgICh3eFdlYlZp
ZXc6OlNldERhdGFiYXNlc0VuYWJsZWQpOgorICAgICAgICAod3hXZWJWaWV3OjpBcmVEYXRhYmFz
ZXNFbmFibGVkKToKKwogMjAxMC0wNS0yNyAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xs
aXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIEJ1aWxkIGZpeGVzIGZvciBXaW5kb3dzIGFmdGVy
IHJlY2VudCBjaGFuZ2VzLgpJbmRleDogV2ViS2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93eC9XZWJWaWV3LmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJLaXQvd3gv
V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCiAjZW5kaWYKIApAQCAtOTk1LDcgKzk5NSw3IEBAIHd4U3RyaW5nIHd4V2Vi
Vmlldzo6R2V0RGF0YWJhc2VEaXJlY3RvcnkKIHZvaWQgd3hXZWJWaWV3OjpTZXREYXRhYmFzZXNF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgV2ViQ29y
ZTo6RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZWQpOworICAgIFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZWQpOwogI2VuZGlmCiB9CiAKQEAgLTEw
MDMsNyArMTAwMyw3IEBAIHZvaWQgd3hXZWJWaWV3OjpTZXREYXRhYmFzZXNFbmFibGVkKGJvb2wK
IGJvb2wgd3hXZWJWaWV3OjpBcmVEYXRhYmFzZXNFbmFibGVkKCkKIHsKICNpZiBFTkFCTEUoREFU
QUJBU0UpCi0gICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlOjppc0F2YWlsYWJsZSgpOworICAg
IHJldHVybiBXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGZhbHNlOwogfQo=
</data>
<flag name="commit-queue"
          id="42279"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57644</attachid>
            <date>2010-06-02 04:31:50 -0700</date>
            <delta_ts>2010-06-02 16:05:23 -0700</delta_ts>
            <desc>patch #3: Move the reusable code from Database to AbstractDatabase</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>75804</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDU1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDYtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIHRoZSBjb2RlIHRoYXQgd2lsbCBiZSByZXVzZWQgYnkgRGF0YWJhc2VTeW5jIGZyb20g
RGF0YWJhc2UgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVu
YWJsZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VTeW5jRW5hYmxlZCk6CisgICAgICAg
ICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgICog
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z3VpZEZvck9yaWdpbkFuZE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z3VpZE11dGV4KToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb1Zl
cnNpb25NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlR3VpZFZlcnNpb25NYXApOgorICAg
ICAgICAoV2ViQ29yZTo6ZGF0YWJhc2VWZXJzaW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
dHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0
VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNl
dElzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZh
aWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZv
VGFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c3RvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpoYWREZWxldGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hl
c0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVj
dGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpub3RpZnlE
YXRhYmFzZVRocmVhZERhdGFiYXNlT3Blbik6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERh
dGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZWN1cml0eU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNxbGl0ZURh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50
aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpvcGVuZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6c3RvcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkZWxldGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlRGVidWdOYW1l
KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZl
cmlmeVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlv
bkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtQ2xvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
Ojpub3RpZnlEYXRhYmFzZVRocmVhZERhdGFiYXNlT3Blbik6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5hbWUp
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQ2xvc2VUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpkYXRh
YmFzZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTYW1lRGF0YWJhc2VQcmVkaWNhdGU6OlNh
bWVEYXRhYmFzZVByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6
dW5zY2hlZHVsZURhdGFiYXNlVGFza3MpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJh
c2UpOgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICog
c3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYWNrZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNrOjpUcmFja2VyUmVtb3ZlT3BlbkRh
dGFiYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9w
ZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5E
YXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXpl
Rm9yRGF0YWJhc2UpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOgorCiAyMDEwLTA2LTAy
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
dXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOCArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
RGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2lu
Y2x1ZGUgIldlYlNvY2tldC5oIgpAQCAtOTUsMTIgKzk0LDEyIEBAIGJvb2wgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6d2ViU29ja2V0RW4KICNpZiBFTkFCTEUoREFUQUJBU0UpCiBib29sIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZUVuYWJsZWQoKQogewotICAgIHJldHVybiBE
YXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6aXNB
dmFpbGFibGUoKTsKIH0KIAogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJh
c2VTeW5jRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlU3luYzo6aXNBdmFpbGFibGUo
KTsKKyAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKIH0KICNlbmRp
ZgogCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24g
NjA1NTYpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAj
aWYgRU5BQkxFKEZJTEVfUkVBREVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCkBAIC0xMDksNyAr
MTA5LDcgQEAgRGF0YWJhc2VUaHJlYWQqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OgogICAgIHJl
dHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFz
ZSkKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwogICAgIGlmICghbV9vcGVuRGF0
YWJhc2VTZXQpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjphZGRPcGVuRGF0YQogICAgIG1fb3BlbkRhdGFiYXNlU2V0LT5hZGQoZGF0YWJhc2UpOwogfQog
Ci12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFz
ZSogZGF0YWJhc2UpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRh
YmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX29wZW5EYXRhYmFzZVNldCAmJiBtX29wZW5EYXRhYmFz
ZVNldC0+Y29udGFpbnMoZGF0YWJhc2UpKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEFjdGl2ZURPTU9iamVjdDsKICNpZiBFTkFCTEUoREFUQUJBU0Up
Ci0gICAgY2xhc3MgRGF0YWJhc2U7CisgICAgY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKICAgICBj
bGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7CiAgICAgY2xhc3MgRGF0YWJhc2VUaHJlYWQ7
CiAjZW5kaWYKQEAgLTcwLDggKzcwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBE
YXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsKICAgICAgICAgdm9pZCBzZXRIYXNPcGVu
RGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9CiAgICAgICAgIGJvb2wg
aGFzT3BlbkRhdGFiYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQot
ICAgICAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgICAgICB2b2lkIHJl
bW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSopOworICAgICAgICB2b2lkIGFkZE9wZW5EYXRhYmFz
ZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFi
c3RyYWN0RGF0YWJhc2UqKTsKICAgICAgICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBp
cyBkb25lLCBjbGVhbnVwU3luYyB3aWxsIGJlIHNpZ25hbGxlZC4KICAgICAgICAgdm9pZCBzdG9w
RGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogI2VuZGlmCkBAIC0xNjAsNyAr
MTYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAg
ICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX2RhdGFiYXNlVGhyZWFkOwogICAgICAgICBib29s
IG1faGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFsc2Us
IGV2ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCi0gICAgICAgIHR5cGVk
ZWYgSGFzaFNldDxEYXRhYmFzZSogPiBEYXRhYmFzZVNldDsKKyAgICAgICAgdHlwZWRlZiBIYXNo
U2V0PEFic3RyYWN0RGF0YWJhc2UqID4gRGF0YWJhc2VTZXQ7CiAgICAgICAgIE93blB0cjxEYXRh
YmFzZVNldD4gbV9vcGVuRGF0YWJhc2VTZXQ7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9zdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
QWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDM5MyBAQAog
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNp
bmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5B
bmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
U3RyaW5nIHN0cmluZ0lEOworICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKKyAgICAgICAg
c3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5nSUQgPSBv
cmlnaW4gKyAiLyIgKyBuYW1lOworCisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2Ug
QXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZSB0aGlzCisgICAgLy8gZnVu
Y3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVh
ZCBvciB0aGUgd29ya2VyJ3MKKyAgICAvLyBjb250ZXh0IHRocmVhZCBiZWZvcmUgYW55IG90aGVy
IHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChNdXRleCwgc3RyaW5nSWRlbnRpZmllck11dGV4LCAoKSk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHN0cmluZ0lkZW50aWZpZXJNdXRleCk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgaW50PiBJREd1aWRNYXA7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRN
YXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKKyAgICBpbnQgZ3VpZCA9IHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKKyAgICBpZiAoIWd1aWQpIHsKKyAg
ICAgICAgc3RhdGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7CisgICAgICAgIGd1aWQgPSBjdXJy
ZW50TmV3R1VJRCsrOworICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJp
bmdJRCwgZ3VpZCk7CisgICAgfQorCisgICAgcmV0dXJuIGd1aWQ7Cit9CisKK3N0YXRpYyBNdXRl
eCYgZ3VpZE11dGV4KCkKK3sKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlIHRoaXMKKyAgICAvLyBmdW5jdGlv
biBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkIG9y
IHRoZSB3b3JrZXIncworICAgIC8vIGNvbnRleHQgdGhyZWFkIGJlZm9yZSBhbnkgb3RoZXIgdGhy
ZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30KKwordHlwZWRl
ZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVyc2lv
bk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlk
VmVyc2lvbk1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworLy8gTk9URTogQ2Fs
bGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlk
VmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCit7CisgICAgLy8gRW5zdXJl
IHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9j
aygpKTsKKworICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJp
bmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KKyAgICAvLyBUaGF0J3MgYmVjYXVz
ZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJl
YWQuCisgICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0
cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAorICAgIC8vIHRocmVhZCwgYnV0IHdlIG5l
ZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUu
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhh
dmUgdG8gcHJvZ3JhbSB3aXRoLgorCisgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0
cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3Vp
ZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2Fm
ZUNvcHkoKSk7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFz
ZVZlcnNpb25LZXkiKSk7CisgICAgcmV0dXJuIGtleTsKK30KKworc3RhdGljIGJvb2wgcmV0cmll
dmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChkYiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgp
OworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1Io
IkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20g
ZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICByZXN1bHRTdHJpbmcg
PSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgTE9HX0VSUk9S
KCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVz
dWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVw
YXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKworICAgIHJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBp
biBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlzRGF0
YWJhc2VBdmFpbGFibGUgPSB0cnVlOworCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZh
aWxhYmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAgIGlzRGF0YWJhc2VBdmFpbGFibGUgPSBhdmFp
bGFibGU7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKQoreworICAg
IHJldHVybiBpc0RhdGFiYXNlQXZhaWxhYmxlOworfQorCitBYnN0cmFjdERhdGFiYXNlOjpBYnN0
cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNh
bGxiYWNrKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBt
X25hbWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9leHBlY3RlZFZlcnNpb24o
ZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2Rpc3BsYXlOYW1l
KGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2VzdGltYXRlZFNpemUo
ZXN0aW1hdGVkU2l6ZSkKKyAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjcmVhdGlvbkNhbGxiYWNr
KQorICAgICwgbV9ndWlkKDApCisgICAgLCBtX25ldyhmYWxzZSkKKyAgICAsIG1fb3BlbmVkKGZh
bHNlKQorICAgICwgbV9zdG9wcGVkKGZhbHNlKQorICAgICwgbV9kZWxldGVkKGZhbHNlKQorICAg
ICwgbV9kYXRhYmFzZUF1dGhvcml6ZXIoRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoKSkKK3sK
KyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKKyAgICBtX2NvbnRl
eHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKTsKKworICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCisgICAgICAgIG1fbmFtZSA9
ICIiOworCisgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSwgbmFtZSk7CisKKyAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUp
OworCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMp
OworICAgIGNvbnRleHQtPmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKK30KKworQWJzdHJhY3REYXRh
YmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQoreworfQorCitjb25zdCBTdHJpbmcmIEFic3RyYWN0
RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIG5hbWUsICgiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOworICAg
IHJldHVybiBuYW1lOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpIGNv
bnN0Cit7CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgcmV0dXJuIGd1aWRUb1ZlcnNp
b25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29weSgpOworfQorCit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnN0b3AoKQoreworICAgIG1fc3RvcHBlZCA9IHRydWU7Cit9CisKKy8vIElmIHdl
IHNsZWVwIGZvciBtb3JlIHRoZSAzMCBzZWNvbmRzIHdoaWxlIGJsb2NrZWQgb24gU1FMSVRFX0JV
U1ksIGdpdmUgdXAuCitzdGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMw
MDAwOworCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5vcGVuKG1fZmlsZW5h
bWUsIHRydWUpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gZGF0YWJhc2Ug
YXQgcGF0aCAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgh
bV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkKKyAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBvbiBpbmNyZW1lbnRhbCBhdXRvLXZhY3V1bSBmb3Ig
ZGF0YWJhc2UgJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVy
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1l
b3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7CisKKyAgICBTdHJpbmcgY3VycmVudFZlcnNpb247
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworCisgICAg
ICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5m
aW5kKG1fZ3VpZCk7CisgICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5k
KCkpIHsKKyAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNl
ZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KKyAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0g
ZW50cnktPnNlY29uZC5pc051bGwoKSA/IFN0cmluZygiIikgOiBlbnRyeS0+c2Vjb25kOworICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlk
ICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIk5vIGNhY2hlZCB2ZXJz
aW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKKworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLnRhYmxlRXhpc3RzKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkgeworICAgICAgICAg
ICAgICAgIG1fbmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1l
KCkgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05G
TElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsK
KyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxlICVz
IGluIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRhKCks
IGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0
aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3Nx
bGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2V0
VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMi
LCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5k
bGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFz
ZS5jbG9zZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRh
dGFiYXNlICVzIiwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdO
YW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwg
IW1fY3JlYXRpb25DYWxsYmFjaykgeworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
U2V0dGluZyB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCIs
IG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNl
KG1fZXhwZWN0ZWRWZXJzaW9uKSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyIsIG1fZXhwZWN0ZWRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAg
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7CisgICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBz
ZXQiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY3VycmVu
dFZlcnNpb24gPSAiIjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBp
c24ndCB0aGUgZW1wdHkgc3RyaW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2
ZXJzaW9uIHdlIGhhdmUgbWF0Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4
Y2VwdGlvbi4KKyAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3Ry
aW5nLCB0aGVuIHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBk
YXRhYmFzZSB3ZSBoYXZlLgorICAgIGlmICgoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2sp
ICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1
cnJlbnRWZXJzaW9uKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZl
cnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFt
ZSAlcyAtIG9wZW5EYXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24u
YXNjaWkoKS5kYXRhKCksCisgICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCku
ZGF0YSgpLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CisgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFi
YXNlIGZpbGUuCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFsbCBjaGVja3MgcGFzc2VkIGFuZCB3ZSBzdGls
bCBoYXZlIGEgaGFuZGxlIHRvIHRoaXMgZGF0YWJhc2UgZmlsZS4KKyAgICAvLyBNYWtlIHN1cmUg
RGF0YWJhc2VUaHJlYWQgY2xvc2VzIGl0IHdoZW4gRGF0YWJhc2VUaHJlYWQgZ29lcyBhd2F5Lgor
ICAgIG1fb3BlbmVkID0gdHJ1ZTsKKyAgICBub3RpZnlEYXRhYmFzZVRocmVhZERhdGFiYXNlT3Bl
bigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlz
YWJsZUF1dGhvcml6ZXIoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Cisg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjplbmFibGVBdXRob3JpemVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKK30KKwordm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQoreworICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRP
bmx5KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKK3sK
KyAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCisgICAgICAgIG1fZGF0YWJhc2VBdXRob3Jp
emVyLT5yZXNldCgpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAg
cmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7
Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1
dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXNldERlbGV0ZXMoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7
CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOworfQorCitib29sIEFi
c3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0
aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5oYWREZWxldGVzKCk7
Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgp
Cit7CisgICAgaW50NjRfdCBmcmVlU3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3Bh
Y2VTaXplKCk7CisgICAgaW50NjRfdCB0b3RhbFNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLnRvdGFs
U2l6ZSgpOworICAgIGlmICh0b3RhbFNpemUgPD0gMTAgKiBmcmVlU3BhY2VTaXplKQorICAgICAg
ICBtX3NxbGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOworfQorCiti
b29sIEFic3RyYWN0RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJz
aW9uKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnks
ICgiU0VMRUNUIHZhbHVlIEZST00gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVS
RSBrZXkgPSAnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsgIic7IikpOworCisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVU
ZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50
aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0
YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+ZW5hYmxlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0
RGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sK
KyAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhl
IGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvCisgICAgLy8gdGhl
IFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVu
dCAoc2VlIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBzZXRWZXJzaW9uUXVlcnksICgiSU5TRVJUIElOVE8gIiArIGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpICsgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRhdGFiYXNlVmVyc2lvbktl
eSgpICsgIicsID8pOyIpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7
CisKKyAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRh
YmFzZSwgc2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBp
biBkYXRhYmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgc2V0VmVyc2lvblF1ZXJ5
LmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lv
bk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2V4cGVjdGVkVmVyc2lvbi5p
c0VtcHR5KCkpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fZXhwZWN0ZWRWZXJzaW9uID09IGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQo
bV9ndWlkKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAg
IG1fZXhwZWN0ZWRWZXJzaW9uID0gdmVyc2lvbi50aHJlYWRzYWZlQ29weSgpOworCisgICAgLy8g
VXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQs
IHZlcnNpb24pOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6Om5vdGlmeURhdGFiYXNlVGhy
ZWFkRGF0YWJhc2VPcGVuKCkKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5o
CShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCw5OCBAQAogI2RlZmluZSBBYnN0cmFjdERhdGFi
YXNlX2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQWJzdHJhY3REYXRhYmFzZSB7CitjbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7CitjbGFz
cyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNz
IFNlY3VyaXR5T3JpZ2luOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBB
YnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFz
ZT4geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNldElzQXZhaWxhYmxlKGJvb2wpOworICAg
IHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFi
YXNlKCk7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7
CisKKyAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworICAgIHZpcnR1YWwgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJp
dHlPcmlnaW4uZ2V0KCk7IH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpOyB9CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9z
cWxpdGVEYXRhYmFzZTsgfQorCisgICAgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHkoKTsgfQorICAgIFN0cmluZyBkaXNwbGF5TmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsgfQorICAg
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVk
U2l6ZTsgfQorICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWUu
dGhyZWFkc2FmZUNvcHkoKTsgfQorICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25l
dzsgfQorICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KKyAgICBi
b29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3N0b3BwZWQ7IH0KKyAgICBib29sIGRlbGV0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOworCisgICAgYm9vbCBwZXJmb3JtT3Bl
bkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1DcmVh
dGlvbkNhbGxiYWNrKCkgPSAwOworCisgICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOworICAg
IHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5
KCk7CisgICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKKyAgICBib29sIGxhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UoKTsKKyAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKKyAgICB2b2lk
IHJlc2V0RGVsZXRlcygpOworICAgIGJvb2wgaGFkRGVsZXRlcygpOworCisgICAgdm9pZCBpbmNy
ZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKKyAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJh
c2UoU3RyaW5nJik7CisgICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcm
KTsKKyAgICBib29sIHZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJr
QXNEZWxldGVkQW5kQ2xvc2UoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBBYnN0cmFjdERhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+KTsKKworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEYXRhYmFzZVRocmVh
ZERhdGFiYXNlT3BlbigpOworCisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9leHBl
Y3RlZFZlcnNpb247CisgICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7CisgICAgdW5zaWduZWQgbG9u
ZyBtX2VzdGltYXRlZFNpemU7CisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRp
b25DYWxsYmFjazsKKworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRU
aHJlYWRTZWN1cml0eU9yaWdpbjsKKworICAgIGludCBtX2d1aWQ7CisgICAgU3RyaW5nIG1fZmls
ZW5hbWU7CisKKyAgICBib29sIG1fbmV3OworICAgIGJvb2wgbV9vcGVuZWQ7CisgICAgYm9vbCBt
X3N0b3BwZWQ7CisgICAgYm9vbCBtX2RlbGV0ZWQ7CisKKyAgICBTUUxpdGVEYXRhYmFzZSBtX3Nx
bGl0ZURhdGFiYXNlOworICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VB
dXRob3JpemVyOworCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmlu
ZygpICsgIjo6IiArIG1fbmFtZTsgfQorI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNzQgKzY0LDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBJZiB3ZSBzbGVlcCBmb3IgbW9yZSB0aGUgMzAgc2Vj
b25kcyB3aGlsZSBibG9ja2VkIG9uIFNRTElURV9CVVNZLCBnaXZlIHVwLgotc3RhdGljIGNvbnN0
IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKLQotY29uc3QgU3RyaW5nJiBEYXRh
YmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgbmFtZSwgKCJfX1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18iKSk7Ci0gICAgcmV0
dXJuIG5hbWU7Ci19Ci0KLXN0YXRpYyBib29sIGlzRGF0YWJhc2VBdmFpbGFibGUgPSB0cnVlOwot
Ci12b2lkIERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLXsKLSAgICBp
c0RhdGFiYXNlQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotfQotCi1ib29sIERhdGFiYXNlOjppc0F2
YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJuIGlzRGF0YWJhc2VBdmFpbGFibGU7Ci19Ci0KLXN0YXRp
YyBNdXRleCYgZ3VpZE11dGV4KCkKLXsKLSAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVz
ZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhy
ZWFkCi0gICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0
aW9uIGFyZSB1c2VkLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7
Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1
aWRWZXJzaW9uTWFwOwotc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkK
LXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKLSAg
ICByZXR1cm4gbWFwOwotfQotCi0vLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgp
Lgotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJp
bmcgbmV3VmVyc2lvbikKLXsKLSAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQu
Ci0gICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOwotCi0gICAgLy8gTm90ZTogSXQg
aXMgbm90IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9u
TWFwKCkgbWFwLgotICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFk
LCBidXQgZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KLSAgICAvLyBUaGUgY29weSgpIGZ1
bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBj
dXJyZW50Ci0gICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBp
biBhIGNyb3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCi0KLSAg
ICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSku
Ci0gICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogbmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsKLX0KLQotdHlwZWRlZiBI
YXNoTWFwPGludCwgSGFzaFNldDxEYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOwotc3RhdGlj
IEd1aWREYXRhYmFzZU1hcCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoR3VpZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQot
Ci1zdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVZlcnNpb25LZXkoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrZXksICgiV2ViS2l0RGF0YWJhc2VWZXJzaW9uS2V5Iikp
OwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXN0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUo
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KIGNsYXNzIERhdGFi
YXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzayB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNh
bGxiYWNrVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQpAQCAtMTk4
LDQ3ICsxMzAsMTUgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgog
fQogCiBEYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzcyhmYWxzZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFt
ZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25D
YWxsYmFjaykKKyAgICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9p
c1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkKLSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0g
ICAgLCBtX2d1aWQoMCkKLSAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5j
cm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9z
c1RocmVhZFN0cmluZygpKQotICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCi0g
ICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi0gICAgLCBtX3N0b3BwZWQoZmFsc2UpCi0gICAgLCBtX29w
ZW5lZChmYWxzZSkKLSAgICAsIG1fbmV3KGZhbHNlKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNr
KGNyZWF0aW9uQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CisKICAgICBtX2RhdGFiYXNlVGhyZWFk
U2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2Fm
ZUNvcHkoKTsKLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpKQotICAgICAgICBtX25hbWUgPSAiIjsK
IAogICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotICAgIG1f
Z3VpZCA9IGd1aWRGb3JPcmlnaW5BbmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCks
IG5hbWUpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkp
OwotCi0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNl
TWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAgIGlmICghaGFzaFNldCkgewotICAgICAgICAgICAg
aGFzaFNldCA9IG5ldyBIYXNoU2V0PERhdGFiYXNlKj47Ci0gICAgICAgICAgICBndWlkVG9EYXRh
YmFzZU1hcCgpLnNldChtX2d1aWQsIGhhc2hTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFz
aFNldC0+YWRkKHRoaXMpOwotICAgIH0KLQotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpOwotICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFt
ZSk7Ci0KLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhp
cyk7Ci0gICAgY29udGV4dC0+YWRkT3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCiBjbGFzcyBEZXJl
ZkNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpAQCAt
MjY5LDcgKzE2OSw2IEBAIGJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2UK
IHsKICAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJh
c2VBdXRob3JpemVyOjpjcmVhdGUoKTsKIAogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAg
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7CkBAIC0yODEsOTEgKzE4MCwx
MCBAQCBib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlCiAgICAgcmV0dXJu
IHN1Y2Nlc3M7CiB9CiAKLQotc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFi
YXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1
bHRTdHJpbmcpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOwot
ICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAh
PSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5n
IHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3Vs
dCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNRTFJl
c3VsdFJvdykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4
dCgwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FM
UmVzdWx0RG9uZSkgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkp
IHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wg
RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnksICgiU0VMRUNUIHZh
bHVlIEZST00gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVSRSBrZXkgPSAnIiAr
IGRhdGFiYXNlVmVyc2lvbktleSgpICsgIic7IikpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmRpc2FibGUoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29w
eSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05h
bWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxl
KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJ
bkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVy
eSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIHZhbHVlKTsKLQotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVl
cnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNv
bnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFjZSBh
biBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51
bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQotICAgIC8vIGNsYXVz
ZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZl
cmlmeSgpKS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2V0VmVyc2lvblF1ZXJ5
LCAoIklOU0VSVCBJTlRPICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSwgdmFs
dWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInLCA/KTsiKSk7Ci0KLSAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSBz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZlcnNpb25RdWVyeS50
aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgKCVzKSIsIHZlcnNp
b24uYXNjaWkoKS5kYXRhKCksIHNldFZlcnNpb25RdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKK3ZvaWQg
RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fZXhwZWN0
ZWRWZXJzaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11
dGV4KCkpOwotICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lv
bk1hcCgpLmdldChtX2d1aWQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIGlmICht
X2NyZWF0aW9uQ2FsbGJhY2spCisgICAgICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZl
bnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsKIH0KIAogdm9pZCBEYXRh
YmFzZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKQEAgLTQxOCw3ICsyMzYsNyBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKIH07CiAKLXZvaWQgRGF0YWJhc2U6
OmNsb3NlKENsb3NlUG9saWN5IHBvbGljeSkKK3ZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DbG9zZShD
bG9zZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0ID0gdGhp
czsKIApAQCAtNDMyLDI1ICsyNTAsMjQgQEAgdm9pZCBEYXRhYmFzZTo6Y2xvc2UoQ2xvc2VQb2xp
Y3kgcG9saWN5KQogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQo
KS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7CiAgICAgbV9vcGVuZWQgPSBmYWxzZTsKIAot
ICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAg
ICBIYXNoU2V0PERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldCht
X2d1aWQpOwotICAgICAgICBBU1NFUlQoaGFzaFNldCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0
LT5jb250YWlucyh0aGlzKSk7Ci0gICAgICAgIGhhc2hTZXQtPnJlbW92ZSh0aGlzKTsKLSAgICAg
ICAgaWYgKGhhc2hTZXQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VN
YXAoKS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgICAgIGRlbGV0ZSBoYXNoU2V0OwotICAgICAg
ICAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAgICB9Ci0gICAg
fQotCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNj
aGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKICAgICBpZiAocG9saWN5ID09IFJlbW92ZURhdGFi
YXNlRnJvbUNvbnRleHQpCiAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRh
c2soQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZSh0aGlzKSk7CiB9CiAKK3Zv
aWQgRGF0YWJhc2U6OmNsb3NlKCkKK3sKKyAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJl
YWQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCk7CisgICAgaWYg
KCFkYXRhYmFzZVRocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGN1cnJlbnRUaHJl
YWQoKSAhPSBkYXRhYmFzZVRocmVhZC0+Z2V0VGhyZWFkSUQoKSkgeworICAgICAgICBpZiAoIWRh
dGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpKQorICAgICAgICAgICAgZGF0YWJh
c2VUaHJlYWQtPnNjaGVkdWxlVGFzayhEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsIERh
dGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCAwKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIHBlcmZvcm1DbG9zZShEYXRhYmFzZTo6UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCk7Cit9
CisKIHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogewogICAgIC8vIEZJWE1FOiBUaGUgbmV0IGVmZmVj
dCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdG8gcmVtb3ZlIGFsbCBwZW5kaW5nIHRyYW5zYWN0
aW9ucyBhbmQgc3RhdGVtZW50cywgYnV0IGFsbG93IHRoZSBjdXJyZW50IHN0YXRlbWVudApAQCAt
NDczLDc5ICsyOTAsNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXpl
CiAgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRh
YmFzZSh0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIoKQotewot
ICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmRpc2FibGUoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCi17
Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+ZW5hYmxlKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25s
eSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlv
bkNoYW5nZWREYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
LSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJh
c2UoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCi17Ci0gICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cmVzZXRE
ZWxldGVzKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyLT5yZXNldERlbGV0ZXMoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6aGFk
RGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1
cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKLX0KLQotc3RhdGljIGludCBn
dWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIFN0cmluZyBzdHJpbmdJRDsKLSAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCIv
IikpCi0gICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgbmFtZTsKLSAgICBlbHNlCi0gICAgICAg
IHN0cmluZ0lEID0gb3JpZ2luICsgIi8iICsgbmFtZTsKLQotICAgIC8vIE5vdGU6IFdlIGRvbid0
IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKLSAg
ICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0
aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxs
IHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwg
c3RyaW5nSWRlbnRpZmllck11dGV4LCAoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmlu
Z0lkZW50aWZpZXJNdXRleCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1
aWRNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZp
ZXJUb0dVSURNYXAsICgpKTsKLSAgICBpbnQgZ3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURN
YXAuZ2V0KHN0cmluZ0lEKTsKLSAgICBpZiAoIWd1aWQpIHsKLSAgICAgICAgc3RhdGljIGludCBj
dXJyZW50TmV3R1VJRCA9IDE7Ci0gICAgICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOwotICAg
ICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGd1aWQ7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnJlc2V0QXV0aG9yaXpl
cigpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2VBdXRob3JpemVyKQotICAgICAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+cmVzZXQoKTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNo
ZWNrcygpCiB7CiAgICAgLy8gRklYTUU6IENvZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHdp
bGwgbmVlZCB0byBiZSBydW4gdG8gZW5mb3JjZSB0aGUgcGVyLW9yaWdpbiBzaXplIGxpbWl0IHRo
ZSBzcGVjIG1hbmRhdGVzLgpAQCAtNTYwLDk0ICszMDQsNiBAQCB2b2lkIERhdGFiYXNlOjpwZXJm
b3JtUG9saWN5Q2hlY2tzKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIERhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlKQotewotICAgIGlmICgh
bV9zcWxpdGVEYXRhYmFzZS5vcGVuKG1fZmlsZW5hbWUsIHRydWUpKSB7Ci0gICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UgYXQgcGF0aCAlcyIsIG1fZmlsZW5hbWUuYXNj
aWkoKS5kYXRhKCkpOwotICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3Jl
bWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9u
IGluY3JlbWVudGFsIGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNj
aWkoKS5kYXRhKCkpOwotCi0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBt
X3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAg
IG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsK
LQotICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9y
IGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKLSAgICAgICAgaWYgKGVu
dHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgLy8gTWFwIG51
bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgot
ICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3Ry
aW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1
cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRW
ZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOwot
Ci0gICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUg
VEFCTEUgIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5P
VCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0YWJsZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNl
SW5mb1RhYmxlTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwot
ICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBm
aWxlLgotICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50
VmVyc2lvbikpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3Vy
cmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAg
ICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAg
ICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJz
aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2
ZWQgY3VycmVudCB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5h
c2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJh
c2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5k
YXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAg
ICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRh
dGFiYXNlICVzIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVi
dWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICBlID0gSU5WQUxJ
RF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8g
dGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uu
Y2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9u
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1
aWQsIGN1cnJlbnRWZXJzaW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50
VmVyc2lvbi5pc051bGwoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVz
IGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJl
IHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2
ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBleGNlcHRpb24uCi0gICAgLy8gSWYgdGhlIGV4cGVj
dGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdp
dGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KLSAgICBpZiAoKCFt
X25ldyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgo
KSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVyc2lvbikgewotICAgICAgICBMT0co
U3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0cyB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMsIHdo
aWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9uIG5hbWUgJXMgLSBvcGVuRGF0YWJhc2UoKSBjYWxsIHdp
bGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAgICAg
ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSwgY3VycmVudFZlcnNpb24uYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIC8vIENs
b3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgIG1fc3FsaXRlRGF0
YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEFs
bCBjaGVja3MgcGFzc2VkIGFuZCB3ZSBzdGlsbCBoYXZlIGEgaGFuZGxlIHRvIHRoaXMgZGF0YWJh
c2UgZmlsZS4KLSAgICAvLyBNYWtlIHN1cmUgRGF0YWJhc2VUaHJlYWQgY2xvc2VzIGl0IHdoZW4g
RGF0YWJhc2VUaHJlYWQgZ29lcyBhd2F5LgotICAgIG1fb3BlbmVkID0gdHJ1ZTsKLSAgICBpZiAo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Bl
bih0aGlzKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VW
ZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKQEAgLTY4OSw4ICszNDUsNyBAQCB2b2lk
IERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKCkKICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAl
cFxuIiwgdGFzay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIG1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZVRhc2sodGFzay5yZWxlYXNlKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIH0KIH0K
IAogdm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBib29sIGltbWVkaWF0ZWx5KQpAQCAtNzYxLDExICs0MTYsNiBAQCBWZWN0
b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlCiAgICAgcmV0dXJuIHRhYmxlTmFt
ZXM7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkKLXsKLSAg
ICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5nZXQoKSwgdGhpcyk7Ci19Ci0KIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiBEYXRhYmFzZTo6dHJh
bnNhY3Rpb25DbGllbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ2xpZW50KCk7CkBAIC03NzYsMTQg
KzQyNiw2IEBAIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIERhdGFiYXNlOjp0cmEKICAgICBy
ZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCk7CiB9CiAKLVN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIE11
dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25N
YXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29weSgpOwotfQotCiBWZWN0b3I8U3RyaW5nPiBE
YXRhYmFzZTo6dGFibGVOYW1lcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB1c2luZyB0aHJlYWRz
YWZlQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJp
Y3QgdHVybnMKQEAgLTgwMSwxNCArNDQzLDYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRh
YmxlTmFtZXMoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnNldEV4
cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgbV9leHBlY3RlZFZl
cnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBpbiBt
ZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRN
dXRleCgpKTsKLSAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24pOwotfQot
CiBTZWN1cml0eU9yaWdpbiogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAg
ICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKQEAgLTgx
OCwzNSArNDUyLDEwIEBAIFNlY3VyaXR5T3JpZ2luKiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4K
ICAgICByZXR1cm4gMDsKIH0KIAotU3RyaW5nIERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkg
Y29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJl
YWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi1TdHJp
bmcgRGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVw
IGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlzcGxh
eU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBEYXRhYmFzZTo6ZXN0
aW1hdGVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0KLQot
U3RyaW5nIERhdGFiYXNlOjpmaWxlTmFtZSgpIGNvbnN0Cit2b2lkIERhdGFiYXNlOjpub3RpZnlE
YXRhYmFzZVRocmVhZERhdGFiYXNlT3BlbigpCiB7Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5
IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJldHVybiBtX2ZpbGVuYW1lLnRo
cmVhZHNhZmVDb3B5KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZO
ZWVkZWQoKQotewotICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2Uu
ZnJlZVNwYWNlU2l6ZSgpOwotICAgIGludDY0X3QgdG90YWxTaXplID0gbV9zcWxpdGVEYXRhYmFz
ZS50b3RhbFNpemUoKTsKLSAgICBpZiAodG90YWxTaXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkK
LSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsK
KyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQorICAg
ICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERh
dGFiYXNlT3Blbih0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmgJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDIwICszMCwxNCBAQAogI2RlZmluZSBEYXRhYmFzZV9oCiAK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNp
Zm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNlbmRpZgotCiAjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7CiBjbGFzcyBEYXRhYmFzZUNh
bGxiYWNrOwotY2xhc3MgRGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKQEAgLTU1
LDEyMiArNDksNjYgQEAgY2xhc3MgVm9pZENhbGxiYWNrOwogCiB0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwogCi1jbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFi
YXNlPiB7CitjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJsZShib29sKTsKLSAgICBzdGF0aWMgYm9v
bCBpc0F2YWlsYWJsZSgpOwotCi0gICAgfkRhdGFiYXNlKCk7CisgICAgdmlydHVhbCB+RGF0YWJh
c2UoKTsKIAogICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUgRE9NIEFQSQogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0
YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdmVyc2lvbigpIGNv
bnN0OwogICAgIHZvaWQgY2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
PiwKICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAg
ICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9u
bHkpOwogCi0gICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKLSAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKLQotICAgIHZvaWQgZGlzYWJsZUF1dGhv
cml6ZXIoKTsKLSAgICB2b2lkIGVuYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIHNldEF1dGhv
cml6ZXJSZWFkT25seSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwot
ICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwotICAgIHZvaWQgcmVzZXREZWxldGVzKCk7
Ci0gICAgYm9vbCBoYWREZWxldGVzKCk7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1DcmVhdGlv
bkNhbGxiYWNrKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzKCk7CiAKLSAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpOyB9Ci0gICAgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0gICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURh
dGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQotICAgIFN0cmluZyBzdHJpbmdJ
ZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7Ci0gICAg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGZpbGVOYW1l
KCkgY29uc3Q7Ci0KLSAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJik7Ci0g
ICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNl
dEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHZlcnNpb25NYXRjaGVz
RXhwZWN0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OwogCi0gICAgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKLSAgICBi
b29sIGRlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKICAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9O
b3RSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07
Ci0gICAgdm9pZCBjbG9zZShDbG9zZVBvbGljeSk7Ci0gICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7
IHJldHVybiBtX29wZW5lZDsgfQotCi0gICAgdm9pZCBzdG9wKCk7Ci0gICAgYm9vbCBzdG9wcGVk
KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcGVkOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3Qg
eyByZXR1cm4gbV9uZXc7IH0KKyAgICB2b2lkIHBlcmZvcm1DbG9zZShDbG9zZVBvbGljeSk7Cisg
ICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAogICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIERhdGFi
YXNlVGhyZWFkLCBtdXN0IGJlIHByZXBhcmVkIHRvIHdvcmsgb24gdGhlIGJhY2tncm91bmQgdGhy
ZWFkCi0gICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKICAgICB2b2lkIHBlcmZvcm1Qb2xpY3lD
aGVja3MoKTsKIAotICAgIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYp
OworICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKICAgICB2b2lk
IGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVUcmFu
c2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5z
YWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxzZSk7CiAK
LSAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtR2V0VGFibGVOYW1lcygpOwotICAgIHZvaWQgcGVy
Zm9ybUNyZWF0aW9uQ2FsbGJhY2soKTsKLQogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFu
c2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKIAotICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1
dW1JZk5lZWRlZCgpOwotCiBwcml2YXRlOgogICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
LAogICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPik7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5RGF0YWJhc2VUaHJlYWREYXRhYmFzZU9wZW4oKTsKKwogICAgIGJvb2wg
b3BlbkFuZFZlcmlmeVZlcnNpb24oRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzY2hlZHVs
ZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNr
KHZvaWQqKTsKKwogICAgIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0
aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBi
b29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVl
dWVFbmFibGVkOwogCi0gICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lk
Kik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0OwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW47CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFk
U2VjdXJpdHlPcmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBpbnQgbV9ndWlkOwotICAg
IFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAg
ICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKLSAgICBTdHJpbmcgbV9maWxlbmFtZTsK
IAogICAgIGJvb2wgbV9kZWxldGVkOwotCi0gICAgYm9vbCBtX3N0b3BwZWQ7Ci0KLSAgICBib29s
IG1fb3BlbmVkOwotCi0gICAgYm9vbCBtX25ldzsKLQotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3Fs
aXRlRGF0YWJhc2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1
dGhvcml6ZXI7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxi
YWNrOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsg
Ijo6IiArIG1fbmFtZTsgfQotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNjA1NTYp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlQXV0aG9yaXplci5oIgogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzk4LDcgKzM5OCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRl
bnlCYXNlZE9uVGFibGUKICAgICAvLyAgICBlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsICJz
cWxpdGVfc2VxdWVuY2UiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsIERhdGFiYXNl
OjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpCiAgICAgLy8gICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsIERhdGFiYXNlOjpk
YXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxl
TmFtZSwgQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQogICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gU1FMQXV0aEFsbG93OwpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVGFzay5jcHAJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBE
YXRhYmFzZUNsb3NlVGFzazo6RGF0YWJhc2VDbG9zZVRhc2soRGF0CiAKIHZvaWQgRGF0YWJhc2VD
bG9zZVRhc2s6OmRvUGVyZm9ybVRhc2soKQogewotICAgIGRhdGFiYXNlKCktPmNsb3NlKG1fY2xv
c2VQb2xpY3kpOworICAgIGRhdGFiYXNlKCktPnBlcmZvcm1DbG9zZShtX2Nsb3NlUG9saWN5KTsK
IH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVh
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAko
cmV2aXNpb24gNjA1NTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAK
KyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQXV0b2RyYWluZWRQb29s
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKQEAg
LTExMyw3ICsxMTQsNyBAQCB2b2lkKiBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQog
ICAgICAgICBvcGVuU2V0Q29weS5zd2FwKG1fb3BlbkRhdGFiYXNlU2V0KTsKICAgICAgICAgRGF0
YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG9wZW5TZXRDb3B5LmVuZCgpOwogICAgICAgICBmb3Ig
KERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IG9wZW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgKCppdCktPmNsb3NlKERhdGFiYXNlOjpSZW1vdmVEYXRhYmFz
ZUZyb21Db250ZXh0KTsKKyAgICAgICAgICAgICgqaXQpLT5jbG9zZSgpOwogICAgIH0KIAogICAg
IC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBh
bnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQpAQCAtMTU4LDEzICsxNTksMTMgQEAgdm9pZCBEYXRh
YmFzZVRocmVhZDo6c2NoZWR1bGVJbW1lZGlhdGVUYQogCiBjbGFzcyBTYW1lRGF0YWJhc2VQcmVk
aWNhdGUgewogcHVibGljOgotICAgIFNhbWVEYXRhYmFzZVByZWRpY2F0ZShjb25zdCBEYXRhYmFz
ZSogZGF0YWJhc2UpIDogbV9kYXRhYmFzZShkYXRhYmFzZSkgeyB9CisgICAgU2FtZURhdGFiYXNl
UHJlZGljYXRlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKSA6IG1fZGF0YWJhc2Uo
ZGF0YWJhc2UpIHsgfQogICAgIGJvb2wgb3BlcmF0b3IoKShEYXRhYmFzZVRhc2sqIHRhc2spIGNv
bnN0IHsgcmV0dXJuIHRhc2stPmRhdGFiYXNlKCkgPT0gbV9kYXRhYmFzZTsgfQogcHJpdmF0ZToK
LSAgICBjb25zdCBEYXRhYmFzZSogbV9kYXRhYmFzZTsKKyAgICBjb25zdCBBYnN0cmFjdERhdGFi
YXNlKiBtX2RhdGFiYXNlOwogfTsKIAotdm9pZCBEYXRhYmFzZVRocmVhZDo6dW5zY2hlZHVsZURh
dGFiYXNlVGFza3MoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRocmVhZDo6dW5z
Y2hlZHVsZURhdGFiYXNlVGFza3MoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAg
Ly8gTm90ZSB0aGF0IHRoZSB0aHJlYWQgbG9vcCBpcyBydW5uaW5nLCBzbyBzb21lIHRhc2tzIGZv
ciB0aGUgZGF0YWJhc2UKICAgICAvLyBtYXkgc3RpbGwgYmUgZXhlY3V0ZWQuIFRoaXMgaXMgdW5h
dm9pZGFibGUuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAkocmV2aXNpb24gNjA1NTYp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFic3RyYWN0RGF0
YWJhc2U7CiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlVGFzazsKIGNsYXNzIERhdGFi
YXNlVGFza1N5bmNocm9uaXplcjsKQEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxEYXRhYmFzZVRhc2s+KTsKICAgICB2b2lkIHNjaGVk
dWxlSW1tZWRpYXRlVGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4pOyAvLyBUaGlzIGp1c3Qg
YWRkcyB0aGUgdGFzayB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIC0gdGhlIGNhbGxlciBuZWVk
cyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bCBub3QgdG8gY3JlYXRlIGRlYWRsb2NrcyB3aGVuIHdh
aXRpbmcgZm9yIGNvbXBsZXRpb24uCi0gICAgdm9pZCB1bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhE
YXRhYmFzZSopOworICAgIHZvaWQgdW5zY2hlZHVsZURhdGFiYXNlVGFza3MoQWJzdHJhY3REYXRh
YmFzZSopOwogCiAgICAgdm9pZCByZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqKTsKICAgICB2
b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CkBAIC04MSw2ICs4Miw3IEBAIHBy
aXZhdGU6CiAgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKIAogICAgIC8v
IFRoaXMgc2V0IGtlZXBzIHRyYWNrIG9mIHRoZSBvcGVuIGRhdGFiYXNlcyB0aGF0IGhhdmUgYmVl
biB1c2VkIG9uIHRoaXMgdGhyZWFkLgorICAgIC8vIE9ubHkgYXN5bmMgREJzIHNob3VsZCB1c2Ug
dGhpcyB0aHJlYWQuCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiBEYXRh
YmFzZVNldDsKICAgICBEYXRhYmFzZVNldCBtX29wZW5EYXRhYmFzZVNldDsKIApJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkg
QEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAi
RGF0YWJhc2VUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMjE5LDcg
KzIxOSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKICAgICBy
ZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7CiB9CiAKLXVuc2lnbmVkIGxv
bmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRh
YmFzZSogZGF0YWJhc2UpCit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRN
YXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKICAgICAvLyBUaGUgbWF4
aW11bSBzaXplIGZvciBhIGRhdGFiYXNlIGlzIHRoZSBmdWxsIHF1b3RhIGZvciBpdHMgb3JpZ2lu
LCBtaW51cyB0aGUgY3VycmVudCB1c2FnZSB3aXRoaW4gdGhlIG9yaWdpbiwKQEAgLTIzMCw3ICsy
MzAsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNCiAgICAgcmV0
dXJuIHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIoKS5k
aXNrVXNhZ2Uob3JpZ2luKSArIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
ZGF0YWJhc2UtPmZpbGVOYW1lKCkpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJh
c2VDaGFuZ2VkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkYXRh
YmFzZUNoYW5nZWQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgTG9ja2VyPE9y
aWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigp
KTsKICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5tYXJrRGF0YWJhc2UoZGF0YWJhc2UpOwpAQCAt
NDc5LDcgKzQ3OSw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWcK
ICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsK
IH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0
YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0
YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsK
QEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNl
KERhCiAgICAgZG9uZUNyZWF0aW5nRGF0YWJhc2UoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCks
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VU
cmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7
CiAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU5LDcgKzU1OSw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UKICAgICBvcmlnaW5RdW90
YU1hbmFnZXIoKS5yZW1vdmVPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogfQog
Ci12b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBk
YXRhYmFzZXMpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3Ry
YWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcykKIHsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJh
c2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgIGlmICghbV9vcGVuRGF0YWJh
c2VNYXApCkBAIC05NzMsNyArOTczLDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURh
dGFiYXNlRmlsZQogICAgIH0KICNlbmRpZgogCi0gICAgVmVjdG9yPFJlZlB0cjxEYXRhYmFzZT4g
PiBkZWxldGVkRGF0YWJhc2VzOworICAgIFZlY3RvcjxSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4g
PiBkZWxldGVkRGF0YWJhc2VzOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vdCB0byBob2xkIHRoZSBh
bnkgbG9ja3Mgd2hlbiBjYWxsaW5nCiAgICAgLy8gRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRD
bG9zZSgpLCBzaW5jZSB0aGF0IGNhbiBjYXVzZSBhIGRlYWRsb2NrCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5oCShyZXZpc2lvbiA2MDU1NikKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlOworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApA
QCAtNzAsMTcgKzcwLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICBTdHJpbmcgZnVsbFBhdGhG
b3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVh
dGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpOwogCi0gICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoRGF0
YWJhc2UqKTsKLSAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgIHZv
aWQgZ2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpOworICAgIHZvaWQg
YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lkIHJlbW92ZU9wZW5E
YXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgdm9pZCBnZXRPcGVuRGF0YWJhc2VzKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2UqKTsKLSAgICB2b2lkIGRhdGFi
YXNlQ2hhbmdlZChEYXRhYmFzZSopOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXpl
Rm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSopOworICAgIHZvaWQgZGF0YWJhc2VD
aGFuZ2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZVRyYWNr
ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PERh
dGFiYXNlKj4gRGF0YWJhc2VTZXQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PEFic3RyYWN0RGF0YWJh
c2UqPiBEYXRhYmFzZVNldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNl
dCo+IERhdGFiYXNlTmFtZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRGF0YWJhc2VOYW1lTWFwKiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBEYXRhYmFzZU9y
aWdpbk1hcDsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJKHJl
dmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
IAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgog
I2luY2x1ZGUgIk9yaWdpblVzYWdlUmVjb3JkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTExMiw3ICsxMTIsNyBAQCB2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6cmVtb3ZlT3JpZ2luKFNl
CiAgICAgfQogfQogCi12b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6bWFya0RhdGFiYXNlKERhdGFi
YXNlKiBkYXRhYmFzZSkKK3ZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2UoQWJz
dHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICBB
U1NFUlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9P
cmlnaW5RdW90YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdp
blF1b3RhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBBYnN0cmFjdERhdGFiYXNl
OwogY2xhc3MgT3JpZ2luVXNhZ2VSZWNvcmQ7CiAKIGNsYXNzIE9yaWdpblF1b3RhTWFuYWdlciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlbW92ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlk
ZW50aWZpZXIpOwogICAgIHZvaWQgcmVtb3ZlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAKLSAg
ICB2b2lkIG1hcmtEYXRhYmFzZShEYXRhYmFzZSopOyAvLyBNYXJrIGRpcnRpbmVzcyBvZiBhIHNw
ZWNpZmljIGRhdGFiYXNlLgorICAgIHZvaWQgbWFya0RhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2Uq
KTsgLy8gTWFyayBkaXJ0aW5lc3Mgb2YgYSBzcGVjaWZpYyBkYXRhYmFzZS4KICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgZGlza1VzYWdlKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CiAKIHByaXZhdGU6
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNr
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViQ29yZS9zdG9yYWdlL2Nocm9t
aXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5o
IgogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFk
LmgiCiAjaW5jbHVkZSAiUXVvdGFUcmFja2VyLmgiCkBAIC03Miw3ICs3Miw3IEBAIFN0cmluZyBE
YXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICByZXR1cm4gb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKSArICIvIiArIG5hbWUgKyAiIyI7CiB9CiAKLXZvaWQgRGF0YWJhc2VU
cmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsK
ICAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpOwogICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0
YWJhc2VNYXBHdWFyZCk7CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjph
ZGRPcGVuRGF0YWJhc2UoRGEKIAogY2xhc3MgVHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2sg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8VHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2s+IGNyZWF0ZShQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxUcmFja2Vy
UmVtb3ZlT3BlbkRhdGFiYXNlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFz
ZT4gZGF0YWJhc2UpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFRyYWNrZXJSZW1vdmVPcGVu
RGF0YWJhc2VUYXNrKGRhdGFiYXNlKTsKICAgICB9CkBAIC0xMTAsMTUgKzExMCwxNSBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFRyYWNrZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNr
KFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIFRyYWNrZXJSZW1vdmVPcGVuRGF0
YWJhc2VUYXNrKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gZGF0YWJhc2UpCiAgICAgICAg
IDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPERhdGFi
YXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBtX2RhdGFiYXNl
OwogfTsKIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFz
ZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFi
c3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGlmICghZGF0YWJhc2UtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKICAgICAgICAgZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soVHJhY2tlclJlbW92ZU9wZW5EYXRh
YmFzZVRhc2s6OmNyZWF0ZShkYXRhYmFzZSkpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgRGF0
YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UKIH0KIAogCi12b2lkIERhdGFiYXNlVHJh
Y2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpCit2b2lkIERh
dGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRh
dGFiYXNlcykKIHsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRh
dGFiYXNlTWFwR3VhcmQpOwogICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCkBAIC0xNjUsNyAr
MTY1LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMoUwogICAgICAg
ICBkYXRhYmFzZXMtPmFkZCgqaXQpOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VU
cmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2UqIGRhdGFiYXNlKQor
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNwYWNlQXZh
aWxhYmxlID0gMDsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDYw
NTU2KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzEsNyArMjcxLDcgQEAgTm90aWZpY2F0aW9uQ2VudGVyKiBXb3JrZXJDb250ZXh0Ojp3
ZWJraQogI2lmIEVOQUJMRShEQVRBQkFTRSkKIFBhc3NSZWZQdHI8RGF0YWJhc2U+IFdvcmtlckNv
bnRleHQ6Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0
YWJhc2UoKSB8fCAhRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkpIHsKKyAgICBpZiAoIXNlY3VyaXR5
T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwgIUFic3RyYWN0RGF0YWJhc2U6OmlzQXZh
aWxhYmxlKCkpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjA1NTgpCisrKyBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDYt
MDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlIGxvY2F0aW9uIG9m
IHRoZSBmbGFnIHRoYXQgZGV0ZXJtaW5lcyBpZiBEQnMgc2hvdWxkIGJlIGVuYWJsZWQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAg
ICAgICogc3JjL1dlYkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6
OmNsb3NlRGF0YWJhc2VJbW1lZGlhdGVseSk6CisgICAgICAgICogc3JjL1dlYlJ1bnRpbWVGZWF0
dXJlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlRGF0
YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzRGF0YWJhc2VF
bmFibGVkKToKKwogMjAxMC0wNi0wMiAgU3RlcmxpbmcgU3dpZ2FydCAgPHNzd2lnYXJ0QGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRhdGFiYXNlLmNwcAkocmV2aXNpb24gNjA1NTYpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE3ICsxMTAsMTMg
QEAgdm9pZCBXZWJEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VTaXplKAogCiB2b2lkIFdlYkRhdGFi
YXNlOjpjbG9zZURhdGFiYXNlSW1tZWRpYXRlbHkoY29uc3QgV2ViU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFiYXNlTmFtZSkKIHsKLSAgICBIYXNoU2V0PFJl
ZlB0cjxEYXRhYmFzZT4gPiBkYXRhYmFzZUhhbmRsZXM7CisgICAgSGFzaFNldDxSZWZQdHI8QWJz
dHJhY3REYXRhYmFzZT4gPiBkYXRhYmFzZUhhbmRsZXM7CiAgICAgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luUHJwKFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpKTsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG9yaWdpbiA9IG9yaWdpblBycDsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRP
cGVuRGF0YWJhc2VzKG9yaWdpbi5nZXQoKSwgZGF0YWJhc2VOYW1lLCAmZGF0YWJhc2VIYW5kbGVz
KTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+OjppdGVyYXRvciBpdCA9IGRh
dGFiYXNlSGFuZGxlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZUhhbmRsZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gaXQtPmdldCgpOwotICAgICAgICBEYXRh
YmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQgPSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpOwotICAgICAgICBpZiAoZGF0YWJhc2VUaHJlYWQgJiYg
IWRhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpKSB7Ci0gICAgICAgICAgICBk
YXRhYmFzZS0+c3RvcCgpOwotICAgICAgICAgICAgZGF0YWJhc2VUaHJlYWQtPnNjaGVkdWxlVGFz
ayhEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKGRhdGFiYXNlLCBEYXRhYmFzZTo6UmVtb3ZlRGF0
YWJhc2VGcm9tQ29udGV4dCwgMCkpOwotICAgICAgICB9CisgICAgZm9yIChIYXNoU2V0PFJlZlB0
cjxBYnN0cmFjdERhdGFiYXNlPiA+OjppdGVyYXRvciBpdCA9IGRhdGFiYXNlSGFuZGxlcy5iZWdp
bigpOyBpdCAhPSBkYXRhYmFzZUhhbmRsZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaXQtPmdl
dCgpLT5zdG9wKCk7CisgICAgICAgIGl0LT5nZXQoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAJKHJldmlzaW9u
IDYwNTU2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViUnVudGltZUZlYXR1cmVzLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAi
V2ViU29ja2V0LmgiCkBAIC00MywxNCArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lk
IFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlRGF0YWJhc2UoYm9vbCBlbmFibGUpCiB7CiAjaWYg
RU5BQkxFKERBVEFCQVNFKQotICAgIERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShlbmFibGUpOwor
ICAgIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZSk7CiAjZW5kaWYKIH0K
IAogYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzRGF0YWJhc2VFbmFibGVkKCkKIHsKICNpZiBF
TkFCTEUoREFUQUJBU0UpCi0gICAgcmV0dXJuIERhdGFiYXNlOjppc0F2YWlsYWJsZSgpOworICAg
IHJldHVybiBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpOwogI2Vsc2UKICAgICByZXR1
cm4gZmFsc2U7CiAjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDU1OCkKKysrIFdlYktpdC9ndGsv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMDIgIER1
bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBm
bGFnIHRoYXQgZGV0ZXJtaW5lcyBpZiBEQnMgc2hvdWxkIGJlIGVuYWJsZWQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3VwZGF0
ZV9zZXR0aW5ncyk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5KToK
KyAgICAgICAgKHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwpOgorCiAyMDEwLTA2LTAxICBYYW4gTG9w
ZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5v
cm9uaGEuCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNjA1
NTYpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAK
ICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5o
IgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCkBAIC00OSw3ICs1MCw2IEBACiAjaW5jbHVkZSAiQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKICNpbmNsdWRl
ICJDdXJzb3IuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJEcmFnQ2xpZW50R3RrLmgi
CkBAIC0yNzMwLDcgKzI3MzAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfdXBkYXRl
X3NldHRpCiAgICAgc2V0dGluZ3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZW5hYmxlUHJp
dmF0ZUJyb3dzaW5nKTsKICAgICBzZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZW5h
YmxlQ2FyZXRCcm93c2luZyk7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIERhdGFiYXNlOjpz
ZXRJc0F2YWlsYWJsZShlbmFibGVIVE1MNURhdGFiYXNlKTsKKyAgICBBYnN0cmFjdERhdGFiYXNl
OjpzZXRJc0F2YWlsYWJsZShlbmFibGVIVE1MNURhdGFiYXNlKTsKICNlbmRpZgogICAgIHNldHRp
bmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZUhUTUw1TG9jYWxTdG9yYWdlKTsKICAg
ICBzZXR0aW5ncy0+c2V0WFNTQXVkaXRvckVuYWJsZWQoZW5hYmxlWFNTQXVkaXRvcik7CkBAIC0y
ODIzLDcgKzI4MjMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90
CiAgICAgICAgIHNldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChnX3ZhbHVlX2dldF9i
b29sZWFuKCZ2YWx1ZSkpOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBlbHNlIGlmIChuYW1l
ID09IGdfaW50ZXJuX3N0cmluZygiZW5hYmxlLWh0bWw1LWRhdGFiYXNlIikpIHsKLSAgICAgICAg
RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7Cisg
ICAgICAgIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGdfdmFsdWVfZ2V0X2Jvb2xl
YW4oJnZhbHVlKSk7CiAgICAgfQogI2VuZGlmCiAgICAgZWxzZSBpZiAobmFtZSA9PSBnX2ludGVy
bl9zdHJpbmcoImVuYWJsZS1odG1sNS1sb2NhbC1zdG9yYWdlIikpCkBAIC00NDUwLDQgKzQ0NTAs
MyBAQCBXZWJLaXRDYWNoZU1vZGVsIHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwoCiAgICAgd2Via2l0
X2luaXQoKTsKICAgICByZXR1cm4gY2FjaGVNb2RlbDsKIH0KLQpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYw
NTU4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxMC0wNi0wMiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0
aGUgbG9jYXRpb24gb2YgdGhlIGZsYWcgdGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91bGQgYmUg
ZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5MDQxCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZp
ZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAxMC0wNi0wMiAgU3Rl
cmxpbmcgU3dpZ2FydCAgPHNzd2lnYXJ0QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNjA1NTYp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDEzICsxMDMsMTMgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU1ZhbHVlUmVmLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Fic3RyYWN0RGF0YWJhc2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQmFja0ZvcndhcmRMaXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvRGF0YWJhc2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIu
aD4KQEAgLTEzNTYsNyArMTM1Niw3IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlm
aWNhdGlvbjoKICAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShbcHJlZmVy
ZW5jZXMgbWluaW11bUxvZ2ljYWxGb250U2l6ZV0pOwogICAgIHNldHRpbmdzLT5zZXRQbHVnaW5z
RW5hYmxlZChbcHJlZmVyZW5jZXMgYXJlUGx1Z0luc0VuYWJsZWRdKTsKICNpZiBFTkFCTEUoREFU
QUJBU0UpCi0gICAgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKFtwcmVmZXJlbmNlcyBkYXRhYmFz
ZXNFbmFibGVkXSk7CisgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoW3ByZWZl
cmVuY2VzIGRhdGFiYXNlc0VuYWJsZWRdKTsKICNlbmRpZgogICAgIHNldHRpbmdzLT5zZXRMb2Nh
bFN0b3JhZ2VFbmFibGVkKFtwcmVmZXJlbmNlcyBsb2NhbFN0b3JhZ2VFbmFibGVkXSk7CiAgICAg
c2V0dGluZ3MtPnNldEV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNl
cyBleHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZF0pOwpJbmRleDogV2ViS2l0L3F0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDU1
OCkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxMC0wNi0wMiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUg
bG9jYXRpb24gb2YgdGhlIGZsYWcgdGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91bGQgYmUgZW5h
YmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
MDQxCisKKyAgICAgICAgKiBBcGkvcXdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0
aW5nc1ByaXZhdGU6OmFwcGx5KToKKwogMjAxMC0wNi0wMSAgTm9hbSBSb3NlbnRoYWwgIDxub2Ft
LnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA2MDU1
NikKKysrIFdlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOSArMjQsOSBAQAogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxd2VicGx1
Z2luZGF0YWJhc2VfcC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
IgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgpAQCAtMjE3LDcgKzIxNyw3IEBAIHZv
aWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkoKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAg
ICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3Jh
Z2VEYXRhYmFzZUVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVTdG9yYWdlRGF0
YWJhc2VFbmFibGVkKSk7Ci0gICAgICAgIFdlYkNvcmU6OkRhdGFiYXNlOjpzZXRJc0F2YWlsYWJs
ZSh2YWx1ZSk7CisgICAgICAgIFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxh
YmxlKHZhbHVlKTsKICNlbmRpZgogCiAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShR
V2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCwKSW5kZXg6IFdl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2MDU1OCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVcGRhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmbGFnIHRoYXQgZGV0ZXJtaW5lcyBpZiBEQnMg
c2hvdWxkIGJlIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zOTA0MQorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJW
aWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDEwLTA1LTMwICBEYW5pZWwgQmF0
ZXMgIDxkYmF0ZXNAcmltLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhdHRlbXB0IHRvIGZp
eCB0aGUgYnVpbGQgYWZ0ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNjA0MTgu
CkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4v
V2ViVmlldy5jcHAJKHJldmlzaW9uIDYwNTU2KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2su
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9BYnN0cmFjdERhdGFiYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQlN0cmluZy5oPgpAQCAtNzMsNyArNzQsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
Q29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVTdG9yYWdl
V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Rh
dGFiYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRHJhZ0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CkBAIC00
NzA5LDcgKzQ3MDksNyBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdl
CiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPmRhdGFiYXNlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAg
IGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7Ci0gICAgRGF0YWJhc2U6OnNldElz
QXZhaWxhYmxlKGVuYWJsZWQpOworICAgIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxl
KGVuYWJsZWQpOwogI2VuZGlmCiAKICAgICBociA9IHByZWZzUHJpdmF0ZS0+bG9jYWxTdG9yYWdl
RW5hYmxlZCgmZW5hYmxlZCk7CkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNTU4KQorKysgV2ViS2l0L3d4L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA2LTAyICBEdW1p
dHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmxh
ZyB0aGF0IGRldGVybWluZXMgaWYgREJzIHNob3VsZCBiZSBlbmFibGVkLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAod3hXZWJWaWV3OjpTZXREYXRhYmFzZXNFbmFibGVkKToKKyAg
ICAgICAgKHd4V2ViVmlldzo6QXJlRGF0YWJhc2VzRW5hYmxlZCk6CisKIDIwMTAtMDUtMjcgIEtl
dmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBC
dWlsZCBmaXhlcyBmb3IgV2luZG93cyBhZnRlciByZWNlbnQgY2hhbmdlcy4KSW5kZXg6IFdlYktp
dC93eC9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDYwNTU2KQorKysgV2ViS2l0L3d4L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NCw3ICs3NCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2VuZGlmCiAKQEAgLTk5
NSw3ICs5OTUsNyBAQCB3eFN0cmluZyB3eFdlYlZpZXc6OkdldERhdGFiYXNlRGlyZWN0b3J5CiB2
b2lkIHd4V2ViVmlldzo6U2V0RGF0YWJhc2VzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAjaWYg
RU5BQkxFKERBVEFCQVNFKQotICAgIFdlYkNvcmU6OkRhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShl
bmFibGVkKTsKKyAgICBXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShl
bmFibGVkKTsKICNlbmRpZgogfQogCkBAIC0xMDAzLDcgKzEwMDMsNyBAQCB2b2lkIHd4V2ViVmll
dzo6U2V0RGF0YWJhc2VzRW5hYmxlZChib29sCiBib29sIHd4V2ViVmlldzo6QXJlRGF0YWJhc2Vz
RW5hYmxlZCgpCiB7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHJldHVybiBXZWJDb3JlOjpE
YXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6aXNBdmFpbGFibGUoKTsKICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0K
</data>
<flag name="commit-queue"
          id="42281"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57711</attachid>
            <date>2010-06-02 16:05:23 -0700</date>
            <delta_ts>2010-06-10 14:47:05 -0700</delta_ts>
            <desc>patch #3: Move the reusable code from Database to AbstractDatabase</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>83985</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAxIEBACisyMDEwLTA2LTAyICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW92ZSB0aGUgY29kZSB0aGF0IHdpbGwgYmUgcmV1c2VkIGJ5IERhdGFiYXNlU3luYyBmcm9t
IERhdGFiYXNlIHRvIEFic3RyYWN0RGF0YWJhc2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4
cDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZUVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlU3lu
Y0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZW1vdmVPcGVuRGF0
YWJhc2UpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAg
ICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRG
b3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6CisgICAgICAg
IChXZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1
aWRWZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFiYXNlVmVyc2lvbktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0VGV4dFZhbHVlSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0
YWJhc2U6On5BYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0
YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5B
bmRWZXJpZnkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJsZUF1
dGhvcml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0
aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRBdXRob3Jp
emVyUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cmVzZXRB
dXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rp
b25DaGFuZ2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
bGFzdEFjdGlvbldhc0luc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjpyZXNldERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aGFk
RGVsZXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRh
bFZhY3V1bUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6bm90aWZ5RGF0YWJhc2VUaHJlYWREYXRhYmFzZU9wZW4pOgorICAgICAgICAq
IHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0
YWJhc2U6OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OmVzdGltYXRlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Zmls
ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aXNOZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6b3BlbmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OnN0b3BwZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6ZGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZTo6cGVyZm9ybUNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6bm90aWZ5RGF0YWJhc2VUaHJlYWREYXRhYmFzZU9wZW4pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
QXV0aG9yaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRl
bnlCYXNlZE9uVGFibGVOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFzayk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2FtZURh
dGFiYXNlUHJlZGljYXRlOjpTYW1lRGF0YWJhc2VQcmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUaHJlYWQ6OnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9y
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxl
KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oOgorICAgICAgICAqIHN0b3Jh
Z2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblF1b3Rh
TWFuYWdlcjo6bWFya0RhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL09yaWdpblF1b3RhTWFu
YWdlci5oOgorICAgICAgICAqIHN0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2s6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6
VHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlKToKKwogMjAxMC0wNi0wMiAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IG9qYW5AY2hyb21pdW0ub3JnLgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAko
cmV2aXNpb24gNjA1ODApCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3Myw2ICszNzMsNyBAQCBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3aWR0
aEVSS05TCiBfX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbkMxRVBOU180Tm9kZUVpTlNfOUVB
ZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uQzFFUktOU184UG9zaXRpb25F
TlNfOUVBZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1cmVwb3J0RXhjZXB0aW9uRVBOM0pTQzlFeGVj
U3RhdGVFTlMwXzdKU1ZhbHVlRQorX19aTjdXZWJDb3JlMTZBYnN0cmFjdERhdGFiYXNlMTRzZXRJ
c0F2YWlsYWJsZUViCiBfX1pON1dlYkNvcmUxNkZvbnRGYWxsYmFja0xpc3QxNXJlbGVhc2VGb250
RGF0YUV2CiBfX1pON1dlYkNvcmUxNkZvbnRQbGF0Zm9ybURhdGFDMUVQNk5TRm9udGJiCiBfX1pO
N1dlYkNvcmUxNkZvbnRQbGF0Zm9ybURhdGFEMUV2CkBAIC02MTUsNyArNjE2LDYgQEAgX19aTjdX
ZWJDb3JlN0ludFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmU3SW50U2l6ZUMx
RVJLN19OU1NpemUKIF9fWk43V2ViQ29yZTdjb29raWVzRVBLTlNfOERvY3VtZW50RVJLTlNfNEtV
UkxFCiBfX1pON1dlYkNvcmU3bnNDb2xvckVSS05TXzVDb2xvckUKLV9fWk43V2ViQ29yZThEYXRh
YmFzZTE0c2V0SXNBdmFpbGFibGVFYgogX19aTjdXZWJDb3JlOERvY3VtZW50MTFjcmVhdGVSYW5n
ZUV2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxM3JlbW92ZU1hcmtlcnNFTlNfMTREb2N1bWVudE1h
cmtlcjEwTWFya2VyVHlwZUUKIF9fWk43V2ViQ29yZThEb2N1bWVudDEzc3ZnRXh0ZW5zaW9uc0V2
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjA1ODApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTEwOCw3ICsxMTA4LDcgQEAKIAkJNTE4QTM0QzgxMDI2QzhDOTAw
MUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM1MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dl
YlNvY2tldENvbnN0cnVjdG9yLmggKi87IH07CiAJCTUxOEEzNEM5MTAyNkM4QzkwMDFCNjg5NiAv
KiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0
b20uY3BwICovOyB9OwogCQk1MTk2MTE2QTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjExNUUw
Q0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmNwcCAqLzsgfTsKLQkJNTE5NjExNkIwQ0FDNTY1
NzAwMTBBODBDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTk2MTE1RjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTk2MTE2QjBD
QUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTVGMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5o
ICovOyB9OwogCQk1MTk2MTE2RDBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2VUaHJlYWQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjExNjEw
Q0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCAqLzsgfTsKIAkJNTE5NjExNzMw
Q0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTE2NzBDQUM1NjU3MDAxMEE4MEMgLyogU1FM
UmVzdWx0U2V0LmNwcCAqLzsgfTsKIAkJNTE5NjExNzQwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJl
c3VsdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE5NjExNjgwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MjM2LDcgKzQyMzYsNyBAQAog
CQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjEwRkZBQkU5ODAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJQjVBNjg0MjQwRkZBQkVBQTAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZp
bGVTeXN0ZW0uY3BwICovOyB9OwogCQlCNUI1REM2OTExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJh
Y3REYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNUI1REM2NzExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgKi87
IH07Ci0JCUI1QjVEQzZBMTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUI1REM2ODExOUJC
M0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5oICovOyB9OworCQlCNUI1REM2QTExOUJC
M0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVCNURDNjgxMTlCQjNENTAwMkE4NzkwIC8qIEFic3Ry
YWN0RGF0YWJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAg
Ki87IH07CiAJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICov
OyB9OwogCQlCNUQzNjAxQTExMkY4QjU2MDA0OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzYwMTkxMTJG
OEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAJKHJl
dmlzaW9uIDYwNTgwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogCi0jaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKKyNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCkBAIC05NSwxMiAr
OTQsMTIgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJTb2NrZXRFbgogI2lmIEVO
QUJMRShEQVRBQkFTRSkKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNl
RW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlOjppc0F2YWlsYWJsZSgpOworICAgIHJl
dHVybiBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpOwogfQogCiBib29sIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZVN5bmNFbmFibGVkKCkKIHsKLSAgICByZXR1cm4g
RGF0YWJhc2VTeW5jOjppc0F2YWlsYWJsZSgpOworICAgIHJldHVybiBBYnN0cmFjdERhdGFiYXNl
Ojppc0F2YWlsYWJsZSgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCisj
aW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJM
RShGSUxFX1dSSVRFUikKQEAgLTEwOSw3ICsxMDksNyBAQCBEYXRhYmFzZVRocmVhZCogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VUaHJlYWQuZ2V0KCk7CiB9
CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNl
KiBkYXRhYmFzZSkKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFiYXNl
KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChpc0NvbnRleHRUaHJl
YWQoKSk7CiAgICAgaWYgKCFtX29wZW5EYXRhYmFzZVNldCkKQEAgLTExOSw3ICsxMTksNyBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhCiAgICAgbV9vcGVuRGF0YWJh
c2VTZXQtPmFkZChkYXRhYmFzZSk7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNl
KQogewogICAgIEFTU0VSVChpc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fb3BlbkRh
dGFiYXNlU2V0ICYmIG1fb3BlbkRhdGFiYXNlU2V0LT5jb250YWlucyhkYXRhYmFzZSkpOwpJbmRl
eDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gNjA1ODApCisrKyBX
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQWN0aXZlRE9NT2Jq
ZWN0OwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBjbGFzcyBEYXRhYmFzZTsKKyAgICBjbGFz
cyBBYnN0cmFjdERhdGFiYXNlOwogICAgIGNsYXNzIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjsK
ICAgICBjbGFzcyBEYXRhYmFzZVRocmVhZDsKICNlbmRpZgpAQCAtNzAsOCArNzAsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVhZCgp
OwogICAgICAgICB2b2lkIHNldEhhc09wZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNl
cyA9IHRydWU7IH0KICAgICAgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNPcGVuRGF0YWJhc2VzOyB9Ci0gICAgICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKERh
dGFiYXNlKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKik7Cisg
ICAgICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICAgICAg
dm9pZCByZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwogICAgICAgICAvLyBX
aGVuIHRoZSBkYXRhYmFzZSBjbGVhbnVwIGlzIGRvbmUsIGNsZWFudXBTeW5jIHdpbGwgYmUgc2ln
bmFsbGVkLgogICAgICAgICB2b2lkIHN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKik7CiAjZW5kaWYKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fZGF0
YWJhc2VUaHJlYWQ7CiAgICAgICAgIGJvb2wgbV9oYXNPcGVuRGF0YWJhc2VzOyAvLyBUaGlzIG5l
dmVyIGNoYW5nZXMgYmFjayB0byBmYWxzZSwgZXZlbiBhZnRlciB0aGUgZGF0YWJhc2UgdGhyZWFk
IGlzIGNsb3NlZC4KLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PERhdGFiYXNlKiA+IERhdGFiYXNl
U2V0OworICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSogPiBEYXRhYmFz
ZVNldDsKICAgICAgICAgT3duUHRyPERhdGFiYXNlU2V0PiBtX29wZW5EYXRhYmFzZVNldDsKICNl
bmRpZgogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2
MDU4MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsOSArMzAsMzkzIEBACiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcgc3RyaW5nSUQ7CisgICAgaWYgKG9yaWdp
bi5lbmRzV2l0aCgiLyIpKQorICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArIG5hbWU7CisgICAg
ZWxzZQorICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7CisKKyAgICAvLyBO
b3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVy
ZSBiZWNhdXNlIHRoaXMKKyAgICAvLyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29u
c3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkIG9yIHRoZSB3b3JrZXIncworICAgIC8vIGNvbnRl
eHQgdGhyZWFkIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlv
biBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlm
aWVyTXV0ZXgsICgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11
dGV4KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwg
KCkpOworICAgIGludCBndWlkID0gc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5n
SUQpOworICAgIGlmICghZ3VpZCkgeworICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlE
ID0gMTsKKyAgICAgICAgZ3VpZCA9IGN1cnJlbnROZXdHVUlEKys7CisgICAgICAgIHN0cmluZ0lk
ZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmluZ0lELCBndWlkKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZ3VpZDsKK30KKworc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQoreworICAgIC8vIE5vdGU6
IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJl
Y2F1c2UgdGhpcworICAgIC8vIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1
Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQgb3IgdGhlIHdvcmtlcidzCisgICAgLy8gY29udGV4dCB0
aHJlYWQgYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFy
ZSB1c2VkLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7CisgICAg
cmV0dXJuIG11dGV4OworfQorCit0eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1aWRWZXJz
aW9uTWFwOworc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKKyAgICByZXR1
cm4gbWFwOworfQorCisvLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgpLgorc3Rh
dGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJpbmcgbmV3
VmVyc2lvbikKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCisgICAg
QVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworCisgICAgLy8gTm90ZTogSXQgaXMgbm90
IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9uTWFwKCkg
bWFwLgorICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFkLCBidXQg
ZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KKyAgICAvLyBUaGUgY29weSgpIGZ1bmN0aW9u
IG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBjdXJyZW50
CisgICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBpbiBhIGNy
b3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRl
LWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCisKKyAgICAvLyBN
YXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCisgICAg
Z3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogbmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsKK30KKworc3RhdGljIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VWZXJzaW9uS2V5KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywga2V5LCAoIldlYktpdERhdGFiYXNlVmVyc2lvbktleSIpKTsKKyAgICByZXR1cm4ga2V5
OworfQorCitzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRl
RGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykK
K3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3Vs
dE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50
IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7
CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25l
KSB7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3Vs
dCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2Uo
U1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FM
UmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgdmFsdWUpOworCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3Rl
cCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIGJvb2wgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRydWU7CisKK3ZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisgICAg
aXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFi
YXNlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGlzRGF0YWJhc2VBdmFpbGFibGU7Cit9
CisKK0Fic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkp
CisgICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJp
bmcoKSkKKyAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmco
KSkKKyAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9jcmVhdGlv
bkNhbGxiYWNrKGNyZWF0aW9uQ2FsbGJhY2spCisgICAgLCBtX2d1aWQoMCkKKyAgICAsIG1fbmV3
KGZhbHNlKQorICAgICwgbV9vcGVuZWQoZmFsc2UpCisgICAgLCBtX3N0b3BwZWQoZmFsc2UpCisg
ICAgLCBtX2RlbGV0ZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlQXV0aG9yaXplcihEYXRhYmFz
ZUF1dGhvcml6ZXI6OmNyZWF0ZSgpKQoreworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuZ2V0KCkpOworICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOworCisgICAgaWYgKG1fbmFtZS5p
c051bGwoKSkKKyAgICAgICAgbV9uYW1lID0gIiI7CisKKyAgICBtX2d1aWQgPSBndWlkRm9yT3Jp
Z2luQW5kTmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKKworICAgIG1f
ZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNl
KHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CisKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7CisgICAgY29udGV4dC0+YWRkT3BlbkRhdGFiYXNl
KHRoaXMpOworfQorCitBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCit7Cit9
CisKK2NvbnN0IFN0cmluZyYgQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1l
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJfX1dlYktpdERh
dGFiYXNlSW5mb1RhYmxlX18iKSk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBBYnN0
cmFjdERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9kZWxldGVkKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgp
KTsKKyAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVD
b3B5KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c3RvcCgpCit7CisgICAgbV9zdG9w
cGVkID0gdHJ1ZTsKK30KKworLy8gSWYgd2Ugc2xlZXAgZm9yIG1vcmUgdGhlIDMwIHNlY29uZHMg
d2hpbGUgYmxvY2tlZCBvbiBTUUxJVEVfQlVTWSwgZ2l2ZSB1cC4KK3N0YXRpYyBjb25zdCBpbnQg
bWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3Nx
bGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gb3BlbiBkYXRhYmFzZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVu
dGFsQXV0b1ZhY3V1bSgpKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGlu
Y3JlbWVudGFsIGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWko
KS5kYXRhKCkpOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3Nx
bGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1f
c3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKwor
ICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihndWlkTXV0ZXgoKSk7CisKKyAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVu
dHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5
ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwg
c3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAg
ICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5n
KCIiKSA6IGVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJl
bnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisg
ICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZv
VGFibGVOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxF
ICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVM
TCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBjcmVhdGUgdGFibGUgJXMgaW4gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUu
CisgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJz
aW9uKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBjdXJyZW50
IHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
ICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAg
ICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9u
Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQg
Y3VycmVudCB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2Np
aSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSB7CisgICAgICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2Ug
JXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRh
KCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAg
IGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFi
YXNlICVzIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdO
YW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRo
ZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNs
b3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlk
LCBjdXJyZW50VmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudFZl
cnNpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBk
b2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOworICAgIH0KKworICAgIC8v
IElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJpbmcsIGVuc3VyZSB0
aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRjaGVzIHRoYXQgdmVy
c2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgorICAgIC8vIElmIHRoZSBleHBlY3Rl
ZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlzIHJldHVybiB3aXRo
IHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCisgICAgaWYgKCghbV9u
ZXcgfHwgIW1fY3JlYXRpb25DYWxsYmFjaykgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkg
JiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKKyAgICAgICAgTE9HKFN0
b3JhZ2VBUEksICJwYWdlIGV4cGVjdHMgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzLCB3aGlj
aCBhY3R1YWxseSBoYXMgdmVyc2lvbiBuYW1lICVzIC0gb3BlbkRhdGFiYXNlKCkgY2FsbCB3aWxs
IGZhaWwiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAgIGRh
dGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgLy8gQ2xv
c2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgbV9zcWxpdGVEYXRh
YmFzZS5jbG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQWxs
IGNoZWNrcyBwYXNzZWQgYW5kIHdlIHN0aWxsIGhhdmUgYSBoYW5kbGUgdG8gdGhpcyBkYXRhYmFz
ZSBmaWxlLgorICAgIC8vIE1ha2Ugc3VyZSBEYXRhYmFzZVRocmVhZCBjbG9zZXMgaXQgd2hlbiBE
YXRhYmFzZVRocmVhZCBnb2VzIGF3YXkuCisgICAgbV9vcGVuZWQgPSB0cnVlOworICAgIG5vdGlm
eURhdGFiYXNlVGhyZWFkRGF0YWJhc2VPcGVuKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcigpCit7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJs
ZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmVuYWJsZUF1dGhvcml6ZXIoKQorewor
ICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmVuYWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJS
ZWFkT25seSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2Rh
dGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXNldEF1dGhvcml6ZXIoKQoreworICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplcikK
KyAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Cit9CisKK2Jvb2wgQWJzdHJh
Y3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjps
YXN0QWN0aW9uV2FzSW5zZXJ0KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIp
OworICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgp
OworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCit7CisgICAgQVNT
RVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVz
ZXREZWxldGVzKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVsZXRlcygpCit7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpp
bmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUg
PSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6
ZSA9IG1fc3FsaXRlRGF0YWJhc2UudG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAx
MCAqIGZyZWVTcGFjZVNpemUpCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50
YWxWYWN1dW1Db21tYW5kKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lv
bkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGdldFZlcnNpb25RdWVyeSwgKCJTRUxFQ1QgdmFsdWUgRlJPTSAiICsgZGF0YWJh
c2VJbmZvVGFibGVOYW1lKCkgKyAiIFdIRVJFIGtleSA9ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5
KCkgKyAiJzsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworCisg
ICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVE
YXRhYmFzZSwgZ2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJz
aW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNl
IGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24g
bnVtYmVyLCBkdWUgdG8KKyAgICAvLyB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UgY2xh
dXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChzZWUgcGVyZm9ybU9wZW5BbmRWZXJpZnkoKSku
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNldFZlcnNpb25RdWVyeSwgKCJJTlNF
UlQgSU5UTyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXksIHZhbHVlKSBWQUxV
RVMgKCciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJywgPyk7IikpOworCisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZh
bHVlSW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBzZXRWZXJzaW9uUXVlcnkudGhyZWFkc2Fm
ZUNvcHkoKSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lp
KCkuZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9v
bCBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24g
PT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25z
dCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRo
cmVhZHNhZmVDb3B5KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2
ZXJzaW9uIG1hcC4KKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHVw
ZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgdmVyc2lvbik7Cit9CisKK3ZvaWQgQWJzdHJhY3RE
YXRhYmFzZTo6bm90aWZ5RGF0YWJhc2VUaHJlYWREYXRhYmFzZU9wZW4oKQoreworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViQ29yZS9z
dG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEw
MSBAQAogI2RlZmluZSBBYnN0cmFjdERhdGFiYXNlX2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJl
ZC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQWJzdHJhY3REYXRhYmFzZSB7CitjbGFz
cyBEYXRhYmFzZUF1dGhvcml6ZXI7CitjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCit0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVh
ZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFzZT4geworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IHNldElzQXZhaWxhYmxlKGJvb2wpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisK
KyAgICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7CisgICAgc3RhdGljIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7CisKKyAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpOyB9CisgICAgU1FMaXRlRGF0YWJhc2UmIHNx
bGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQorCisgICAgU3RyaW5n
IHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHko
KTsgfQorICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheU5h
bWUudGhyZWFkc2FmZUNvcHkoKTsgfQorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsgfQorICAgIFN0cmluZyBmaWxlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsgfQorICAgIGJvb2wg
aXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQorICAgIGJvb2wgb3BlbmVkKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVuZWQ7IH0KKyAgICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BwZWQ7IH0KKyAgICBib29sIGRlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkg
PSAwOworCisgICAgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkgPSAwOworCisgICAgdm9p
ZCBkaXNhYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOworICAg
IHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisgICAgdm9pZCByZXNldEF1dGhvcml6ZXIo
KTsKKyAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKKyAgICBib29sIGxhc3RB
Y3Rpb25XYXNJbnNlcnQoKTsKKyAgICB2b2lkIHJlc2V0RGVsZXRlcygpOworICAgIGJvb2wgaGFk
RGVsZXRlcygpOworCisgICAgdm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKKyAg
ICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJik7CisgICAgYm9vbCBzZXRWZXJz
aW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIHZlcnNpb25NYXRjaGVzRXhw
ZWN0ZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKSA9IDA7CisKK3By
b3RlY3RlZDoKKyAgICBBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKKworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlEYXRhYmFzZVRocmVhZERhdGFiYXNlT3BlbigpOworCisgICAgUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAg
IFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOworICAgIFN0cmlu
ZyBtX2Rpc3BsYXlOYW1lOworICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOworICAg
IFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7CisKKyAgICBpbnQg
bV9ndWlkOworCisgICAgYm9vbCBtX25ldzsKKyAgICBib29sIG1fb3BlbmVkOworICAgIGJvb2wg
bV9zdG9wcGVkOworICAgIGJvb2wgbV9kZWxldGVkOworCisgICAgUmVmUHRyPERhdGFiYXNlQXV0
aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7CisKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOworCisgICAgU3RyaW5nIG1fZmlsZW5h
bWU7CisKKyAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNlOworCisjaWZuZGVmIE5E
RUJVRworICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNzQgKzY0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0v
LyBJZiB3ZSBzbGVlcCBmb3IgbW9yZSB0aGUgMzAgc2Vjb25kcyB3aGlsZSBibG9ja2VkIG9uIFNR
TElURV9CVVNZLCBnaXZlIHVwLgotc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRp
bWUgPSAzMDAwMDsKLQotY29uc3QgU3RyaW5nJiBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVO
YW1lKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJfX1dlYktp
dERhdGFiYXNlSW5mb1RhYmxlX18iKSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzRGF0YWJhc2VBdmFpbGFibGUgPSB0cnVlOwotCi12b2lkIERhdGFiYXNlOjpzZXRJc0F2
YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLXsKLSAgICBpc0RhdGFiYXNlQXZhaWxhYmxlID0gYXZh
aWxhYmxlOwotfQotCi1ib29sIERhdGFiYXNlOjppc0F2YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJu
IGlzRGF0YWJhc2VBdmFpbGFibGU7Ci19Ci0KLXN0YXRpYyBNdXRleCYgZ3VpZE11dGV4KCkKLXsK
LSAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRT
dGF0aWMgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBp
biB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCi0gICAgLy8gYmVmb3JlIGFueSBv
dGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQot
Ci10eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1aWRWZXJzaW9uTWFwOwotc3RhdGljIEd1
aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi0vLyBO
T1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgpLgotc3RhdGljIGlubGluZSB2b2lkIHVw
ZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKLXsKLSAgICAv
LyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCi0gICAgQVNTRVJUKCFndWlkTXV0ZXgo
KS50cnlMb2NrKCkpOwotCi0gICAgLy8gTm90ZTogSXQgaXMgbm90IHNhZmUgdG8gcHV0IGFuIGVt
cHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFwLgotICAgIC8vIFRoYXQn
cyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1wdHkgc3RyaW5ncyBhcmUg
cGVyLXRocmVhZC4KLSAgICAvLyBUaGUgY29weSgpIGZ1bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBv
ZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBjdXJyZW50Ci0gICAgLy8gdGhyZWFkLCBi
dXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3NzLXRocmVhZCBkYXRhIHN0
cnVjdHVyZS4KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rp
b24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCi0KLSAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8g
ZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCi0gICAgZ3VpZFRvVmVyc2lvbk1hcCgp
LnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi50
aHJlYWRzYWZlQ29weSgpKTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxEYXRh
YmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOwotc3RhdGljIEd1aWREYXRhYmFzZU1hcCYgZ3VpZFRv
RGF0YWJhc2VNYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZERhdGFiYXNlTWFw
LCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZVZlcnNpb25LZXkoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBr
ZXksICgiV2ViS2l0RGF0YWJhc2VWZXJzaW9uS2V5IikpOwotICAgIHJldHVybiBrZXk7Ci19Ci0K
LXN0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0KIGNsYXNzIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQpAQCAtMTk4LDQ3ICsxMzAsMTUgQEAgUGFzc1JlZlB0
cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogfQogCiBEYXRhYmFzZTo6RGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNy
ZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKKyAg
ICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaykKKyAgICAsIG1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVk
KHRydWUpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
bmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2d1aWQoMCkKLSAgICAsIG1f
ZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQotICAg
ICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwg
bV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCi0gICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi0g
ICAgLCBtX3N0b3BwZWQoZmFsc2UpCi0gICAgLCBtX29wZW5lZChmYWxzZSkKLSAgICAsIG1fbmV3
KGZhbHNlKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNyZWF0aW9uQ2FsbGJhY2spCiB7CiAg
ICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCk7CisKICAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRl
eHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsKLSAgICBpZiAobV9uYW1l
LmlzTnVsbCgpKQotICAgICAgICBtX25hbWUgPSAiIjsKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5BbmRO
YW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOwotCi0gICAgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEhhc2hTZXQ8RGF0
YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAg
ICAgIGlmICghaGFzaFNldCkgewotICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNoU2V0PERh
dGFiYXNlKj47Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldChtX2d1aWQsIGhh
c2hTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMpOwotICAgIH0K
LQotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkp
OwotICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZv
ckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7Ci0KLSAgICBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7Ci0gICAgY29udGV4dC0+YWRkT3Bl
bkRhdGFiYXNlKHRoaXMpOwogfQogCiBjbGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpAQCAtMjY5LDcgKzE2OSw2IEBAIGJvb2wgRGF0
YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2UKIHsKICAgICBpZiAoIW1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoKTsK
IAogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXpl
ciBzeW5jaHJvbml6ZXI7CkBAIC0yODEsOTEgKzE4MCwxMCBAQCBib29sIERhdGFiYXNlOjpvcGVu
QW5kVmVyaWZ5VmVyc2lvbihFeGNlCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLQotc3RhdGlj
IGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwg
Y29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1l
bnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQg
cmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICByZXN1
bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBy
ZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJv
bSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OmdldFZlcnNpb25Gcm9t
RGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBnZXRWZXJzaW9uUXVlcnksICgiU0VMRUNUIHZhbHVlIEZST00gIiArIGRhdGFiYXNlSW5m
b1RhYmxlTmFtZSgpICsgIiBXSEVSRSBrZXkgPSAnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsg
Iic7IikpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAgIGJv
b2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJh
c2UsIGdldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBm
cm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0K
LSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNl
JiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1
ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKLQot
ICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHREb25lKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRv
IHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
RGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsK
LSAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhl
IGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRQotICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVu
dCAoc2VlIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSgpKS4KLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgc2V0VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBkYXRh
YmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFz
ZVZlcnNpb25LZXkoKSArICInLCA/KTsiKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1f
c3FsaXRlRGF0YWJhc2UsIHNldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9u
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZl
cnNpb24gJXMgaW4gZGF0YWJhc2UgKCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNldFZl
cnNpb25RdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIERhdGFiYXNlOjp2ZXJz
aW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKK3ZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlv
bkNhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgewot
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgICAgICByZXR1cm4g
bV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2NyZWF0aW9uQ2FsbGJhY2spCisgICAg
ICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LmdldCgpLCB0aGlzKTsKIH0KIAogdm9pZCBEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFuZENs
b3NlKCkKQEAgLTQxOCw3ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEYXRhYmFzZT4g
bV9kYXRhYmFzZTsKIH07CiAKLXZvaWQgRGF0YWJhc2U6OmNsb3NlKENsb3NlUG9saWN5IHBvbGlj
eSkKK3ZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DbG9zZShDbG9zZVBvbGljeSBwb2xpY3kpCiB7CiAg
ICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0ID0gdGhpczsKIApAQCAtNDMyLDI1ICsyNTAsMjQg
QEAgdm9pZCBEYXRhYmFzZTo6Y2xvc2UoQ2xvc2VQb2xpY3kgcG9saWN5KQogICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQo
dGhpcyk7CiAgICAgbV9vcGVuZWQgPSBmYWxzZTsKIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBIYXNoU2V0PERhdGFiYXNlKj4qIGhh
c2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOwotICAgICAgICBBU1NFUlQo
aGFzaFNldCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0LT5jb250YWlucyh0aGlzKSk7Ci0gICAg
ICAgIGhhc2hTZXQtPnJlbW92ZSh0aGlzKTsKLSAgICAgICAgaWYgKGhhc2hTZXQtPmlzRW1wdHko
KSkgewotICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5yZW1vdmUobV9ndWlkKTsKLSAg
ICAgICAgICAgIGRlbGV0ZSBoYXNoU2V0OwotICAgICAgICAgICAgZ3VpZFRvVmVyc2lvbk1hcCgp
LnJlbW92ZShtX2d1aWQpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlz
KTsKICAgICBpZiAocG9saWN5ID09IFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQpCiAgICAgICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soQ29udGV4dFJlbW92ZU9wZW5EYXRh
YmFzZVRhc2s6OmNyZWF0ZSh0aGlzKSk7CiB9CiAKK3ZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKK3sK
KyAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRhdGFiYXNlVGhyZWFkKCk7CisgICAgaWYgKCFkYXRhYmFzZVRocmVhZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBkYXRhYmFzZVRocmVhZC0+
Z2V0VGhyZWFkSUQoKSkgeworICAgICAgICBpZiAoIWRhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlv
blJlcXVlc3RlZCgpKQorICAgICAgICAgICAgZGF0YWJhc2VUaHJlYWQtPnNjaGVkdWxlVGFzayhE
YXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsIERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZy
b21Db250ZXh0LCAwKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBlcmZvcm1DbG9zZShEYXRhYmFz
ZTo6UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCk7Cit9CisKIHZvaWQgRGF0YWJhc2U6OnN0b3Ao
KQogewogICAgIC8vIEZJWE1FOiBUaGUgbmV0IGVmZmVjdCBvZiB0aGUgZm9sbG93aW5nIGNvZGUg
aXMgdG8gcmVtb3ZlIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBhbmQgc3RhdGVtZW50cywgYnV0
IGFsbG93IHRoZSBjdXJyZW50IHN0YXRlbWVudApAQCAtNDczLDc5ICsyOTAsNiBAQCB1bnNpZ25l
ZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplCiAgICAgcmV0dXJuIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAotdm9pZCBE
YXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0
aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VB
dXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci19Ci0KLXZv
aWQgRGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0
YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHko
KTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCi17Ci0g
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1
dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLX0KLQotYm9vbCBEYXRhYmFz
ZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3Jp
emVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNl
cnQoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cmVzZXREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldERl
bGV0ZXMoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6aGFkRGVsZXRlcygpCi17Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXIt
PmhhZERlbGV0ZXMoKTsKLX0KLQotc3RhdGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25z
dCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFN0cmluZyBzdHJp
bmdJRDsKLSAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCIvIikpCi0gICAgICAgIHN0cmluZ0lEID0g
b3JpZ2luICsgbmFtZTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgIi8i
ICsgbmFtZTsKLQotICAgIC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJ
bml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBi
ZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQu
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgc3RyaW5nSWRlbnRpZmllck11dGV4LCAo
KSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmluZ0lkZW50aWZpZXJNdXRleCk7Ci0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1aWRNYXA7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKLSAgICBp
bnQgZ3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKLSAgICBp
ZiAoIWd1aWQpIHsKLSAgICAgICAgc3RhdGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7Ci0gICAg
ICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOwotICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9H
VUlETWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGd1aWQ7Ci19
Ci0KLXZvaWQgRGF0YWJhc2U6OnJlc2V0QXV0aG9yaXplcigpCi17Ci0gICAgaWYgKG1fZGF0YWJh
c2VBdXRob3JpemVyKQotICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKLX0K
LQogdm9pZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNoZWNrcygpCiB7CiAgICAgLy8gRklYTUU6
IENvZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHdpbGwgbmVlZCB0byBiZSBydW4gdG8gZW5m
b3JjZSB0aGUgcGVyLW9yaWdpbiBzaXplIGxpbWl0IHRoZSBzcGVjIG1hbmRhdGVzLgpAQCAtNTYw
LDk0ICszMDQsNiBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShFeGNlcHRpb25Db2RlJiBlKQotewotICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5vcGVuKG1f
ZmlsZW5hbWUsIHRydWUpKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gZGF0
YWJhc2UgYXQgcGF0aCAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBl
ID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
aWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVt
IGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOwotCi0gICAgQVNT
RVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhv
cml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVz
eVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKLQotICAgIFN0cmluZyBjdXJyZW50VmVy
c2lvbjsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0K
LSAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1h
cCgpLmZpbmQobV9ndWlkKTsKLSAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAo
KS5lbmQoKSkgewotICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmlu
ZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNp
b24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7
Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9y
IGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVk
IHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOwotCi0gICAgICAgICAgICBpZiAoIW1fc3Fs
aXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9uZXcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0
ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwp
OyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0
YWJsZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpLmFzY2lpKCku
ZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICAvLyBD
bG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgICAg
ICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbikpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJh
c2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhl
IGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmxlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQgY3VycmVudCB2ZXJzaW9uICVzIGZy
b20gZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VE
ZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFtX25l
dyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVh
dGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1l
KCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0
YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIiwgbV9leHBlY3RlZFZl
cnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAg
ICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
dXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgewotICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNp
b24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGN1
cnJlbnRWZXJzaW9uID0gIiI7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNp
b24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJh
c2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBh
biBleGNlcHRpb24uCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5
IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0
aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KLSAgICBpZiAoKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxi
YWNrKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAh
PSBjdXJyZW50VmVyc2lvbikgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0
cyB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMsIHdoaWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9u
IG5hbWUgJXMgLSBvcGVuRGF0YWJhc2UoKSBjYWxsIHdpbGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAgICAgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBlID0g
SU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRh
dGFiYXNlIGZpbGUuCi0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEFsbCBjaGVja3MgcGFzc2VkIGFuZCB3ZSBz
dGlsbCBoYXZlIGEgaGFuZGxlIHRvIHRoaXMgZGF0YWJhc2UgZmlsZS4KLSAgICAvLyBNYWtlIHN1
cmUgRGF0YWJhc2VUaHJlYWQgY2xvc2VzIGl0IHdoZW4gRGF0YWJhc2VUaHJlYWQgZ29lcyBhd2F5
LgotICAgIG1fb3BlbmVkID0gdHJ1ZTsKLSAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRh
dGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjaykKQEAgLTY4OSw4ICszNDUsNyBAQCB2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5z
YWN0aW9uKCkKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJh
bnNhY3Rpb25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFzay5nZXQoKSwgdGFzay0+
dHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsK
ICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hl
ZHVsZVRhc2sodGFzay5yZWxlYXNlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBtX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBEYXRhYmFzZTo6c2NoZWR1
bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIGltbWVk
aWF0ZWx5KQpAQCAtNzYxLDExICs0MTYsNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVy
Zm9ybUdldFRhYmxlCiAgICAgcmV0dXJuIHRhYmxlTmFtZXM7CiB9CiAKLXZvaWQgRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkKLXsKLSAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhh
bmRsZUV2ZW50KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgdGhpcyk7Ci19Ci0KIFNR
TFRyYW5zYWN0aW9uQ2xpZW50KiBEYXRhYmFzZTo6dHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkt
PnRyYW5zYWN0aW9uQ2xpZW50KCk7CkBAIC03NzYsMTQgKzQyNiw2IEBAIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IqIERhdGFiYXNlOjp0cmEKICAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CiB9CiAK
LVN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZGVsZXRlZCkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0
ZXgoKSk7Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRz
YWZlQ29weSgpOwotfQotCiBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB1c2luZyB0aHJlYWRzYWZlQ29weSBvbiB0aGVzZSBzdHJpbmdz
IGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKQEAgLTgwMSwxNCArNDQz
LDYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJp
bmcmIHZlcnNpb24pCi17Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNh
ZmVDb3B5KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBt
YXAuCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICB1cGRhdGVHdWlk
VmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24pOwotfQotCiBTZWN1cml0eU9yaWdpbiogRGF0YWJh
c2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKQEAgLTgxOCwzNSArNDUyLDEwIEBAIFNlY3VyaXR5
T3JpZ2luKiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4KICAgICByZXR1cm4gMDsKIH0KIAotU3Ry
aW5nIERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4g
YSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1f
bmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmRpc3BsYXlOYW1l
KCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0
aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlzcGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsK
LX0KLQotdW5zaWduZWQgbG9uZyBEYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0KLQotU3RyaW5nIERhdGFiYXNlOjpmaWxlTmFt
ZSgpIGNvbnN0Cit2b2lkIERhdGFiYXNlOjpub3RpZnlEYXRhYmFzZVRocmVhZERhdGFiYXNlT3Bl
bigpCiB7Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFk
IHNhZmV0eQotICAgIHJldHVybiBtX2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KLXZv
aWQgRGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQotewotICAgIGludDY0X3Qg
ZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwotICAgIGlu
dDY0X3QgdG90YWxTaXplID0gbV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKLSAgICBpZiAo
dG90YWxTaXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkKLSAgICAgICAgbV9zcWxpdGVEYXRhYmFz
ZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQorICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYwNTgw
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDIw
ICszMCwxNCBAQAogI2RlZmluZSBEYXRhYmFzZV9oCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCisj
aW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKLSNlbmRpZgotCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRh
YmFzZUF1dGhvcml6ZXI7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwotY2xhc3MgRGF0YWJhc2VU
aHJlYWQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmln
aW47CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKQEAgLTU1LDEyMiArNDksNjYgQEAgY2xhc3MgVm9p
ZENhbGxiYWNrOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBEYXRhYmFz
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlPiB7CitjbGFzcyBEYXRhYmFzZSA6
IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRJ
c0F2YWlsYWJsZShib29sKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotCi0gICAg
fkRhdGFiYXNlKCk7CisgICAgdmlydHVhbCB+RGF0YWJhc2UoKTsKIAogICAgIC8vIERpcmVjdCBz
dXBwb3J0IGZvciB0aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBv
cGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OwogICAgIHZvaWQgY2hhbmdlVmVy
c2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpOwogCi0gICAgLy8gSW50ZXJuYWwg
ZW5naW5lIHN1cHBvcnQKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUoKTsKLQotICAgIHZvaWQgZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIGVuYWJs
ZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIHNldEF1dGhvcml6ZXJSZWFkT25seSgpOwotICAgIGJv
b2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbldhc0lu
c2VydCgpOwotICAgIHZvaWQgcmVzZXREZWxldGVzKCk7Ci0gICAgYm9vbCBoYWREZWxldGVzKCk7
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiB0YWJsZU5hbWVzKCk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LmdldCgpOyB9Ci0gICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29u
c3Q7Ci0gICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxp
dGVEYXRhYmFzZTsgfQotICAgIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAg
U3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7Ci0KLSAgICBib29sIGdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJik7Ci0gICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRh
YmFzZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBT
dHJpbmcmKTsKLSAgICBib29sIHZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCi0gICAgdm9p
ZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKLSAgICBib29sIGRlbGV0ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2RlbGV0ZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3Nl
KCk7CiAKICAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9Ob3RSZW1vdmVEYXRhYmFzZUZyb21Db250
ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07Ci0gICAgdm9pZCBjbG9zZShDbG9zZVBv
bGljeSk7Ci0gICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQotCi0g
ICAgdm9pZCBzdG9wKCk7Ci0gICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdG9w
cGVkOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KKyAgICB2
b2lkIHBlcmZvcm1DbG9zZShDbG9zZVBvbGljeSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRh
YmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBj
b25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIERhdGFiYXNlVGhyZWFkLCBtdXN0IGJlIHByZXBh
cmVkIHRvIHdvcmsgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCByZXNldEF1dGhv
cml6ZXIoKTsKICAgICB2b2lkIHBlcmZvcm1Qb2xpY3lDaGVja3MoKTsKIAotICAgIGJvb2wgcGVy
Zm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+IHBl
cmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKICAgICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNv
bXBsZXRlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5z
YWN0aW9uKik7CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlv
biosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxzZSk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBwZXJm
b3JtR2V0VGFibGVOYW1lcygpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKTsK
LQogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0Owog
ICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBj
b25zdDsKIAotICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwotCiBwcml2YXRl
OgogICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGF0YWJhc2VU
aHJlYWREYXRhYmFzZU9wZW4oKTsKKwogICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBz
dGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKKwogICAgIERlcXVlPFJl
ZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dy
ZXNzOwogICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOwogCi0gICAgc3RhdGlj
IHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47Ci0gICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICBpbnQgbV9ndWlkOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lv
bjsKLSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1h
dGVkU2l6ZTsKLSAgICBTdHJpbmcgbV9maWxlbmFtZTsKIAogICAgIGJvb2wgbV9kZWxldGVkOwot
Ci0gICAgYm9vbCBtX3N0b3BwZWQ7Ci0KLSAgICBib29sIG1fb3BlbmVkOwotCi0gICAgYm9vbCBt
X25ldzsKLQotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0gICAgUmVmUHRy
PERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7Ci0KLSAgICBSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNjA1ODApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogCi0jaW5j
bHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzk4LDcgKzM5
OCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGUKICAgICAvLyAg
ICBlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsICJzcWxpdGVfc2VxdWVuY2UiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUo
KSkpCiAgICAgLy8gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSh0YWJsZU5hbWUsIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkp
CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgQWJzdHJhY3REYXRhYmFzZTo6
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAK
ICAgICByZXR1cm4gU1FMQXV0aEFsbG93OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAJ
KHJldmlzaW9uIDYwNTgwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBEYXRhYmFzZUNsb3NlVGFzazo6RGF0YWJh
c2VDbG9zZVRhc2soRGF0CiAKIHZvaWQgRGF0YWJhc2VDbG9zZVRhc2s6OmRvUGVyZm9ybVRhc2so
KQogewotICAgIGRhdGFiYXNlKCktPmNsb3NlKG1fY2xvc2VQb2xpY3kpOworICAgIGRhdGFiYXNl
KCktPnBlcmZvcm1DbG9zZShtX2Nsb3NlUG9saWN5KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkocmV2aXNpb24gNjA1ODApCisrKyBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiQXV0b2RyYWluZWRQb29sLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKQEAgLTExMyw3ICsxMTQsNyBAQCB2b2lkKiBE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBvcGVuU2V0Q29weS5zd2Fw
KG1fb3BlbkRhdGFiYXNlU2V0KTsKICAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9
IG9wZW5TZXRDb3B5LmVuZCgpOwogICAgICAgICBmb3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBp
dCA9IG9wZW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgKCpp
dCktPmNsb3NlKERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0KTsKKyAgICAgICAg
ICAgICgqaXQpLT5jbG9zZSgpOwogICAgIH0KIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNv
IGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxz
ZQpAQCAtMTU4LDEzICsxNTksMTMgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVJbW1l
ZGlhdGVUYQogCiBjbGFzcyBTYW1lRGF0YWJhc2VQcmVkaWNhdGUgewogcHVibGljOgotICAgIFNh
bWVEYXRhYmFzZVByZWRpY2F0ZShjb25zdCBEYXRhYmFzZSogZGF0YWJhc2UpIDogbV9kYXRhYmFz
ZShkYXRhYmFzZSkgeyB9CisgICAgU2FtZURhdGFiYXNlUHJlZGljYXRlKGNvbnN0IEFic3RyYWN0
RGF0YWJhc2UqIGRhdGFiYXNlKSA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpIHsgfQogICAgIGJvb2wg
b3BlcmF0b3IoKShEYXRhYmFzZVRhc2sqIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2stPmRhdGFi
YXNlKCkgPT0gbV9kYXRhYmFzZTsgfQogcHJpdmF0ZToKLSAgICBjb25zdCBEYXRhYmFzZSogbV9k
YXRhYmFzZTsKKyAgICBjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBtX2RhdGFiYXNlOwogfTsKIAot
dm9pZCBEYXRhYmFzZVRocmVhZDo6dW5zY2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqIGRh
dGFiYXNlKQordm9pZCBEYXRhYmFzZVRocmVhZDo6dW5zY2hlZHVsZURhdGFiYXNlVGFza3MoQWJz
dHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgLy8gTm90ZSB0aGF0IHRoZSB0aHJlYWQg
bG9vcCBpcyBydW5uaW5nLCBzbyBzb21lIHRhc2tzIGZvciB0aGUgZGF0YWJhc2UKICAgICAvLyBt
YXkgc3RpbGwgYmUgZXhlY3V0ZWQuIFRoaXMgaXMgdW5hdm9pZGFibGUuCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUaHJlYWQuaAkocmV2aXNpb24gNjA1ODApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZTsK
IGNsYXNzIERhdGFiYXNlVGFzazsKIGNsYXNzIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjsKQEAg
LTU5LDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc093blB0
cjxEYXRhYmFzZVRhc2s+KTsKICAgICB2b2lkIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzT3du
UHRyPERhdGFiYXNlVGFzaz4pOyAvLyBUaGlzIGp1c3QgYWRkcyB0aGUgdGFzayB0byB0aGUgZnJv
bnQgb2YgdGhlIHF1ZXVlIC0gdGhlIGNhbGxlciBuZWVkcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1
bCBub3QgdG8gY3JlYXRlIGRlYWRsb2NrcyB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uCi0g
ICAgdm9pZCB1bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSopOworICAgIHZvaWQgdW5z
Y2hlZHVsZURhdGFiYXNlVGFza3MoQWJzdHJhY3REYXRhYmFzZSopOwogCiAgICAgdm9pZCByZWNv
cmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqKTsKICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2Vk
KERhdGFiYXNlKik7CkBAIC04MSw2ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgTWVzc2FnZVF1ZXVl
PERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKIAogICAgIC8vIFRoaXMgc2V0IGtlZXBzIHRyYWNrIG9m
IHRoZSBvcGVuIGRhdGFiYXNlcyB0aGF0IGhhdmUgYmVlbiB1c2VkIG9uIHRoaXMgdGhyZWFkLgor
ICAgIC8vIE9ubHkgYXN5bmMgREJzIHNob3VsZCB1c2UgdGhpcyB0aHJlYWQuCiAgICAgdHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiBEYXRhYmFzZVNldDsKICAgICBEYXRhYmFzZVNl
dCBtX29wZW5EYXRhYmFzZVNldDsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJh
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5j
cHAJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMjE5LDcgKzIxOSw3IEBAIGJvb2wgRGF0YWJhc2VU
cmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKICAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxSZXN1bHRSb3c7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZSogZGF0YWJhc2UpCit1bnNpZ25l
ZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3Qg
QWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgp
LT5nZXRUaHJlYWRJRCgpKTsKICAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBhIGRhdGFiYXNl
IGlzIHRoZSBmdWxsIHF1b3RhIGZvciBpdHMgb3JpZ2luLCBtaW51cyB0aGUgY3VycmVudCB1c2Fn
ZSB3aXRoaW4gdGhlIG9yaWdpbiwKQEAgLTIzMCw3ICsyMzAsNyBAQCB1bnNpZ25lZCBsb25nIGxv
bmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNCiAgICAgcmV0dXJuIHF1b3RhRm9yT3JpZ2luTm9Mb2Nr
KG9yaWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKSArIFNRTGl0
ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2UtPmZpbGVOYW1lKCkpOwog
fQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNlKiBkYXRh
YmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUNoYW5nZWQoQWJzdHJhY3REYXRh
YmFzZSogZGF0YWJhc2UpCiB7CiAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFN
YW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICBvcmlnaW5RdW90YU1hbmFn
ZXIoKS5tYXJrRGF0YWJhc2UoZGF0YWJhc2UpOwpAQCAtNDc5LDcgKzQ3OSw3IEBAIHVuc2lnbmVk
IGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWcKICAgICByZXR1cm4gU1FMaXRlRmlsZVN5
c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAg
IGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhCiAgICAgZG9uZUNyZWF0aW5nRGF0
YWJhc2UoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlm
aWVyKCkpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERh
dGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJh
c2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgaWYgKCFkYXRhYmFzZSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpy
ZW1vdmVPcGVuRGF0YWJhc2UKICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVPcmlnaW4o
ZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6
Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpCit2b2lkIERhdGFiYXNl
VHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNl
cykKIHsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNl
TWFwR3VhcmQpOwogICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCkBAIC05NzMsNyArOTczLDcg
QEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZQogICAgIH0KICNlbmRp
ZgogCi0gICAgVmVjdG9yPFJlZlB0cjxEYXRhYmFzZT4gPiBkZWxldGVkRGF0YWJhc2VzOworICAg
IFZlY3RvcjxSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gPiBkZWxldGVkRGF0YWJhc2VzOwogCiAg
ICAgLy8gTWFrZSBzdXJlIG5vdCB0byBob2xkIHRoZSBhbnkgbG9ja3Mgd2hlbiBjYWxsaW5nCiAg
ICAgLy8gRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpLCBzaW5jZSB0aGF0IGNhbiBj
YXVzZSBhIGRlYWRsb2NrCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCShyZXZpc2lv
biA2MDU4MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERh
dGFiYXNlOworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNzAsMTcgKzcwLDE3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplKTsKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUp
OwogCi0gICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqKTsKLSAgICB2b2lkIHJlbW92
ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgIHZvaWQgZ2V0T3BlbkRhdGFiYXNlcyhTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERh
dGFiYXNlPiA+KiBkYXRhYmFzZXMpOworICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0
RGF0YWJhc2UqKTsKKyAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNl
Kik7CisgICAgdm9pZCBnZXRPcGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gPiogZGF0
YWJhc2VzKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2Uo
Y29uc3QgRGF0YWJhc2UqKTsKLSAgICB2b2lkIGRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZSopOwor
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJh
Y3REYXRhYmFzZSopOworICAgIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2Uq
KTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZVBhdGgpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PERhdGFiYXNlKj4gRGF0YWJhc2VTZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiBEYXRhYmFzZVNldDsKICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+IERhdGFiYXNlTmFtZU1hcDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRGF0YWJhc2VOYW1lTWFw
KiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBEYXRhYmFzZU9yaWdpbk1hcDsKIApJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViQ29y
ZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIk9yaWdpblVzYWdlUmVj
b3JkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIE9y
aWdpblF1b3RhTWFuYWdlcjo6cmVtb3ZlT3JpZ2luKFNlCiAgICAgfQogfQogCi12b2lkIE9yaWdp
blF1b3RhTWFuYWdlcjo6bWFya0RhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgT3Jp
Z2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2Up
CiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICBBU1NFUlQobV91c2FnZVJlY29yZEd1YXJk
TG9ja2VkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgJKHJldmlzaW9u
IDYwNTgwKQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RGF0YWJhc2U7CitjbGFzcyBBYnN0cmFjdERhdGFiYXNlOwogY2xhc3MgT3JpZ2luVXNhZ2VSZWNv
cmQ7CiAKIGNsYXNzIE9yaWdpblF1b3RhTWFuYWdlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CkBA
IC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcmVt
b3ZlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAKLSAgICB2b2lkIG1hcmtEYXRhYmFzZShEYXRh
YmFzZSopOyAvLyBNYXJrIGRpcnRpbmVzcyBvZiBhIHNwZWNpZmljIGRhdGFiYXNlLgorICAgIHZv
aWQgbWFya0RhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsgLy8gTWFyayBkaXJ0aW5lc3Mgb2Yg
YSBzcGVjaWZpYyBkYXRhYmFzZS4KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGlza1VzYWdlKFNl
Y3VyaXR5T3JpZ2luKikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
Y2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViQ29y
ZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlOwor
Y2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBj
bGFzcyBTdHJpbmc7CiAKQEAgLTQyLDkgKzQyLDkgQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgRGF0
YWJhc2VPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuRXN0YWJsaXNoRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIGxvbmcpOwotICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3BlbmVkKERhdGFi
YXNlKik7Ci0gICAgc3RhdGljIHZvaWQgZGF0YWJhc2VNb2RpZmllZChEYXRhYmFzZSopOwotICAg
IHN0YXRpYyB2b2lkIGRhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CisgICAgc3RhdGljIHZvaWQg
ZGF0YWJhc2VPcGVuZWQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFi
YXNlTW9kaWZpZWQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNl
Q2xvc2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNp
b24gNjA1ODApCisrKyBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZU9i
c2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJRdW90YVRy
YWNrZXIuaCIKQEAgLTcyLDcgKzcyLDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBh
dGhGb3JEYXRhYgogICAgIHJldHVybiBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi8i
ICsgbmFtZSArICIjIjsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFi
YXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgTXV0ZXhM
b2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKQEAgLTk5
LDcgKzk5LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYQogCiBj
bGFzcyBUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUcmFja2Vy
UmVtb3ZlT3BlbkRhdGFiYXNlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFi
YXNlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNrZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBuZXcgVHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2soZGF0YWJhc2Up
OwogICAgIH0KQEAgLTExMCwxNSArMTEwLDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgVHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4g
ZGF0YWJhc2UpCisgICAgVHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2soUGFzc1JlZlB0cjxB
YnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKICAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAg
UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiB9OwogCi12b2lkIERhdGFiYXNl
VHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0
YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpCiB7CiAgICAgaWYgKCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Nv
bnRleHRUaHJlYWQoKSkgewogICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5wb3N0VGFzayhUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKGRhdGFi
YXNlKSk7CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9w
ZW5EYXRhYmFzZQogfQogCiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2Vz
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQ
dHI8RGF0YWJhc2U+ID4qIGRhdGFiYXNlcykKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVu
RGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFz
aFNldDxSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKQogewogICAgIE11dGV4
TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CiAgICAg
aWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTCiAgICAgICAgIGRhdGFiYXNlcy0+YWRkKCppdCk7
CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JE
YXRhYmFzZShjb25zdCBEYXRhYmFzZSogZGF0YWJhc2UpCit1bnNpZ25lZCBsb25nIGxvbmcgRGF0
YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFz
ZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgp
KTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUgPSAwOwpJbmRleDogV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gNjA1ODApCisrKyBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw3ICsyNzEsNyBAQCBO
b3RpZmljYXRpb25DZW50ZXIqIFdvcmtlckNvbnRleHQ6OndlYmtpCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQogUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
aWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8ICFEYXRhYmFzZTo6
aXNBdmFpbGFibGUoKSkgeworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0
YWJhc2UoKSB8fCAhQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgewogICAgICAgICBl
YyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNi0wMiAgRHVtaXRydSBEYW5pbGl1YyAg
PGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZsYWcgdGhhdCBkZXRlcm1p
bmVzIGlmIERCcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBzcmMvV2ViRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZUltbWVkaWF0
ZWx5KToKKyAgICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQpOgorCiAyMDEwLTA2LTAy
ICBTdGVybGluZyBTd2lnYXJ0ICA8c3N3aWdhcnRAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRhdGFiYXNl
LmgJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhYmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiV2ViU2VjdXJp
dHlPcmlnaW4uaCIKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotbmFtZXNwYWNlIFdlYkNv
cmUgeyBjbGFzcyBEYXRhYmFzZTsgfQorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBBYnN0cmFj
dERhdGFiYXNlOyB9CiBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFBhc3NSZWZQdHI7IH0KICNlbmRpZgogCkBAIC03Niw5ICs3Niw5IEBAIHB1YmxpYzoKICAgICAg
ICAgY29uc3QgV2ViU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIGRh
dGFiYXNlTmFtZSk7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJEYXRhYmFz
ZShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RGF0YWJhc2U+Jik7Ci0gICAgV2ViRGF0
YWJhc2UmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RGF0YWJhc2U+
Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRhdGFiYXNlPigpIGNv
bnN0OworICAgIFdlYkRhdGFiYXNlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlPiYpOworICAgIFdlYkRhdGFiYXNlJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U+Jik7CisgICAgb3BlcmF0b3IgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U+KCkgY29uc3Q7CiAjZW5kaWYK
IAogcHJpdmF0ZToKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNw
cAkocmV2aXNpb24gNjA1ODApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxOSArNjUsMTkgQEAgYm9vbCBEYXRhYmFzZU9i
c2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIERh
dGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQg
RGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
Q29udGV4dFRocmVhZCgpKTsKICAgICBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VP
cGVuZWQoV2ViRGF0YWJhc2UoZGF0YWJhc2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZU9ic2VydmVy
OjpkYXRhYmFzZU1vZGlmaWVkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VPYnNl
cnZlcjo6ZGF0YWJhc2VNb2RpZmllZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAg
ICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOwogICAgIFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5kYXRhYmFzZU1vZGlmaWVkKFdl
YkRhdGFiYXNlKGRhdGFiYXNlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJh
c2VDbG9zZWQoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZU9ic2VydmVyOjpkYXRh
YmFzZUNsb3NlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAg
IFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5kYXRhYmFzZUNsb3NlZChXZWJEYXRhYmFzZShkYXRh
YmFzZSkpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYw
NTgwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJE
YXRhYmFzZS5oIgogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
aHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKQEAgLTUwLDcgKzUwLDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBXZWJEYXRhYmFzZU9ic2VydmVyKiBkYXRhYmFz
ZU9ic2VydmVyID0gMDsKIAotY2xhc3MgV2ViRGF0YWJhc2VQcml2YXRlIDogcHVibGljIERhdGFi
YXNlIHsKK2NsYXNzIFdlYkRhdGFiYXNlUHJpdmF0ZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNl
IHsKIH07CiAKIHZvaWQgV2ViRGF0YWJhc2U6OnJlc2V0KCkKQEAgLTExMCwzNCArMTEwLDMwIEBA
IHZvaWQgV2ViRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIAogdm9pZCBXZWJEYXRhYmFz
ZTo6Y2xvc2VEYXRhYmFzZUltbWVkaWF0ZWx5KGNvbnN0IFdlYlN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciwgY29uc3QgV2ViU3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7Ci0gICAgSGFzaFNldDxSZWZQ
dHI8RGF0YWJhc2U+ID4gZGF0YWJhc2VIYW5kbGVzOworICAgIEhhc2hTZXQ8UmVmUHRyPEFic3Ry
YWN0RGF0YWJhc2U+ID4gZGF0YWJhc2VIYW5kbGVzOwogICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpblBycChXZWJTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRl
bnRpZmllcihvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBv
cmlnaW4gPSBvcmlnaW5QcnA7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0T3Bl
bkRhdGFiYXNlcyhvcmlnaW4uZ2V0KCksIGRhdGFiYXNlTmFtZSwgJmRhdGFiYXNlSGFuZGxlcyk7
Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPjo6aXRlcmF0b3IgaXQgPSBkYXRh
YmFzZUhhbmRsZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VIYW5kbGVzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRGF0YWJh
c2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkID0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlVGhyZWFkICYmICFk
YXRhYmFzZVRocmVhZC0+dGVybWluYXRpb25SZXF1ZXN0ZWQoKSkgewotICAgICAgICAgICAgZGF0
YWJhc2UtPnN0b3AoKTsKLSAgICAgICAgICAgIGRhdGFiYXNlVGhyZWFkLT5zY2hlZHVsZVRhc2so
RGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZShkYXRhYmFzZSwgRGF0YWJhc2U6OlJlbW92ZURhdGFi
YXNlRnJvbUNvbnRleHQsIDApKTsKLSAgICAgICAgfQorICAgIGZvciAoSGFzaFNldDxSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4gPjo6aXRlcmF0b3IgaXQgPSBkYXRhYmFzZUhhbmRsZXMuYmVnaW4o
KTsgaXQgIT0gZGF0YWJhc2VIYW5kbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGl0LT5nZXQo
KS0+c3RvcCgpOworICAgICAgICBpdC0+Z2V0KCktPmNsb3NlKCk7CiAgICAgfQogfQogCi1XZWJE
YXRhYmFzZTo6V2ViRGF0YWJhc2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPERhdGFiYXNlPiYgZGF0
YWJhc2UpCitXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPEFi
c3RyYWN0RGF0YWJhc2U+JiBkYXRhYmFzZSkKICAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxX
ZWJEYXRhYmFzZVByaXZhdGUqPihkYXRhYmFzZS5yZWxlYXNlUmVmKCkpKQogewogfQogCi1XZWJE
YXRhYmFzZSYgV2ViRGF0YWJhc2U6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8RGF0
YWJhc2U+JiBkYXRhYmFzZSkKK1dlYkRhdGFiYXNlJiBXZWJEYXRhYmFzZTo6b3BlcmF0b3I9KGNv
bnN0IFdURjo6UGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiYgZGF0YWJhc2UpCiB7CiAgICAg
YXNzaWduKHN0YXRpY19jYXN0PFdlYkRhdGFiYXNlUHJpdmF0ZSo+KGRhdGFiYXNlLnJlbGVhc2VS
ZWYoKSkpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotV2ViRGF0YWJhc2U6Om9wZXJhdG9yIFdU
Rjo6UGFzc1JlZlB0cjxEYXRhYmFzZT4oKSBjb25zdAorV2ViRGF0YWJhc2U6Om9wZXJhdG9yIFdU
Rjo6UGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBh
c3NSZWZQdHI8RGF0YWJhc2U+KGNvbnN0X2Nhc3Q8V2ViRGF0YWJhc2VQcml2YXRlKj4obV9wcml2
YXRlKSk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4oY29uc3RfY2Fz
dDxXZWJEYXRhYmFzZVByaXZhdGUqPihtX3ByaXZhdGUpKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFz
ZTo6YXNzaWduKFdlYkRhdGFiYXNlUHJpdmF0ZSogZCkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUnVudGltZUZlYXR1
cmVzLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJh
c2UuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCkBAIC00Mywx
NCArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6
ZW5hYmxlRGF0YWJhc2UoYm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAg
IERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShlbmFibGUpOworICAgIEFic3RyYWN0RGF0YWJhc2U6
OnNldElzQXZhaWxhYmxlKGVuYWJsZSk7CiAjZW5kaWYKIH0KIAogYm9vbCBXZWJSdW50aW1lRmVh
dHVyZXM6OmlzRGF0YWJhc2VFbmFibGVkKCkKIHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAg
cmV0dXJuIERhdGFiYXNlOjppc0F2YWlsYWJsZSgpOworICAgIHJldHVybiBBYnN0cmFjdERhdGFi
YXNlOjppc0F2YWlsYWJsZSgpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKSW5k
ZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1p
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmbGFnIHRoYXQgZGV0ZXJtaW5lcyBp
ZiBEQnMgc2hvdWxkIGJlIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3VwZGF0ZV9zZXR0aW5ncyk6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5KToKKyAgICAgICAgKHdlYmtpdF9nZXRf
Y2FjaGVfbW9kZWwpOgorCiAyMDEwLTA2LTAxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNjA1ODApCisrKyBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAog
I2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3
YXJkTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3Rr
LmgiCkBAIC00OSw3ICs1MCw2IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRl
ICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJEcmFnQ2xpZW50R3RrLmgiCkBAIC0yNzMwLDcgKzI3MzAsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfdXBkYXRlX3NldHRpCiAgICAgc2V0dGluZ3Mt
PnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZW5hYmxlUHJpdmF0ZUJyb3dzaW5nKTsKICAgICBz
ZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZW5hYmxlQ2FyZXRCcm93c2luZyk7CiAj
aWYgRU5BQkxFKERBVEFCQVNFKQotICAgIERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShlbmFibGVI
VE1MNURhdGFiYXNlKTsKKyAgICBBYnN0cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShlbmFi
bGVIVE1MNURhdGFiYXNlKTsKICNlbmRpZgogICAgIHNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VF
bmFibGVkKGVuYWJsZUhUTUw1TG9jYWxTdG9yYWdlKTsKICAgICBzZXR0aW5ncy0+c2V0WFNTQXVk
aXRvckVuYWJsZWQoZW5hYmxlWFNTQXVkaXRvcik7CkBAIC0yODIzLDcgKzI4MjMsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90CiAgICAgICAgIHNldHRpbmdzLT5z
ZXRDYXJldEJyb3dzaW5nRW5hYmxlZChnX3ZhbHVlX2dldF9ib29sZWFuKCZ2YWx1ZSkpOwogI2lm
IEVOQUJMRShEQVRBQkFTRSkKICAgICBlbHNlIGlmIChuYW1lID09IGdfaW50ZXJuX3N0cmluZygi
ZW5hYmxlLWh0bWw1LWRhdGFiYXNlIikpIHsKLSAgICAgICAgRGF0YWJhc2U6OnNldElzQXZhaWxh
YmxlKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CisgICAgICAgIEFic3RyYWN0RGF0YWJh
c2U6OnNldElzQXZhaWxhYmxlKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CiAgICAgfQog
I2VuZGlmCiAgICAgZWxzZSBpZiAobmFtZSA9PSBnX2ludGVybl9zdHJpbmcoImVuYWJsZS1odG1s
NS1sb2NhbC1zdG9yYWdlIikpCkBAIC00NDUwLDQgKzQ0NTAsMyBAQCBXZWJLaXRDYWNoZU1vZGVs
IHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwoCiAgICAgd2Via2l0X2luaXQoKTsKICAgICByZXR1cm4g
Y2FjaGVNb2RlbDsKIH0KLQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0wMiAgRHVt
aXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZs
YWcgdGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdl
ZE5vdGlmaWNhdGlvbjpdKToKKwogMjAxMC0wNi0wMiAgU3RlcmxpbmcgU3dpZ2FydCAgPHNzd2ln
YXJ0QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNjA1ODApCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEzICsxMDMsMTMgQEAKICNpbXBv
cnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0Fic3RyYWN0RGF0YWJhc2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRMaXN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9DdXJzb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRGF0YWJhc2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KQEAgLTEzNTYsNyArMTM1Niw3
IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjoKICAgICBzZXR0aW5n
cy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShbcHJlZmVyZW5jZXMgbWluaW11bUxvZ2ljYWxG
b250U2l6ZV0pOwogICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZChbcHJlZmVyZW5jZXMg
YXJlUGx1Z0luc0VuYWJsZWRdKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2U6
OnNldElzQXZhaWxhYmxlKFtwcmVmZXJlbmNlcyBkYXRhYmFzZXNFbmFibGVkXSk7CisgICAgQWJz
dHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoW3ByZWZlcmVuY2VzIGRhdGFiYXNlc0VuYWJs
ZWRdKTsKICNlbmRpZgogICAgIHNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKFtwcmVm
ZXJlbmNlcyBsb2NhbFN0b3JhZ2VFbmFibGVkXSk7CiAgICAgc2V0dGluZ3MtPnNldEV4cGVyaW1l
bnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyBleHBlcmltZW50YWxOb3RpZmlj
YXRpb25zRW5hYmxlZF0pOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0wMiAgRHVtaXRy
dSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZsYWcg
dGhhdCBkZXRlcm1pbmVzIGlmIERCcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBBcGkv
cXdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5KToK
KwogMjAxMC0wNi0wMSAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJL
aXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnNl
dHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUgInF3
ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxd2VicGx1Z2luZGF0YWJhc2VfcC5oIgogCisjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VD
YWNoZS5oIgpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBw
bHkoKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZh
bHVlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShR
V2ViU2V0dGluZ3M6Ok9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKSk7Ci0gICAgICAgIFdl
YkNvcmU6OkRhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZSh2YWx1ZSk7CisgICAgICAgIFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKHZhbHVlKTsKICNlbmRpZgogCiAgICAg
ICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBs
aWNhdGlvbkNhY2hlRW5hYmxlZCwKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDU4MCkKKysrIFdlYktpdC93
aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMDIg
IER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlIGxvY2F0aW9uIG9mIHRo
ZSBmbGFnIHRoYXQgZGV0ZXJtaW5lcyBpZiBEQnMgc2hvdWxkIGJlIGVuYWJsZWQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAgICAg
ICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5n
ZWQpOgorCiAyMDEwLTA1LTMwICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCBhdHRlbXB0IHRvIGZpeCB0aGUgYnVpbGQgYWZ0ZXIgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNjA0MTguCkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDYwNTgw
KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1ZhbHVlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9BYnN0cmFjdERhdGFiYXNlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQlN0cmluZy5oPgpAQCAtNzMs
NyArNzQsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Db29raWVTdG9yYWdlV2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
dXJzb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CkBAIC00NzA5LDcgKzQ3MDksNyBAQCBIUkVTVUxUIFdl
YlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlCiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPmRh
dGFiYXNlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICBy
ZXR1cm4gaHI7Ci0gICAgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZWQpOworICAgIEFi
c3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZWQpOwogI2VuZGlmCiAKICAgICBo
ciA9IHByZWZzUHJpdmF0ZS0+bG9jYWxTdG9yYWdlRW5hYmxlZCgmZW5hYmxlZCk7CkluZGV4OiBX
ZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDYwNTgwKQorKysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDEwLTA2LTAyICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmxhZyB0aGF0IGRldGVybWluZXMgaWYgREJzIHNo
b3VsZCBiZSBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAod3hXZWJW
aWV3OjpTZXREYXRhYmFzZXNFbmFibGVkKToKKyAgICAgICAgKHd4V2ViVmlldzo6QXJlRGF0YWJh
c2VzRW5hYmxlZCk6CisKIDIwMTAtMDUtMjcgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBCdWlsZCBmaXhlcyBmb3IgV2luZG93cyBhZnRl
ciByZWNlbnQgY2hhbmdlcy4KSW5kZXg6IFdlYktpdC93eC9XZWJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlzaW9uIDYwNTgwKQorKysgV2ViS2l0L3d4
L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVHJhY2tlci5oIgogI2VuZGlmCiAKQEAgLTk5NSw3ICs5OTUsNyBAQCB3eFN0cmluZyB3eFdl
YlZpZXc6OkdldERhdGFiYXNlRGlyZWN0b3J5CiB2b2lkIHd4V2ViVmlldzo6U2V0RGF0YWJhc2Vz
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIFdlYkNv
cmU6OkRhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShlbmFibGVkKTsKKyAgICBXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShlbmFibGVkKTsKICNlbmRpZgogfQogCkBAIC0x
MDAzLDcgKzEwMDMsNyBAQCB2b2lkIHd4V2ViVmlldzo6U2V0RGF0YWJhc2VzRW5hYmxlZChib29s
CiBib29sIHd4V2ViVmlldzo6QXJlRGF0YWJhc2VzRW5hYmxlZCgpCiB7CiAjaWYgRU5BQkxFKERB
VEFCQVNFKQotICAgIHJldHVybiBXZWJDb3JlOjpEYXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKTsKICNlbmRp
ZgogICAgIHJldHVybiBmYWxzZTsKIH0K
</data>
<flag name="commit-queue"
          id="42355"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58437</attachid>
            <date>2010-06-10 19:44:08 -0700</date>
            <delta_ts>2010-06-10 19:59:38 -0700</delta_ts>
            <desc>patch #3: Get DatabaseTracker ready for sync DBs</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21372</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDk4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDYtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBHZXQgRGF0YWJhc2VUcmFja2VyIHJlYWR5IGZvciBzeW5jIERCcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBzdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6fkFic3RyYWN0RGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3JhZ2Uv
RGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmg6CisgICAgICAgICogc3RvcmFnZS9jaHJv
bWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2Vy
UmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNr
ZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNrOjpUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2Up
OgorCiAyMDEwLTA2LTEwICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERh
dGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCit7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjA5ODMpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5
ICszMSwyNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEFic3RyYWN0RGF0YWJhc2UgeworY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBBYnN0cmFjdERhdGFi
YXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFzZT4geworcHVibGlj
OgorICAgIHZpcnR1YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKKworICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVO
YW1lKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24g
NjA5ODMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTEsNiArNDUxLDE1IEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKENsb3NlUG9saWN5IHBvbGlj
eSkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhDb250ZXh0UmVt
b3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKHRoaXMpKTsKIH0KIAordm9pZCBEYXRhYmFzZTo6
Y2xvc2VJbW1lZGlhdGVseSgpCit7CisgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFk
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpOworICAgIGlmIChk
YXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkp
IHsKKyAgICAgICAgc3RvcCgpOworICAgICAgICBkYXRhYmFzZVRocmVhZC0+c2NoZWR1bGVUYXNr
KERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUodGhpcywgRGF0YWJhc2U6OlJlbW92ZURhdGFiYXNl
RnJvbUNvbnRleHQsIDApKTsKKyAgICB9Cit9CisKIHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogewog
ICAgIC8vIEZJWE1FOiBUaGUgbmV0IGVmZmVjdCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdG8g
cmVtb3ZlIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBhbmQgc3RhdGVtZW50cywgYnV0IGFsbG93
IHRoZSBjdXJyZW50IHN0YXRlbWVudApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYwOTgz
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNkZWZpbmUgRGF0YWJhc2VfaAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaWZuZGVmIE5ERUJVRwpAQCAtNTUsMTIgKzU2
LDEyIEBAIGNsYXNzIFZvaWRDYWxsYmFjazsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
IAotY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZT4gewor
Y2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFp
bGFibGUoKTsKIAotICAgIH5EYXRhYmFzZSgpOworICAgIHZpcnR1YWwgfkRhdGFiYXNlKCk7CiAK
ICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLApAQCAtODQsMjQgKzg1LDI1IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuZ2V0KCk7IH0KLSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7IH0K
KyAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAg
IFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJh
c2U7IH0KLSAgICBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OwotICAgIFN0cmluZyBk
aXNwbGF5TmFtZSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNv
bnN0OwotICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0
cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0VmVy
c2lvbkZyb21EYXRhYmFzZShTdHJpbmcmKTsKICAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNl
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYpOwogICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRl
ZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVk
OyB9CiAKICAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9Ob3RSZW1vdmVEYXRhYmFzZUZyb21Db250
ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07CiAgICAgdm9pZCBjbG9zZShDbG9zZVBv
bGljeSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKICAgICBib29sIG9w
ZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9CiAKICAgICB2b2lkIHN0b3AoKTsKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5
ICszMSw5IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAg
LTIxOSw3ICsyMTksNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
CiAgICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OwogfQogCi11bnNp
Z25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29u
c3QgRGF0YWJhc2UqIGRhdGFiYXNlKQordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tl
cjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNl
KQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgLy8g
VGhlIG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRz
IG9yaWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCkBAIC0y
MzAsNyArMjMwLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TQog
ICAgIHJldHVybiBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pIC0gb3JpZ2luUXVvdGFNYW5h
Z2VyKCkuZGlza1VzYWdlKG9yaWdpbikgKyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZp
bGVTaXplKGRhdGFiYXNlLT5maWxlTmFtZSgpKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6
OmRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CiAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkubWFya0RhdGFiYXNlKGRhdGFiYXNl
KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2Vy
Ojp1c2FnCiAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
cGF0aCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJh
c2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShBYnN0
cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICBy
ZXR1cm47CkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5E
YXRhYmFzZShEYQogICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9y
aWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERh
dGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFi
YXNlKQogewogICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKQEAgLTU1OSw3ICs1
NTksNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlCiAgICAgb3Jp
Z2luUXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigp
KTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxEYXRhYmFz
ZT4gPiogZGF0YWJhc2VzKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0
cjxBYnN0cmFjdERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgb3Bl
bkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKICAgICBpZiAoIW1fb3Bl
bkRhdGFiYXNlTWFwKQpAQCAtOTczLDcgKzk3Myw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
ZWxldGVEYXRhYmFzZUZpbGUKICAgICB9CiAjZW5kaWYKIAotICAgIFZlY3RvcjxSZWZQdHI8RGF0
YWJhc2U+ID4gZGVsZXRlZERhdGFiYXNlczsKKyAgICBWZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0
YWJhc2U+ID4gZGVsZXRlZERhdGFiYXNlczsKIAogICAgIC8vIE1ha2Ugc3VyZSBub3QgdG8gaG9s
ZCB0aGUgYW55IGxvY2tzIHdoZW4gY2FsbGluZwogICAgIC8vIERhdGFiYXNlOjptYXJrQXNEZWxl
dGVkQW5kQ2xvc2UoKSwgc2luY2UgdGhhdCBjYW4gY2F1c2UgYSBkZWFkbG9jawpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRyYWNrZXIuaAkocmV2aXNpb24gNjA5ODMpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsKK2NsYXNzIEFic3RyYWN0RGF0
YWJhc2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmln
aW47CiAKQEAgLTcwLDE3ICs3MCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREYXRhYmFzZURl
dGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgU3RyaW5nIGZ1
bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgY3JlYXRlSWZEb2VzTm90RXhpc3QgPSB0cnVlKTsKIAotICAgIHZvaWQgYWRkT3BlbkRhdGFi
YXNlKERhdGFiYXNlKik7Ci0gICAgdm9pZCByZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2UqKTsK
LSAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiogZGF0YWJhc2VzKTsKKyAg
ICB2b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgdm9pZCByZW1v
dmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHZvaWQgZ2V0T3BlbkRhdGFi
YXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8
UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7CiAKLSAgICB1bnNpZ25lZCBs
b25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlKik7Ci0gICAgdm9p
ZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2UqKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0
TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lkIGRh
dGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKik7CiAKIHByaXZhdGU6CiAgICAgRGF0YWJh
c2VUcmFja2VyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKIAotICAgIHR5cGVkZWYgSGFz
aFNldDxEYXRhYmFzZSo+IERhdGFiYXNlU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxBYnN0cmFj
dERhdGFiYXNlKj4gRGF0YWJhc2VTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRGF0
YWJhc2VTZXQqPiBEYXRhYmFzZU5hbWVNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIERhdGFiYXNlTmFtZU1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gRGF0
YWJhc2VPcmlnaW5NYXA7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
Y3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJh
c2UuaCIKICNpbmNsdWRlICJPcmlnaW5Vc2FnZVJlY29yZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnJlbW92ZU9y
aWdpbihTZQogICAgIH0KIH0KIAotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6Om1hcmtEYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6bWFya0RhdGFi
YXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L09yaWdpblF1b3RhTWFuYWdlci5oCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFn
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlOworY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZTsKIGNsYXNzIE9yaWdpblVzYWdlUmVjb3JkOwogCiBjbGFzcyBPcmlnaW5RdW90YU1h
bmFnZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZW1vdmVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZU9yaWdpbihTZWN1cml0eU9yaWdpbiop
OwogCi0gICAgdm9pZCBtYXJrRGF0YWJhc2UoRGF0YWJhc2UqKTsgLy8gTWFyayBkaXJ0aW5lc3Mg
b2YgYSBzcGVjaWZpYyBkYXRhYmFzZS4KKyAgICB2b2lkIG1hcmtEYXRhYmFzZShBYnN0cmFjdERh
dGFiYXNlKik7IC8vIE1hcmsgZGlydGluZXNzIG9mIGEgc3BlY2lmaWMgZGF0YWJhc2UuCiAgICAg
dW5zaWduZWQgbG9uZyBsb25nIGRpc2tVc2FnZShTZWN1cml0eU9yaWdpbiopIGNvbnN0OwogCiBw
cml2YXRlOgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZl
ci5oCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFz
ZU9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2U7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU3RyaW5nOwogCkBAIC00Miw5ICs0
Miw5IEBAIGNsYXNzIFN0cmluZzsKIGNsYXNzIERhdGFiYXNlT2JzZXJ2ZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKTsKLSAgICBz
dGF0aWMgdm9pZCBkYXRhYmFzZU9wZW5lZChEYXRhYmFzZSopOwotICAgIHN0YXRpYyB2b2lkIGRh
dGFiYXNlTW9kaWZpZWQoRGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZUNsb3Nl
ZChEYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3BlbmVkKEFic3RyYWN0RGF0
YWJhc2UqKTsKKyAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZU1vZGlmaWVkKEFic3RyYWN0RGF0YWJh
c2UqKTsKKyAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZUNsb3NlZChBYnN0cmFjdERhdGFiYXNlKik7
CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2Vy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRh
YmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYwOTgzKQorKysgV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
VHJhY2tlci5oIgogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiUXVvdGFUcmFja2VyLmgiCkBAIC03Miw3ICs3Miw3IEBA
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICByZXR1cm4gb3Jp
Z2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIvIiArIG5hbWUgKyAiIyI7CiB9CiAKLXZvaWQg
RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRh
YmFzZSkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2so
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGEKIAogY2xhc3MgVHJhY2tlclJlbW92ZU9wZW5EYXRh
YmFzZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBzdGF0aWMgUGFzc093blB0
cjxUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJh
Y3REYXRhYmFzZT4gZGF0YWJhc2UpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFRyYWNrZXJS
ZW1vdmVPcGVuRGF0YWJhc2VUYXNrKGRhdGFiYXNlKTsKICAgICB9CkBAIC0xMTAsMTUgKzExMCwx
NSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFRyYWNrZXJSZW1vdmVPcGVuRGF0
YWJhc2VUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIFRyYWNrZXJSZW1v
dmVPcGVuRGF0YWJhc2VUYXNrKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gZGF0YWJhc2Up
CiAgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICB7CiAgICAgfQogCi0gICAgUmVm
UHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBt
X2RhdGFiYXNlOwogfTsKIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRh
dGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGlmICghZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKICAgICAgICAg
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soVHJhY2tlclJlbW92
ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZShkYXRhYmFzZSkpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UKIH0KIAogCi12b2lkIERh
dGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMp
Cit2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJh
c2U+ID4qIGRhdGFiYXNlcykKIHsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2Nr
KG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCkBA
IC0xNjUsNyArMTY1LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMo
UwogICAgICAgICBkYXRhYmFzZXMtPmFkZCgqaXQpOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcg
RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2UqIGRh
dGFiYXNlKQordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZv
ckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25n
IHNwYWNlQXZhaWxhYmxlID0gMDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjA5ODYpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTAtMDYtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQgRGF0YWJh
c2VUcmFja2VyIHJlYWR5IGZvciBzeW5jIERCcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRGF0YWJh
c2UuaDoKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU9wZW5lZCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBzcmMvV2ViRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZUlt
bWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6OldlYkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRhdGFiYXNlOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFz
ZT4pOgorCiAyMDEwLTA2LTEwICBKYW1lcyBIYXdraW5zICA8amhhd2tpbnNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIE5vdCByZXZpd2VkLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0
YWJhc2UuaAkocmV2aXNpb24gNjA5ODMpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgZGF0
YWJhc2VOYW1lKTsKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkRhdGFiYXNl
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEYXRhYmFzZT4mKTsKLSAgICBXZWJEYXRh
YmFzZSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEYXRhYmFzZT4m
KTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RGF0YWJhc2U+KCkgY29u
c3Q7CisgICAgV2ViRGF0YWJhc2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U+Jik7CisgICAgV2ViRGF0YWJhc2UmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZT4mKTsKKyAgICBvcGVyYXRvciBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZT4oKSBjb25zdDsKICNlbmRpZgog
CiBwcml2YXRlOgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3Bw
CShyZXZpc2lvbiA2MDk4MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFz
ZS5oIgpAQCAtNjUsMTkgKzY1LDE5IEBAIGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJs
aXNoRGF0YWIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBEYXRhYmFzZU9ic2VydmVyOjpk
YXRhYmFzZU9wZW5lZChEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6
OmRhdGFiYXNlT3BlbmVkKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VS
VChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7
CiAgICAgV2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlT3BlbmVkKFdlYkRhdGFiYXNl
KGRhdGFiYXNlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VNb2RpZmll
ZChEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9k
aWZpZWQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBXZWJE
YXRhYmFzZTo6b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VNb2RpZmllZChXZWJEYXRhYmFzZShkYXRhYmFz
ZSkpOwogfQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKERhdGFiYXNl
KiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQoQWJzdHJh
Y3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBXZWJEYXRhYmFzZTo6b2Jz
ZXJ2ZXIoKS0+ZGF0YWJhc2VDbG9zZWQoV2ViRGF0YWJhc2UoZGF0YWJhc2UpKTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2UuaCIKIAotI2lu
Y2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VUcmFja2VyLmgiCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBzdGF0aWMgV2ViRGF0YWJhc2VPYnNlcnZlciogZGF0YWJhc2VPYnNlcnZlciA9IDA7CiAK
LWNsYXNzIFdlYkRhdGFiYXNlUHJpdmF0ZSA6IHB1YmxpYyBEYXRhYmFzZSB7CitjbGFzcyBXZWJE
YXRhYmFzZVByaXZhdGUgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiB9OwogCiB2b2lkIFdl
YkRhdGFiYXNlOjpyZXNldCgpCkBAIC0xMTAsMzQgKzExMCwyOCBAQCB2b2lkIFdlYkRhdGFiYXNl
Ojp1cGRhdGVEYXRhYmFzZVNpemUoCiAKIHZvaWQgV2ViRGF0YWJhc2U6OmNsb3NlRGF0YWJhc2VJ
bW1lZGlhdGVseShjb25zdCBXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYlN0
cmluZyYgZGF0YWJhc2VOYW1lKQogewotICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+IGRh
dGFiYXNlSGFuZGxlczsKKyAgICBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+IGRh
dGFiYXNlSGFuZGxlczsKICAgICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5QcnAo
V2ViU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRl
bnRpZmllcikpOwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gb3JpZ2luUHJw
OwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE9wZW5EYXRhYmFzZXMob3JpZ2lu
LmdldCgpLCBkYXRhYmFzZU5hbWUsICZkYXRhYmFzZUhhbmRsZXMpOwotICAgIGZvciAoSGFzaFNl
dDxSZWZQdHI8RGF0YWJhc2U+ID46Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VIYW5kbGVzLmJlZ2lu
KCk7IGl0ICE9IGRhdGFiYXNlSGFuZGxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBEYXRhYmFz
ZSogZGF0YWJhc2UgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFz
ZVRocmVhZCA9IGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCk7Ci0gICAgICAgIGlmIChkYXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRl
cm1pbmF0aW9uUmVxdWVzdGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFiYXNlLT5zdG9wKCk7Ci0g
ICAgICAgICAgICBkYXRhYmFzZVRocmVhZC0+c2NoZWR1bGVUYXNrKERhdGFiYXNlQ2xvc2VUYXNr
OjpjcmVhdGUoZGF0YWJhc2UsIERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCAw
KSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERh
dGFiYXNlPiA+OjppdGVyYXRvciBpdCA9IGRhdGFiYXNlSGFuZGxlcy5iZWdpbigpOyBpdCAhPSBk
YXRhYmFzZUhhbmRsZXMuZW5kKCk7ICsraXQpCisgICAgICAgIGl0LT5nZXQoKS0+Y2xvc2VJbW1l
ZGlhdGVseSgpOwogfQogCi1XZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UoY29uc3QgV1RGOjpQYXNz
UmVmUHRyPERhdGFiYXNlPiYgZGF0YWJhc2UpCitXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+JiBkYXRhYmFzZSkKICAgICA6IG1f
cHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihkYXRhYmFzZS5yZWxlYXNl
UmVmKCkpKQogewogfQogCi1XZWJEYXRhYmFzZSYgV2ViRGF0YWJhc2U6Om9wZXJhdG9yPShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8RGF0YWJhc2U+JiBkYXRhYmFzZSkKK1dlYkRhdGFiYXNlJiBXZWJE
YXRhYmFzZTo6b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNl
PiYgZGF0YWJhc2UpCiB7CiAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRhdGFiYXNlUHJpdmF0
ZSo+KGRhdGFiYXNlLnJlbGVhc2VSZWYoKSkpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotV2Vi
RGF0YWJhc2U6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxEYXRhYmFzZT4oKSBjb25zdAorV2Vi
RGF0YWJhc2U6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8RGF0YWJhc2U+KGNvbnN0X2Nhc3Q8V2ViRGF0
YWJhc2VQcml2YXRlKj4obV9wcml2YXRlKSk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8QWJzdHJh
Y3REYXRhYmFzZT4oY29uc3RfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihtX3ByaXZhdGUpKTsK
IH0KIAogdm9pZCBXZWJEYXRhYmFzZTo6YXNzaWduKFdlYkRhdGFiYXNlUHJpdmF0ZSogZCkK
</data>
<flag name="commit-queue"
          id="43991"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58438</attachid>
            <date>2010-06-10 19:59:38 -0700</date>
            <delta_ts>2010-06-14 13:38:17 -0700</delta_ts>
            <desc>patch #3: Get DatabaseTracker ready for sync DBs</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21606</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDk4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDYtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBHZXQgRGF0YWJhc2VUcmFja2VyIHJlYWR5IGZvciBzeW5jIERCcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBzdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6fkFic3RyYWN0RGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3JhZ2Uv
RGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmg6CisgICAgICAgICogc3RvcmFnZS9jaHJv
bWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2Vy
UmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNr
ZXJSZW1vdmVPcGVuRGF0YWJhc2VUYXNrOjpUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2Up
OgorCiAyMDEwLTA2LTEwICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERh
dGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCit7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjA5ODMpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5
ICszMSwyNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEFic3RyYWN0RGF0YWJhc2UgeworY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBBYnN0cmFjdERhdGFi
YXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFzZT4geworcHVibGlj
OgorICAgIHZpcnR1YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKKworICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVO
YW1lKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24g
NjA5ODMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTEsNiArNDUxLDE1IEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKENsb3NlUG9saWN5IHBvbGlj
eSkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhDb250ZXh0UmVt
b3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKHRoaXMpKTsKIH0KIAordm9pZCBEYXRhYmFzZTo6
Y2xvc2VJbW1lZGlhdGVseSgpCit7CisgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFk
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpOworICAgIGlmIChk
YXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkp
IHsKKyAgICAgICAgc3RvcCgpOworICAgICAgICBkYXRhYmFzZVRocmVhZC0+c2NoZWR1bGVUYXNr
KERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUodGhpcywgRGF0YWJhc2U6OlJlbW92ZURhdGFiYXNl
RnJvbUNvbnRleHQsIDApKTsKKyAgICB9Cit9CisKIHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogewog
ICAgIC8vIEZJWE1FOiBUaGUgbmV0IGVmZmVjdCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdG8g
cmVtb3ZlIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBhbmQgc3RhdGVtZW50cywgYnV0IGFsbG93
IHRoZSBjdXJyZW50IHN0YXRlbWVudApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYwOTgz
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNkZWZpbmUgRGF0YWJhc2VfaAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaWZuZGVmIE5ERUJVRwpAQCAtNTUsMTIgKzU2
LDEyIEBAIGNsYXNzIFZvaWRDYWxsYmFjazsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
IAotY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZT4gewor
Y2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFp
bGFibGUoKTsKIAotICAgIH5EYXRhYmFzZSgpOworICAgIHZpcnR1YWwgfkRhdGFiYXNlKCk7CiAK
ICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLApAQCAtODQsMjQgKzg1LDI1IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuZ2V0KCk7IH0KLSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7IH0K
KyAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAg
IFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJh
c2U7IH0KLSAgICBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OwotICAgIFN0cmluZyBk
aXNwbGF5TmFtZSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNv
bnN0OwotICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0
cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0VmVy
c2lvbkZyb21EYXRhYmFzZShTdHJpbmcmKTsKICAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNl
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYpOwogICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRl
ZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVk
OyB9CiAKICAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9Ob3RSZW1vdmVEYXRhYmFzZUZyb21Db250
ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07CiAgICAgdm9pZCBjbG9zZShDbG9zZVBv
bGljeSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKICAgICBib29sIG9w
ZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9CiAKICAgICB2b2lkIHN0b3AoKTsKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5
ICszMSw5IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAg
LTIxOSw3ICsyMTksNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFz
CiAgICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OwogfQogCi11bnNp
Z25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29u
c3QgRGF0YWJhc2UqIGRhdGFiYXNlKQordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tl
cjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNl
KQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgLy8g
VGhlIG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRz
IG9yaWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCkBAIC0y
MzAsNyArMjMwLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TQog
ICAgIHJldHVybiBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pIC0gb3JpZ2luUXVvdGFNYW5h
Z2VyKCkuZGlza1VzYWdlKG9yaWdpbikgKyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZp
bGVTaXplKGRhdGFiYXNlLT5maWxlTmFtZSgpKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6
OmRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CiAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkubWFya0RhdGFiYXNlKGRhdGFiYXNl
KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2Vy
Ojp1c2FnCiAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
cGF0aCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJh
c2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShBYnN0
cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICBy
ZXR1cm47CkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5E
YXRhYmFzZShEYQogICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9y
aWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERh
dGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFi
YXNlKQogewogICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKQEAgLTU1OSw3ICs1
NTksNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlCiAgICAgb3Jp
Z2luUXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigp
KTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxEYXRhYmFz
ZT4gPiogZGF0YWJhc2VzKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0
cjxBYnN0cmFjdERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgb3Bl
bkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKICAgICBpZiAoIW1fb3Bl
bkRhdGFiYXNlTWFwKQpAQCAtOTczLDcgKzk3Myw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
ZWxldGVEYXRhYmFzZUZpbGUKICAgICB9CiAjZW5kaWYKIAotICAgIFZlY3RvcjxSZWZQdHI8RGF0
YWJhc2U+ID4gZGVsZXRlZERhdGFiYXNlczsKKyAgICBWZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0
YWJhc2U+ID4gZGVsZXRlZERhdGFiYXNlczsKIAogICAgIC8vIE1ha2Ugc3VyZSBub3QgdG8gaG9s
ZCB0aGUgYW55IGxvY2tzIHdoZW4gY2FsbGluZwogICAgIC8vIERhdGFiYXNlOjptYXJrQXNEZWxl
dGVkQW5kQ2xvc2UoKSwgc2luY2UgdGhhdCBjYW4gY2F1c2UgYSBkZWFkbG9jawpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRyYWNrZXIuaAkocmV2aXNpb24gNjA5ODMpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsKK2NsYXNzIEFic3RyYWN0RGF0
YWJhc2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmln
aW47CiAKQEAgLTcwLDE3ICs3MCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREYXRhYmFzZURl
dGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgU3RyaW5nIGZ1
bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgY3JlYXRlSWZEb2VzTm90RXhpc3QgPSB0cnVlKTsKIAotICAgIHZvaWQgYWRkT3BlbkRhdGFi
YXNlKERhdGFiYXNlKik7Ci0gICAgdm9pZCByZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2UqKTsK
LSAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiogZGF0YWJhc2VzKTsKKyAg
ICB2b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgdm9pZCByZW1v
dmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHZvaWQgZ2V0T3BlbkRhdGFi
YXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8
UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7CiAKLSAgICB1bnNpZ25lZCBs
b25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlKik7Ci0gICAgdm9p
ZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2UqKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0
TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lkIGRh
dGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKik7CiAKIHByaXZhdGU6CiAgICAgRGF0YWJh
c2VUcmFja2VyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKIAotICAgIHR5cGVkZWYgSGFz
aFNldDxEYXRhYmFzZSo+IERhdGFiYXNlU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxBYnN0cmFj
dERhdGFiYXNlKj4gRGF0YWJhc2VTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRGF0
YWJhc2VTZXQqPiBEYXRhYmFzZU5hbWVNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIERhdGFiYXNlTmFtZU1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gRGF0
YWJhc2VPcmlnaW5NYXA7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
Y3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJh
c2UuaCIKICNpbmNsdWRlICJPcmlnaW5Vc2FnZVJlY29yZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnJlbW92ZU9y
aWdpbihTZQogICAgIH0KIH0KIAotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6Om1hcmtEYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6bWFya0RhdGFi
YXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L09yaWdpblF1b3RhTWFuYWdlci5oCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFn
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlOworY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZTsKIGNsYXNzIE9yaWdpblVzYWdlUmVjb3JkOwogCiBjbGFzcyBPcmlnaW5RdW90YU1h
bmFnZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZW1vdmVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZU9yaWdpbihTZWN1cml0eU9yaWdpbiop
OwogCi0gICAgdm9pZCBtYXJrRGF0YWJhc2UoRGF0YWJhc2UqKTsgLy8gTWFyayBkaXJ0aW5lc3Mg
b2YgYSBzcGVjaWZpYyBkYXRhYmFzZS4KKyAgICB2b2lkIG1hcmtEYXRhYmFzZShBYnN0cmFjdERh
dGFiYXNlKik7IC8vIE1hcmsgZGlydGluZXNzIG9mIGEgc3BlY2lmaWMgZGF0YWJhc2UuCiAgICAg
dW5zaWduZWQgbG9uZyBsb25nIGRpc2tVc2FnZShTZWN1cml0eU9yaWdpbiopIGNvbnN0OwogCiBw
cml2YXRlOgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZl
ci5oCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFz
ZU9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2U7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU3RyaW5nOwogCkBAIC00Miw5ICs0
Miw5IEBAIGNsYXNzIFN0cmluZzsKIGNsYXNzIERhdGFiYXNlT2JzZXJ2ZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKTsKLSAgICBz
dGF0aWMgdm9pZCBkYXRhYmFzZU9wZW5lZChEYXRhYmFzZSopOwotICAgIHN0YXRpYyB2b2lkIGRh
dGFiYXNlTW9kaWZpZWQoRGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZUNsb3Nl
ZChEYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3BlbmVkKEFic3RyYWN0RGF0
YWJhc2UqKTsKKyAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZU1vZGlmaWVkKEFic3RyYWN0RGF0YWJh
c2UqKTsKKyAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZUNsb3NlZChBYnN0cmFjdERhdGFiYXNlKik7
CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2Vy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRh
YmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYwOTgzKQorKysgV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
VHJhY2tlci5oIgogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiUXVvdGFUcmFja2VyLmgiCkBAIC03Miw3ICs3Miw3IEBA
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICByZXR1cm4gb3Jp
Z2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIvIiArIG5hbWUgKyAiIyI7CiB9CiAKLXZvaWQg
RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQordm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRh
YmFzZSkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2so
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGEKIAogY2xhc3MgVHJhY2tlclJlbW92ZU9wZW5EYXRh
YmFzZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VHJhY2tlclJlbW92ZU9wZW5EYXRhYmFzZVRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBzdGF0aWMgUGFzc093blB0
cjxUcmFja2VyUmVtb3ZlT3BlbkRhdGFiYXNlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJh
Y3REYXRhYmFzZT4gZGF0YWJhc2UpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFRyYWNrZXJS
ZW1vdmVPcGVuRGF0YWJhc2VUYXNrKGRhdGFiYXNlKTsKICAgICB9CkBAIC0xMTAsMTUgKzExMCwx
NSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFRyYWNrZXJSZW1vdmVPcGVuRGF0
YWJhc2VUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIFRyYWNrZXJSZW1v
dmVPcGVuRGF0YWJhc2VUYXNrKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gZGF0YWJhc2Up
CiAgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICB7CiAgICAgfQogCi0gICAgUmVm
UHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBt
X2RhdGFiYXNlOwogfTsKIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRh
dGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGlmICghZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKICAgICAgICAg
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soVHJhY2tlclJlbW92
ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZShkYXRhYmFzZSkpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UKIH0KIAogCi12b2lkIERh
dGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMp
Cit2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJh
c2U+ID4qIGRhdGFiYXNlcykKIHsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2Nr
KG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCkBA
IC0xNjUsNyArMTY1LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMo
UwogICAgICAgICBkYXRhYmFzZXMtPmFkZCgqaXQpOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcg
RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2UqIGRh
dGFiYXNlKQordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZv
ckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25n
IHNwYWNlQXZhaWxhYmxlID0gMDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjA5ODYpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTAtMDYtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQgRGF0YWJh
c2VUcmFja2VyIHJlYWR5IGZvciBzeW5jIERCcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRGF0YWJh
c2UuaDoKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU9wZW5lZCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBzcmMvV2ViRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZUlt
bWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6OldlYkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRhdGFiYXNlOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFz
ZT4pOgorCiAyMDEwLTA2LTEwICBKYW1lcyBIYXdraW5zICA8amhhd2tpbnNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIE5vdCByZXZpd2VkLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0
YWJhc2UuaAkocmV2aXNpb24gNjA5ODMpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJT
ZWN1cml0eU9yaWdpbi5oIgogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7IGNsYXNzIERhdGFiYXNlOyB9CituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEFi
c3RyYWN0RGF0YWJhc2U7IH0KIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgUGFzc1JlZlB0cjsgfQogI2VuZGlmCiAKQEAgLTc2LDkgKzc2LDkgQEAgcHVibGljOgog
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YWJhc2VOYW1lKTsKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkRh
dGFiYXNlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEYXRhYmFzZT4mKTsKLSAgICBX
ZWJEYXRhYmFzZSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEYXRh
YmFzZT4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RGF0YWJhc2U+
KCkgY29uc3Q7CisgICAgV2ViRGF0YWJhc2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U+Jik7CisgICAgV2ViRGF0YWJhc2UmIG9wZXJhdG9yPShjb25zdCBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZT4mKTsKKyAgICBvcGVyYXRv
ciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZT4oKSBjb25zdDsKICNl
bmRpZgogCiBwcml2YXRlOgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2Vy
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2
ZXIuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VP
YnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCiAKLSNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJE
YXRhYmFzZS5oIgpAQCAtNjUsMTkgKzY1LDE5IEBAIGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2Fu
RXN0YWJsaXNoRGF0YWIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBEYXRhYmFzZU9ic2Vy
dmVyOjpkYXRhYmFzZU9wZW5lZChEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlT2Jz
ZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAg
IEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJl
YWQoKSk7CiAgICAgV2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlT3BlbmVkKFdlYkRh
dGFiYXNlKGRhdGFiYXNlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VN
b2RpZmllZChEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFi
YXNlTW9kaWZpZWQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRh
dGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAg
ICBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VNb2RpZmllZChXZWJEYXRhYmFzZShk
YXRhYmFzZSkpOwogfQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKERh
dGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQo
QWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBXZWJEYXRhYmFz
ZTo6b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VDbG9zZWQoV2ViRGF0YWJhc2UoZGF0YWJhc2UpKTsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MDk4MykKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2UuaCIK
IAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBzdGF0aWMgV2ViRGF0YWJhc2VPYnNlcnZlciogZGF0YWJhc2VPYnNlcnZlciA9
IDA7CiAKLWNsYXNzIFdlYkRhdGFiYXNlUHJpdmF0ZSA6IHB1YmxpYyBEYXRhYmFzZSB7CitjbGFz
cyBXZWJEYXRhYmFzZVByaXZhdGUgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiB9OwogCiB2
b2lkIFdlYkRhdGFiYXNlOjpyZXNldCgpCkBAIC0xMTAsMzQgKzExMCwyOCBAQCB2b2lkIFdlYkRh
dGFiYXNlOjp1cGRhdGVEYXRhYmFzZVNpemUoCiAKIHZvaWQgV2ViRGF0YWJhc2U6OmNsb3NlRGF0
YWJhc2VJbW1lZGlhdGVseShjb25zdCBXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0
IFdlYlN0cmluZyYgZGF0YWJhc2VOYW1lKQogewotICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNl
PiA+IGRhdGFiYXNlSGFuZGxlczsKKyAgICBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNl
PiA+IGRhdGFiYXNlSGFuZGxlczsKICAgICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW5QcnAoV2ViU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3Jp
Z2luSWRlbnRpZmllcikpOwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gb3Jp
Z2luUHJwOwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE9wZW5EYXRhYmFzZXMo
b3JpZ2luLmdldCgpLCBkYXRhYmFzZU5hbWUsICZkYXRhYmFzZUhhbmRsZXMpOwotICAgIGZvciAo
SGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID46Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VIYW5kbGVz
LmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlSGFuZGxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBE
YXRhYmFzZSogZGF0YWJhc2UgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIERhdGFiYXNlVGhyZWFkKiBk
YXRhYmFzZVRocmVhZCA9IGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFi
YXNlVGhyZWFkKCk7Ci0gICAgICAgIGlmIChkYXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJl
YWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFiYXNlLT5zdG9w
KCk7Ci0gICAgICAgICAgICBkYXRhYmFzZVRocmVhZC0+c2NoZWR1bGVUYXNrKERhdGFiYXNlQ2xv
c2VUYXNrOjpjcmVhdGUoZGF0YWJhc2UsIERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250
ZXh0LCAwKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxBYnN0
cmFjdERhdGFiYXNlPiA+OjppdGVyYXRvciBpdCA9IGRhdGFiYXNlSGFuZGxlcy5iZWdpbigpOyBp
dCAhPSBkYXRhYmFzZUhhbmRsZXMuZW5kKCk7ICsraXQpCisgICAgICAgIGl0LT5nZXQoKS0+Y2xv
c2VJbW1lZGlhdGVseSgpOwogfQogCi1XZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPERhdGFiYXNlPiYgZGF0YWJhc2UpCitXZWJEYXRhYmFzZTo6V2ViRGF0YWJh
c2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+JiBkYXRhYmFzZSkKICAg
ICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihkYXRhYmFzZS5y
ZWxlYXNlUmVmKCkpKQogewogfQogCi1XZWJEYXRhYmFzZSYgV2ViRGF0YWJhc2U6Om9wZXJhdG9y
PShjb25zdCBXVEY6OlBhc3NSZWZQdHI8RGF0YWJhc2U+JiBkYXRhYmFzZSkKK1dlYkRhdGFiYXNl
JiBXZWJEYXRhYmFzZTo6b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxBYnN0cmFjdERh
dGFiYXNlPiYgZGF0YWJhc2UpCiB7CiAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRhdGFiYXNl
UHJpdmF0ZSo+KGRhdGFiYXNlLnJlbGVhc2VSZWYoKSkpOwogICAgIHJldHVybiAqdGhpczsKIH0K
IAotV2ViRGF0YWJhc2U6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxEYXRhYmFzZT4oKSBjb25z
dAorV2ViRGF0YWJhc2U6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNl
PigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8RGF0YWJhc2U+KGNvbnN0X2Nhc3Q8
V2ViRGF0YWJhc2VQcml2YXRlKj4obV9wcml2YXRlKSk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4oY29uc3RfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihtX3ByaXZh
dGUpKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFzZTo6YXNzaWduKFdlYkRhdGFiYXNlUHJpdmF0ZSog
ZCkK
</data>
<flag name="review"
          id="44021"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="44022"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58767</attachid>
            <date>2010-06-15 04:11:30 -0700</date>
            <delta_ts>2010-06-15 04:28:38 -0700</delta_ts>
            <desc>patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19735</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUoKSBmcm9tIERhdGFiYXNlL0RhdGFi
YXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZVN5bmNFbmFibGVkKToKKyAgICAgICAg
KiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6Om9wZW5E
YXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKToKKyAgICAgICAgKiBzdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVN5bmMuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRl
eHQ6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVu
RGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKwogMjAx
MC0wNi0xNSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkocmV2aXNp
b24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAKLSNpbmNsdWRlICJE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIkFic3RyYWN0
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTk1LDEyICs5NCwx
MiBAQCBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlNvY2tldEVuCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VFbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJu
IEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiB9CiAKIGJvb2wgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlU3luY0VuYWJsZWQoKQogewotICAgIHJldHVybiBEYXRh
YmFzZVN5bmM6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6Omlz
QXZhaWxhYmxlKCk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDYx
MTc4KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIK
IAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJCYXNlNjQuaCIKICNp
bmNsdWRlICJCYXJJbmZvLmgiCiAjaW5jbHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKQEAgLTEy
MDMsNyArMTIwNCw3IEBAIGRvdWJsZSBET01XaW5kb3c6OmRldmljZVBpeGVsUmF0aW8oKSBjb24K
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IERPTVdpbmRvdzo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPERh
dGFiYXNlPiBkYXRhYmFzZSA9IDA7Ci0gICAgaWYgKG1fZnJhbWUgJiYgRGF0YWJhc2U6OmlzQXZh
aWxhYmxlKCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzRGF0YWJhc2UoKSkKKyAgICBpZiAobV9mcmFtZSAmJiBBYnN0cmFjdERhdGFiYXNlOjppc0F2
YWlsYWJsZSgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFj
Y2Vzc0RhdGFiYXNlKCkpCiAgICAgICAgIGRhdGFiYXNlID0gRGF0YWJhc2U6Om9wZW5EYXRhYmFz
ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwogCiAgICAgaWYgKCFkYXRhYmFzZSAmJiAh
ZWMpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MTE3
OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgYm9v
bCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpp
c0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGlzRGF0YWJhc2VBdmFpbGFibGU7Cit9CisKK3Zv
aWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7Cisg
ICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKK30KKwogQWJzdHJhY3REYXRhYmFz
ZTo6fkFic3RyYWN0RGF0YWJhc2UoKQogewogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3Ry
YWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDkgQEAgY2xhc3MgU2VjdXJpdHlPcmln
aW47CiAKIGNsYXNzIEFic3RyYWN0RGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxB
YnN0cmFjdERhdGFiYXNlPiB7CiBwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUo
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSk7CisKICAg
ICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzczLDYgQEAgY29uc3QgU3RyaW5nJiBE
YXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibAogICAgIHJldHVybiBuYW1lOwogfQogCi1zdGF0aWMg
Ym9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKLQotdm9pZCBEYXRhYmFzZTo6c2V0SXNB
dmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2
YWlsYWJsZTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6aXNBdmFpbGFibGUoKQotewotICAgIHJldHVy
biBpc0RhdGFiYXNlQXZhaWxhYmxlOwotfQotCiBzdGF0aWMgTXV0ZXgmIGd1aWRNdXRleCgpCiB7
CiAgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljIGhlcmUgYmVjYXVzZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYxMTc4KQor
KysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4
LDYgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgRGF0YWJhc2UgOiBwdWJs
aWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0SXNBdmFp
bGFibGUoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQogICAgIHZpcnR1
YWwgfkRhdGFiYXNlKCk7CiAKICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOCArNDYs
NiBAQCBjb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0YWJhc2VJbmZvCiAgICAgcmV0dXJu
IG5hbWU7CiB9CiAKLXN0YXRpYyBib29sIGlzU3luY0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsK
LQotdm9pZCBEYXRhYmFzZVN5bmM6OnNldElzQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewot
ICAgIGlzU3luY0RhdGFiYXNlQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotfQotCi1ib29sIERhdGFi
YXNlU3luYzo6aXNBdmFpbGFibGUoKQotewotICAgIHJldHVybiBpc1N5bmNEYXRhYmFzZUF2YWls
YWJsZTsKLX0KLQogUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6b3BlbkRh
dGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgUGFzc1JlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CkBAIC0xMTAsNCArOTgsMyBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBEYXRhYmFzZVN5bmM6OnNjCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNl
ZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KIGNsYXNzIERhdGFiYXNlU3lu
YyA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4gewogcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIHNldElzQXZhaWxhYmxlKGJvb2wpOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxl
KCk7Ci0KICAgICB+RGF0YWJhc2VTeW5jKCk7CiAKICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3Ig
dGhlIERPTSBBUEkKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDYx
MTc4KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxMSArMzEsMTQgQEAKIAogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNp
bmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNp
bmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKQEAgLTI3MSw3ICsyNzQsNyBAQCBOb3RpZmljYXRp
b25DZW50ZXIqIFdvcmtlckNvbnRleHQ6OndlYmtpCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogUGFz
c1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFzZWN1
cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8ICFEYXRhYmFzZTo6aXNBdmFpbGFi
bGUoKSkgeworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSB8
fCAhQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgewogICAgICAgICBlYyA9IFNFQ1VS
SVRZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjkwLDE1ICsyOTMsMTEgQEAg
dm9pZCBXb3JrZXJDb250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVkUXVvdAogCiBQYXNzUmVmUHRyPERh
dGFiYXNlU3luYz4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+
IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghc2VjdXJp
dHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkgeworICAgIGlmICghc2VjdXJpdHlPcmln
aW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSB8fCAhQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFi
bGUoKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgQVNTRVJUKERhdGFiYXNlU3luYzo6aXNBdmFpbGFibGUoKSk7Ci0gICAgaWYg
KCFEYXRhYmFzZVN5bmM6OmlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAg
cmV0dXJuIERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyh0aGlzLCBuYW1lLCB2ZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwogfQog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDYxMTc4KQorKysg
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSAr
MzAsNiBAQAogI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFz
aC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0j
aW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKQEAgLTQ3
LDYgKzQ0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIERhdGFiYXNlOwor
ICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CisgICAgY2xhc3MgRGF0YWJhc2VTeW5jOwogICAg
IGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CiAg
ICAgY2xhc3MgV29ya2VyTG9jYXRpb247CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTgw
KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBp
c0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBEYXRhYmFzZS9EYXRhYmFzZVN5bmMg
dG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQp
OgorCiAyMDEwLTA2LTE0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IENocm9taXVtIGJ1aWxkLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJSdW50aW1lRmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUnVudGltZUZlYXR1cmVzLmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMu
aCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJXZWJNZWRp
YVBsYXllckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTQzLDE0ICs0
MywxNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFi
bGVEYXRhYmFzZShib29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0
YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZSk7CisgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0
SXNBdmFpbGFibGUoZW5hYmxlKTsKICNlbmRpZgogfQogCiBib29sIFdlYlJ1bnRpbWVGZWF0dXJl
czo6aXNEYXRhYmFzZUVuYWJsZWQoKQogewogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICByZXR1
cm4gRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6
OmlzQXZhaWxhYmxlKCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpJbmRleDog
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDYxMTgwKQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0xNSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgaXNBdmFpbGFibGUoKS9zZXRJc0F2YWlsYWJsZSgpIGZyb20gRGF0YWJhc2UvRGF0
YWJhc2VTeW5jIHRvIEFic3RyYWN0RGF0YWJhc2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3VwZGF0ZV9zZXR0aW5ncyk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5KToKKyAgICAgICAgKHdlYmtp
dF9nZXRfY2FjaGVfbW9kZWwpOgorCiAyMDEwLTA2LTE0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9p
c2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBACiAjaW5jbHVkZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCiAjaW5jbHVkZSAi
d2Via2l0d2ViaGlzdG9yeWl0ZW0uaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Lmgi
CiAjaW5jbHVkZSAiQ2FjaGUuaCIKQEAgLTQ5LDcgKzUwLDYgQEAKICNpbmNsdWRlICJDb250ZXh0
TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgogI2luY2x1ZGUgIkN1
cnNvci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnRHdGsuaCIKQEAg
LTI3MzAsNyArMjczMCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld191cGRhdGVfc2V0
dGkKICAgICBzZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFibGVQcml2YXRl
QnJvd3NpbmcpOwogICAgIHNldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChlbmFibGVD
YXJldEJyb3dzaW5nKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2U6OnNldElz
QXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0YWJhc2UpOworICAgIEFic3RyYWN0RGF0YWJhc2U6OnNl
dElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0YWJhc2UpOwogI2VuZGlmCiAgICAgc2V0dGluZ3Mt
PnNldExvY2FsU3RvcmFnZUVuYWJsZWQoZW5hYmxlSFRNTDVMb2NhbFN0b3JhZ2UpOwogICAgIHNl
dHRpbmdzLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChlbmFibGVYU1NBdWRpdG9yKTsKQEAgLTI4MjMs
NyArMjgyMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3QKICAg
ICAgICAgc2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGdfdmFsdWVfZ2V0X2Jvb2xl
YW4oJnZhbHVlKSk7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIGVsc2UgaWYgKG5hbWUgPT0g
Z19pbnRlcm5fc3RyaW5nKCJlbmFibGUtaHRtbDUtZGF0YWJhc2UiKSkgewotICAgICAgICBEYXRh
YmFzZTo6c2V0SXNBdmFpbGFibGUoZ192YWx1ZV9nZXRfYm9vbGVhbigmdmFsdWUpKTsKKyAgICAg
ICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZ192YWx1ZV9nZXRfYm9vbGVhbigm
dmFsdWUpKTsKICAgICB9CiAjZW5kaWYKICAgICBlbHNlIGlmIChuYW1lID09IGdfaW50ZXJuX3N0
cmluZygiZW5hYmxlLWh0bWw1LWxvY2FsLXN0b3JhZ2UiKSkKQEAgLTQ0NTAsNCArNDQ1MCwzIEBA
IFdlYktpdENhY2hlTW9kZWwgd2Via2l0X2dldF9jYWNoZV9tb2RlbCgKICAgICB3ZWJraXRfaW5p
dCgpOwogICAgIHJldHVybiBjYWNoZU1vZGVsOwogfQotCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjExODAp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBpc0F2YWls
YWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBEYXRhYmFzZS9EYXRhYmFzZVN5bmMgdG8gQWJz
dHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgt
W1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAxMC0wNi0x
NCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biA2MTE3OCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsMTMgKzEwMywxMyBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rp
b24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQWJzdHJhY3REYXRhYmFz
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgotI2ltcG9y
dCA8V2ViQ29yZS9EYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29u
dHJvbGxlci5oPgpAQCAtMTM1Niw3ICsxMzU2LDcgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFu
Z2VkTm90aWZpY2F0aW9uOgogICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXpl
KFtwcmVmZXJlbmNlcyBtaW5pbXVtTG9naWNhbEZvbnRTaXplXSk7CiAgICAgc2V0dGluZ3MtPnNl
dFBsdWdpbnNFbmFibGVkKFtwcmVmZXJlbmNlcyBhcmVQbHVnSW5zRW5hYmxlZF0pOwogI2lmIEVO
QUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoW3ByZWZlcmVuY2Vz
IGRhdGFiYXNlc0VuYWJsZWRdKTsKKyAgICBBYnN0cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJs
ZShbcHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxlZF0pOwogI2VuZGlmCiAgICAgc2V0dGluZ3Mt
PnNldExvY2FsU3RvcmFnZUVuYWJsZWQoW3ByZWZlcmVuY2VzIGxvY2FsU3RvcmFnZUVuYWJsZWRd
KTsKICAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoW3By
ZWZlcmVuY2VzIGV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkXSk7CkluZGV4OiBXZWJL
aXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDYxMTgwKQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBEYXRhYmFzZS9EYXRhYmFzZVN5
bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBBcGkvcXdlYnNldHRpbmdzLmNwcDoK
KyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5KToKKwogMjAxMC0wNi0xNCAgTGFz
emxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgU3ltYmlhbiBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCShyZXZp
c2lvbiA2MTE3OCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKICNpbmNsdWRl
ICJxd2VicGx1Z2luZGF0YWJhc2VfcC5oIgogCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5o
IgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgpAQCAtMjE3LDcgKzIx
Nyw3IEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkoKQogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6T2Zm
bGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVT
dG9yYWdlRGF0YWJhc2VFbmFibGVkKSk7Ci0gICAgICAgIFdlYkNvcmU6OkRhdGFiYXNlOjpzZXRJ
c0F2YWlsYWJsZSh2YWx1ZSk7CisgICAgICAgIFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNl
dElzQXZhaWxhYmxlKHZhbHVlKTsKICNlbmRpZgogCiAgICAgICAgIHZhbHVlID0gYXR0cmlidXRl
cy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCwK
SW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MTE4MCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxk
dW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUoKSBmcm9tIERhdGFi
YXNlL0RhdGFiYXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToKKwogMjAx
MC0wNi0xNCAgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYktpdC93aW4vV2Vi
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24g
NjExNzgpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2
ICs2Miw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Fic3RyYWN0RGF0YWJhc2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CkBA
IC03Myw3ICs3NCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2VXaW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0N1cnNvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KQEAgLTQ3MTAsNyArNDcxMCw3IEBAIEhSRVNV
TFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2UKICAgICBociA9IHByZWZzUHJpdmF0
ZS0+ZGF0YWJhc2VzRW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAg
ICAgIHJldHVybiBocjsKLSAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7Cisg
ICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CiAjZW5kaWYKIAog
ICAgIGhyID0gcHJlZnNQcml2YXRlLT5sb2NhbFN0b3JhZ2VFbmFibGVkKCZlbmFibGVkKTsKSW5k
ZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxv
ZwkocmV2aXNpb24gNjExODApCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUoKSBmcm9tIERhdGFiYXNlL0Rh
dGFiYXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdlYlZpZXcuY3BwOgor
ICAgICAgICAod3hXZWJWaWV3OjpTZXREYXRhYmFzZXNFbmFibGVkKToKKyAgICAgICAgKHd4V2Vi
Vmlldzo6QXJlRGF0YWJhc2VzRW5hYmxlZCk6CisKIDIwMTAtMDYtMTQgIElseWEgVGlraG9ub3Zz
a3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZl
bGRtYW4uCkluZGV4OiBXZWJLaXQvd3gvV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3d4L1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC93eC9XZWJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIu
aCIKICNlbmRpZgogCkBAIC05OTUsNyArOTk1LDcgQEAgd3hTdHJpbmcgd3hXZWJWaWV3OjpHZXRE
YXRhYmFzZURpcmVjdG9yeQogdm9pZCB3eFdlYlZpZXc6OlNldERhdGFiYXNlc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQogewogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBXZWJDb3JlOjpEYXRhYmFz
ZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CisgICAgV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMTAwMyw3ICsxMDAz
LDcgQEAgdm9pZCB3eFdlYlZpZXc6OlNldERhdGFiYXNlc0VuYWJsZWQoYm9vbAogYm9vbCB3eFdl
YlZpZXc6OkFyZURhdGFiYXNlc0VuYWJsZWQoKQogewogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAg
ICByZXR1cm4gV2ViQ29yZTo6RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiAjZW5kaWYKICAgICByZXR1
cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="commit-queue"
          id="45214"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58768</attachid>
            <date>2010-06-15 04:28:38 -0700</date>
            <delta_ts>2010-06-15 04:38:10 -0700</delta_ts>
            <desc>patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20158</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUoKSBmcm9tIERhdGFiYXNlL0RhdGFi
YXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZVN5bmNFbmFibGVkKToKKyAgICAgICAg
KiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6Om9wZW5E
YXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKToKKyAgICAgICAgKiBzdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVN5bmMuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRl
eHQ6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVu
RGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKwogMjAx
MC0wNi0xNSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkocmV2aXNp
b24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAKLSNpbmNsdWRlICJE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIkFic3RyYWN0
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTk1LDEyICs5NCwx
MiBAQCBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlNvY2tldEVuCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VFbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJu
IEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiB9CiAKIGJvb2wgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlU3luY0VuYWJsZWQoKQogewotICAgIHJldHVybiBEYXRh
YmFzZVN5bmM6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6Omlz
QXZhaWxhYmxlKCk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgogI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKICNp
bmNsdWRlICJKU0RhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0RhdGFiYXNlU3luYy5o
IgpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0
YWJhc2UuaCIKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCYXJJbmZvLmgiCiAjaW5j
bHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKQEAgLTEyMDMsNyArMTIwNCw3IEBAIGRvdWJsZSBE
T01XaW5kb3c6OmRldmljZVBpeGVsUmF0aW8oKSBjb24KIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERP
TVdpbmRvdzo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IDA7Ci0g
ICAgaWYgKG1fZnJhbWUgJiYgRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkgJiYgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkKKyAgICBpZiAo
bV9mcmFtZSAmJiBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpICYmIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpCiAgICAgICAg
IGRhdGFiYXNlID0gRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBu
YW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFj
aywgZWMpOwogCiAgICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMpCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fi
c3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0g
dHJ1ZTsKKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0
dXJuIGlzRGF0YWJhc2VBdmFpbGFibGU7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0
SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisgICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9
IGF2YWlsYWJsZTsKK30KKwogQWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQog
ewogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiA2MTE3OCkK
KysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDkgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIEFic3RyYWN0RGF0
YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxBYnN0cmFjdERhdGFiYXNlPiB7CiBwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJ
c0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSk7CisKICAgICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFi
YXNlKCk7CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsMTggKzczLDYgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFi
bAogICAgIHJldHVybiBuYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxl
ID0gdHJ1ZTsKLQotdm9pZCBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUp
Ci17Ci0gICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLX0KLQotYm9vbCBEYXRh
YmFzZTo6aXNBdmFpbGFibGUoKQotewotICAgIHJldHVybiBpc0RhdGFiYXNlQXZhaWxhYmxlOwot
fQotCiBzdGF0aWMgTXV0ZXgmIGd1aWRNdXRleCgpCiB7CiAgICAgLy8gTm90ZTogV2UgZG9uJ3Qg
aGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDYgQEAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAogY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7Ci0gICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKTsKLQogICAgIHZpcnR1YWwgfkRhdGFiYXNlKCk7CiAKICAgICAv
LyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5
bmMuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOCArNDYsNiBAQCBjb25zdCBTdHJpbmcmIERhdGFi
YXNlU3luYzo6ZGF0YWJhc2VJbmZvCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXN0YXRpYyBib29s
IGlzU3luY0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKLQotdm9pZCBEYXRhYmFzZVN5bmM6OnNl
dElzQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotICAgIGlzU3luY0RhdGFiYXNlQXZhaWxh
YmxlID0gYXZhaWxhYmxlOwotfQotCi1ib29sIERhdGFiYXNlU3luYzo6aXNBdmFpbGFibGUoKQot
ewotICAgIHJldHVybiBpc1N5bmNEYXRhYmFzZUF2YWlsYWJsZTsKLX0KLQogUGFzc1JlZlB0cjxE
YXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZywgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CkBAIC0xMTAsNCArOTgsMyBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBEYXRh
YmFzZVN5bmM6OnNjCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
REFUQUJBU0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYxMTc4KQor
KysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5
ICs0NCw2IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAvLyBJbnN0YW5jZXMgb2YgdGhp
cyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBj
b250ZXh0IHRocmVhZC4KIGNsYXNzIERhdGFiYXNlU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPERh
dGFiYXNlU3luYz4gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldElzQXZhaWxhYmxlKGJv
b2wpOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0KICAgICB+RGF0YWJhc2VTeW5j
KCk7CiAKICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKSW5kZXg6IFdlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTQgQEAKIAog
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRXJy
b3JFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24u
aCIKQEAgLTI3MSw3ICsyNzQsNyBAQCBOb3RpZmljYXRpb25DZW50ZXIqIFdvcmtlckNvbnRleHQ6
OndlYmtpCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2Vy
Q29udGV4dDo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NE
YXRhYmFzZSgpIHx8ICFEYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgeworICAgIGlmICghc2VjdXJp
dHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSB8fCAhQWJzdHJhY3REYXRhYmFzZTo6aXNB
dmFpbGFibGUoKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQpAQCAtMjkwLDE1ICsyOTMsMTEgQEAgdm9pZCBXb3JrZXJDb250ZXh0OjpkYXRh
YmFzZUV4Y2VlZGVkUXVvdAogCiBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gV29ya2VyQ29udGV4
dDo6b3BlbkRhdGFiYXNlU3luYyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0
YWJhc2UoKSkgeworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2Uo
KSB8fCAhQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgewogICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKERhdGFi
YXNlU3luYzo6aXNBdmFpbGFibGUoKSk7Ci0gICAgaWYgKCFEYXRhYmFzZVN5bmM6OmlzQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgcmV0dXJuIERhdGFiYXNlU3luYzo6b3Bl
bkRhdGFiYXNlU3luYyh0aGlzLCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVk
U2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwogfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsNiBAQAogI2lmIEVOQUJMRShXT1JL
RVJTKQogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKQEAgLTQ3LDYgKzQ0LDggQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIERhdGFiYXNlOworICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJh
Y2s7CisgICAgY2xhc3MgRGF0YWJhc2VTeW5jOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRl
cjsKICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CiAgICAgY2xhc3MgV29ya2VyTG9jYXRpb247
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTgwKQorKysgV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA2LTE1ICBEdW1p
dHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxh
YmxlKCkgZnJvbSBEYXRhYmFzZS9EYXRhYmFzZVN5bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAg
ICAgICAgKiBzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1
bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQpOgorCiAyMDEwLTA2LTE0ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IENocm9taXVtIGJ1
aWxkLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAko
cmV2aXNpb24gNjExNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCIKICNp
bmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTQzLDE0ICs0MywxNCBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZShib29sIGVuYWJsZSkK
IHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVu
YWJsZSk7CisgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlKTsKICNl
bmRpZgogfQogCiBib29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQoKQog
ewogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICByZXR1cm4gRGF0YWJhc2U6OmlzQXZhaWxhYmxl
KCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiAjZWxzZQog
ICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTgwKQorKysgV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0w
Ni0xNSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgaXNBdmFpbGFibGUoKS9z
ZXRJc0F2YWlsYWJsZSgpIGZyb20gRGF0YWJhc2UvRGF0YWJhc2VTeW5jIHRvIEFic3RyYWN0RGF0
YWJhc2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
OTA0MQorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X3VwZGF0ZV9zZXR0aW5ncyk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
c2V0dGluZ3Nfbm90aWZ5KToKKyAgICAgICAgKHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwpOgorCiAy
MDEwLTA2LTE0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAid2Via2l0
d2ViaGlzdG9yeWl0ZW0uaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
ICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5j
bHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKQEAgLTQ5LDcgKzUw
LDYgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250
ZXh0TWVudS5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1
ZGUgIkRyYWdDbGllbnRHdGsuaCIKQEAgLTI3MzAsNyArMjczMCw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld191cGRhdGVfc2V0dGkKICAgICBzZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChlbmFibGVQcml2YXRlQnJvd3NpbmcpOwogICAgIHNldHRpbmdzLT5zZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZChlbmFibGVDYXJldEJyb3dzaW5nKTsKICNpZiBFTkFCTEUoREFUQUJB
U0UpCi0gICAgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0YWJhc2UpOwor
ICAgIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0YWJhc2Up
OwogI2VuZGlmCiAgICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoZW5hYmxlSFRN
TDVMb2NhbFN0b3JhZ2UpOwogICAgIHNldHRpbmdzLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChlbmFi
bGVYU1NBdWRpdG9yKTsKQEAgLTI4MjMsNyArMjgyMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19zZXR0aW5nc19ub3QKICAgICAgICAgc2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdF
bmFibGVkKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogICAgIGVsc2UgaWYgKG5hbWUgPT0gZ19pbnRlcm5fc3RyaW5nKCJlbmFibGUtaHRtbDUtZGF0
YWJhc2UiKSkgewotICAgICAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZ192YWx1ZV9nZXRf
Ym9vbGVhbigmdmFsdWUpKTsKKyAgICAgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFi
bGUoZ192YWx1ZV9nZXRfYm9vbGVhbigmdmFsdWUpKTsKICAgICB9CiAjZW5kaWYKICAgICBlbHNl
IGlmIChuYW1lID09IGdfaW50ZXJuX3N0cmluZygiZW5hYmxlLWh0bWw1LWxvY2FsLXN0b3JhZ2Ui
KSkKQEAgLTQ0NTAsNCArNDQ1MCwzIEBAIFdlYktpdENhY2hlTW9kZWwgd2Via2l0X2dldF9jYWNo
ZV9tb2RlbCgKICAgICB3ZWJraXRfaW5pdCgpOwogICAgIHJldHVybiBjYWNoZU1vZGVsOwogfQot
CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNjExODApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVjICA8
ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBEYXRh
YmFzZS9EYXRhYmFzZVN5bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlm
aWNhdGlvbjpdKToKKwogMjAxMC0wNi0xNCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxMyBAQAogI2ltcG9ydCA8
Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQ
SUNhc3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvQWJzdHJhY3REYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KICNp
bXBvcnQgPFdlYkNvcmUvQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0N1cnNvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9EYXRhYmFzZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgpAQCAtMTM1Niw3ICsxMzU2LDcgQEAg
LSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOgogICAgIHNldHRpbmdzLT5z
ZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKFtwcmVmZXJlbmNlcyBtaW5pbXVtTG9naWNhbEZvbnRT
aXplXSk7CiAgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKFtwcmVmZXJlbmNlcyBhcmVQ
bHVnSW5zRW5hYmxlZF0pOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZTo6c2V0
SXNBdmFpbGFibGUoW3ByZWZlcmVuY2VzIGRhdGFiYXNlc0VuYWJsZWRdKTsKKyAgICBBYnN0cmFj
dERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShbcHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxlZF0p
OwogI2VuZGlmCiAgICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoW3ByZWZlcmVu
Y2VzIGxvY2FsU3RvcmFnZUVuYWJsZWRdKTsKICAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVudGFs
Tm90aWZpY2F0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGV4cGVyaW1lbnRhbE5vdGlmaWNhdGlv
bnNFbmFibGVkXSk7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTgwKQorKysgV2ViS2l0L3F0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERh
bmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkg
ZnJvbSBEYXRhYmFzZS9EYXRhYmFzZVN5bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAg
KiBBcGkvcXdlYnNldHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFw
cGx5KToKKwogMjAxMC0wNi0xNCAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tp
YS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgU3ltYmlhbiBidWlsZCBmaXguCkluZGV4OiBX
ZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0Fw
aS9xd2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC9xdC9BcGkvcXdl
YnNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUg
InF3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxd2VicGx1Z2luZGF0YWJhc2VfcC5oIgogCisjaW5j
bHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAi
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
Z2VDYWNoZS5oIgpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6
YXBwbHkoKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVz
LnZhbHVlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1
ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKSk7Ci0gICAgICAg
IFdlYkNvcmU6OkRhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZSh2YWx1ZSk7CisgICAgICAgIFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKHZhbHVlKTsKICNlbmRpZgogCiAg
ICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCwKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MTE4MCkKKysrIFdlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0
SXNBdmFpbGFibGUoKSBmcm9tIERhdGFiYXNlL0RhdGFiYXNlU3luYyB0byBBYnN0cmFjdERhdGFi
YXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzkw
NDEKKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6bm90aWZ5UHJl
ZmVyZW5jZXNDaGFuZ2VkKToKKwogMjAxMC0wNi0xNCAgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9j
ay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Fic3RyYWN0RGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9CU3RyaW5nLmg+CkBAIC03Myw3ICs3NCw2IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3Jh
Z2VXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
RGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EcmFnQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KQEAg
LTQ3MTAsNyArNDcxMCw3IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFu
Z2UKICAgICBociA9IHByZWZzUHJpdmF0ZS0+ZGF0YWJhc2VzRW5hYmxlZCgmZW5hYmxlZCk7CiAg
ICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKLSAgICBEYXRhYmFzZTo6c2V0
SXNBdmFpbGFibGUoZW5hYmxlZCk7CisgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFi
bGUoZW5hYmxlZCk7CiAjZW5kaWYKIAogICAgIGhyID0gcHJlZnNQcml2YXRlLT5sb2NhbFN0b3Jh
Z2VFbmFibGVkKCZlbmFibGVkKTsKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNjExODApCisrKyBXZWJLaXQvd3gv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTUgIER1
bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFp
bGFibGUoKSBmcm9tIERhdGFiYXNlL0RhdGFiYXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKwor
ICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAod3hXZWJWaWV3OjpTZXREYXRhYmFzZXNF
bmFibGVkKToKKyAgICAgICAgKHd4V2ViVmlldzo6QXJlRGF0YWJhc2VzRW5hYmxlZCk6CisKIDIw
MTAtMDYtMTQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJLaXQvd3gvV2ViVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2MTE3OCkK
KysrIFdlYktpdC93eC9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBA
QAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
LSNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNp
bmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNlbmRpZgogCkBAIC05OTUsNyArOTk1LDcgQEAg
d3hTdHJpbmcgd3hXZWJWaWV3OjpHZXREYXRhYmFzZURpcmVjdG9yeQogdm9pZCB3eFdlYlZpZXc6
OlNldERhdGFiYXNlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogI2lmIEVOQUJMRShEQVRBQkFT
RSkKLSAgICBXZWJDb3JlOjpEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CisgICAg
V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CiAjZW5k
aWYKIH0KIApAQCAtMTAwMyw3ICsxMDAzLDcgQEAgdm9pZCB3eFdlYlZpZXc6OlNldERhdGFiYXNl
c0VuYWJsZWQoYm9vbAogYm9vbCB3eFdlYlZpZXc6OkFyZURhdGFiYXNlc0VuYWJsZWQoKQogewog
I2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJhc2U6OmlzQXZh
aWxhYmxlKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxh
YmxlKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="commit-queue"
          id="45216"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58769</attachid>
            <date>2010-06-15 04:38:10 -0700</date>
            <delta_ts>2010-06-17 17:02:39 -0700</delta_ts>
            <desc>patch #4: sync and async DB APIs should be enabled/disabled at runtime by the same flag</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21172</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUoKSBmcm9tIERhdGFiYXNlL0RhdGFi
YXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHAK
KyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0
YWJhc2VTeW5jRW5hYmxlZCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2Uv
QWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRJ
c0F2YWlsYWJsZSk6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5o
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisKIDIwMTAtMDYtMTUgIEpvY2VseW4gVHVyY290dGUgIDxq
b2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBI
YXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNiArMzczLDcgQEAgX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3I1d2lkdGhFUktOUwogX19aTjdXZWJDb3JlMTVWaXNpYmxlUG9z
aXRpb25DMUVQTlNfNE5vZGVFaU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNVZpc2libGVQ
b3NpdGlvbkMxRVJLTlNfOFBvc2l0aW9uRU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNXJl
cG9ydEV4Y2VwdGlvbkVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUUKK19fWk43V2ViQ29y
ZTE2QWJzdHJhY3REYXRhYmFzZTE0c2V0SXNBdmFpbGFibGVFYgogX19aTjdXZWJDb3JlMTZGb250
RmFsbGJhY2tMaXN0MTVyZWxlYXNlRm9udERhdGFFdgogX19aTjdXZWJDb3JlMTZGb250UGxhdGZv
cm1EYXRhQzFFUDZOU0ZvbnRiYgogX19aTjdXZWJDb3JlMTZGb250UGxhdGZvcm1EYXRhRDFFdgpA
QCAtNjE1LDcgKzYxNiw2IEBAIF9fWk43V2ViQ29yZTdJbnRSZWN0QzFFUktOU185RmxvYXRSZWN0
RQogX19aTjdXZWJDb3JlN0ludFNpemVDMUVSSzdfTlNTaXplCiBfX1pON1dlYkNvcmU3Y29va2ll
c0VQS05TXzhEb2N1bWVudEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlN25zQ29sb3JFUktOU181
Q29sb3JFCi1fX1pON1dlYkNvcmU4RGF0YWJhc2UxNHNldElzQXZhaWxhYmxlRWIKIF9fWk43V2Vi
Q29yZThEb2N1bWVudDExY3JlYXRlUmFuZ2VFdgogX19aTjdXZWJDb3JlOERvY3VtZW50MTNyZW1v
dmVNYXJrZXJzRU5TXzE0RG9jdW1lbnRNYXJrZXIxME1hcmtlclR5cGVFCiBfX1pON1dlYkNvcmU4
RG9jdW1lbnQxM3N2Z0V4dGVuc2lvbnNFdgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkocmV2aXNpb24gNjExNzgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgot
I2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRv
cnkuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTk1LDEyICs5NCwxMiBAQCBib29sIFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYlNvY2tldEVuCiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
Ym9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpvcGVuRGF0YWJhc2VFbmFibGVkKCkKIHsKLSAg
ICByZXR1cm4gRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0
YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiB9CiAKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
b3BlbkRhdGFiYXNlU3luY0VuYWJsZWQoKQogewotICAgIHJldHVybiBEYXRhYmFzZVN5bmM6Omlz
QXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7
CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkRhdGFiYXNlU3luYy5oIgogI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKICNpbmNsdWRlICJKU0Rh
dGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0RhdGFiYXNlU3luYy5oIgpJbmRleDogV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJET01XaW5kb3cuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNp
bmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCYXJJbmZvLmgiCiAjaW5jbHVkZSAiQmVmb3Jl
VW5sb2FkRXZlbnQuaCIKQEAgLTEyMDMsNyArMTIwNCw3IEBAIGRvdWJsZSBET01XaW5kb3c6OmRl
dmljZVBpeGVsUmF0aW8oKSBjb24KIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERPTVdpbmRvdzo6b3Bl
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IDA7Ci0gICAgaWYgKG1fZnJh
bWUgJiYgRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkKKyAgICBpZiAobV9mcmFtZSAmJiBB
YnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpCiAgICAgICAgIGRhdGFiYXNlID0g
RGF0YWJhc2U6Om9wZW5EYXRhYmFzZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBuYW1lLCB2ZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwogCiAg
ICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitzdGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKKworYm9v
bCBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGlzRGF0YWJh
c2VBdmFpbGFibGU7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUo
Ym9vbCBhdmFpbGFibGUpCit7CisgICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsK
K30KKwogQWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQogewogfQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDkg
QEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIEFic3RyYWN0RGF0YWJhc2UgOiBwdWJs
aWMgVGhyZWFkU2FmZVNoYXJlZDxBYnN0cmFjdERhdGFiYXNlPiB7CiBwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJsZShi
b29sIGF2YWlsYWJsZSk7CisKICAgICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7CiAKICAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCA9IDA7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzcz
LDYgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibAogICAgIHJldHVy
biBuYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKLQot
dm9pZCBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgaXNE
YXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6aXNBdmFp
bGFibGUoKQotewotICAgIHJldHVybiBpc0RhdGFiYXNlQXZhaWxhYmxlOwotfQotCiBzdGF0aWMg
TXV0ZXgmIGd1aWRNdXRleCgpCiB7CiAgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2Ug
QXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDkgKzU4LDYgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAog
Y2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFp
bGFibGUoKTsKLQogICAgIHZpcnR1YWwgfkRhdGFiYXNlKCk7CiAKICAgICAvLyBEaXJlY3Qgc3Vw
cG9ydCBmb3IgdGhlIERPTSBBUEkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZp
c2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxOCArNDYsNiBAQCBjb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0
YWJhc2VJbmZvCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLXN0YXRpYyBib29sIGlzU3luY0RhdGFi
YXNlQXZhaWxhYmxlID0gdHJ1ZTsKLQotdm9pZCBEYXRhYmFzZVN5bmM6OnNldElzQXZhaWxhYmxl
KGJvb2wgYXZhaWxhYmxlKQotewotICAgIGlzU3luY0RhdGFiYXNlQXZhaWxhYmxlID0gYXZhaWxh
YmxlOwotfQotCi1ib29sIERhdGFiYXNlU3luYzo6aXNBdmFpbGFibGUoKQotewotICAgIHJldHVy
biBpc1N5bmNEYXRhYmFzZUF2YWlsYWJsZTsKLX0KLQogUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+
IERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZywgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CkBA
IC0xMTAsNCArOTgsMyBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBEYXRhYmFzZVN5bmM6OnNj
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCi0K
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIHR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91
bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVh
ZC4KIGNsYXNzIERhdGFiYXNlU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4g
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldElzQXZhaWxhYmxlKGJvb2wpOwotICAgIHN0
YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0KICAgICB+RGF0YWJhc2VTeW5jKCk7CiAKICAgICAv
LyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTQgQEAKIAogI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKICNpbmNsdWRlICJE
YXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKQEAgLTI3MSw3
ICsyNzQsNyBAQCBOb3RpZmljYXRpb25DZW50ZXIqIFdvcmtlckNvbnRleHQ6OndlYmtpCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dDo6b3Bl
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8
ICFEYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgeworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+
Y2FuQWNjZXNzRGF0YWJhc2UoKSB8fCAhQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkg
ewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpA
QCAtMjkwLDE1ICsyOTMsMTEgQEAgdm9pZCBXb3JrZXJDb250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVk
UXVvdAogCiBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlU3luYyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkgewor
ICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSB8fCAhQWJzdHJh
Y3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKERhdGFiYXNlU3luYzo6aXNB
dmFpbGFibGUoKSk7Ci0gICAgaWYgKCFEYXRhYmFzZVN5bmM6OmlzQXZhaWxhYmxlKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCiAgICAgcmV0dXJuIERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3lu
Yyh0aGlzLCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRp
b25DYWxsYmFjaywgZWMpOwogfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJ
KHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsOSArMzAsNiBAQAogI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5j
bHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVk
ZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKQEAgLTQ3LDYgKzQ0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIERhdGFiYXNlOworICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CisgICAgY2xh
c3MgRGF0YWJhc2VTeW5jOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKICAgICBjbGFz
cyBTY2hlZHVsZWRBY3Rpb247CiAgICAgY2xhc3MgV29ya2VyTG9jYXRpb247CkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYxMTgwKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVj
ICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBE
YXRhYmFzZS9EYXRhYmFzZVN5bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBzcmMv
V2ViUnVudGltZUZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJl
czo6aXNEYXRhYmFzZUVuYWJsZWQpOgorCiAyMDEwLTA2LTE0ICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IENocm9taXVtIGJ1aWxkLgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcAkocmV2aXNpb24gNjEx
NzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXZWJT
b2NrZXQuaCIKQEAgLTQzLDE0ICs0MywxNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2Vi
UnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZShib29sIGVuYWJsZSkKIHsKICNpZiBFTkFC
TEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZSk7CisgICAg
QWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlKTsKICNlbmRpZgogfQogCiBi
b29sIFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQoKQogewogI2lmIEVOQUJM
RShEQVRBQkFTRSkKLSAgICByZXR1cm4gRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CisgICAgcmV0
dXJuIEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiAjZWxzZQogICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTgwKQorKysgV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0xNSAgRHVtaXRy
dSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgaXNBdmFpbGFibGUoKS9zZXRJc0F2YWlsYWJs
ZSgpIGZyb20gRGF0YWJhc2UvRGF0YWJhc2VTeW5jIHRvIEFic3RyYWN0RGF0YWJhc2UuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA0MQorCisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X3VwZGF0ZV9zZXR0aW5ncyk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90
aWZ5KToKKyAgICAgICAgKHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwpOgorCiAyMDEwLTA2LTE0ICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZp
c2lvbiA2MTE3OCkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAid2Via2l0d2ViaGlzdG9yeWl0
ZW0uaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKQEAgLTQ5LDcgKzUwLDYgQEAKICNpbmNs
dWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgog
I2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRyYWdDbGll
bnRHdGsuaCIKQEAgLTI3MzAsNyArMjczMCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d191cGRhdGVfc2V0dGkKICAgICBzZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChl
bmFibGVQcml2YXRlQnJvd3NpbmcpOwogICAgIHNldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5h
YmxlZChlbmFibGVDYXJldEJyb3dzaW5nKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0
YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0YWJhc2UpOworICAgIEFic3RyYWN0
RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGVuYWJsZUhUTUw1RGF0YWJhc2UpOwogI2VuZGlmCiAg
ICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoZW5hYmxlSFRNTDVMb2NhbFN0b3Jh
Z2UpOwogICAgIHNldHRpbmdzLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChlbmFibGVYU1NBdWRpdG9y
KTsKQEAgLTI4MjMsNyArMjgyMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXR0
aW5nc19ub3QKICAgICAgICAgc2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGdfdmFs
dWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIGVsc2Ug
aWYgKG5hbWUgPT0gZ19pbnRlcm5fc3RyaW5nKCJlbmFibGUtaHRtbDUtZGF0YWJhc2UiKSkgewot
ICAgICAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZ192YWx1ZV9nZXRfYm9vbGVhbigmdmFs
dWUpKTsKKyAgICAgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZ192YWx1ZV9n
ZXRfYm9vbGVhbigmdmFsdWUpKTsKICAgICB9CiAjZW5kaWYKICAgICBlbHNlIGlmIChuYW1lID09
IGdfaW50ZXJuX3N0cmluZygiZW5hYmxlLWh0bWw1LWxvY2FsLXN0b3JhZ2UiKSkKQEAgLTQ0NTAs
NCArNDQ1MCwzIEBAIFdlYktpdENhY2hlTW9kZWwgd2Via2l0X2dldF9jYWNoZV9tb2RlbCgKICAg
ICB3ZWJraXRfaW5pdCgpOwogICAgIHJldHVybiBjYWNoZU1vZGVsOwogfQotCkluZGV4OiBXZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gNjExODApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBEYXRhYmFzZS9EYXRhYmFz
ZVN5bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06
CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToK
KwogMjAxMC0wNi0xNCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxMyBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9O
U1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQWJz
dHJhY3REYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZExpc3QuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0N1cnNv
ci5oPgotI2ltcG9ydCA8V2ViQ29yZS9EYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9EcmFnQ29udHJvbGxlci5oPgpAQCAtMTM1Niw3ICsxMzU2LDcgQEAgLSAodm9pZClfcHJl
ZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOgogICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtTG9n
aWNhbEZvbnRTaXplKFtwcmVmZXJlbmNlcyBtaW5pbXVtTG9naWNhbEZvbnRTaXplXSk7CiAgICAg
c2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKFtwcmVmZXJlbmNlcyBhcmVQbHVnSW5zRW5hYmxl
ZF0pOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUo
W3ByZWZlcmVuY2VzIGRhdGFiYXNlc0VuYWJsZWRdKTsKKyAgICBBYnN0cmFjdERhdGFiYXNlOjpz
ZXRJc0F2YWlsYWJsZShbcHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxlZF0pOwogI2VuZGlmCiAg
ICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoW3ByZWZlcmVuY2VzIGxvY2FsU3Rv
cmFnZUVuYWJsZWRdKTsKICAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVudGFsTm90aWZpY2F0aW9u
c0VuYWJsZWQoW3ByZWZlcmVuY2VzIGV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkXSk7
CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYxMTgwKQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTE1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVt
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTW92ZSBpc0F2YWlsYWJsZSgpL3NldElzQXZhaWxhYmxlKCkgZnJvbSBEYXRhYmFz
ZS9EYXRhYmFzZVN5bmMgdG8gQWJzdHJhY3REYXRhYmFzZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDQxCisKKyAgICAgICAgKiBBcGkvcXdlYnNl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5KToKKwogMjAx
MC0wNi0xNCAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgU3ltYmlhbiBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQvcXQvQXBp
L3F3ZWJzZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGlu
Z3MuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUgInF3ZWJwYWdlX3Au
aCIKICNpbmNsdWRlICJxd2VicGx1Z2luZGF0YWJhc2VfcC5oIgogCisjaW5jbHVkZSAiQWJzdHJh
Y3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgpA
QCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkoKQogI2lm
IEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFXZWJT
ZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGlu
Z3M6Ok9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKSk7Ci0gICAgICAgIFdlYkNvcmU6OkRh
dGFiYXNlOjpzZXRJc0F2YWlsYWJsZSh2YWx1ZSk7CisgICAgICAgIFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKHZhbHVlKTsKICNlbmRpZgogCiAgICAgICAgIHZhbHVl
ID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlRW5hYmxlZCwKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MTE4MCkKKysrIFdlYktpdC93aW4vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUg
RGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUo
KSBmcm9tIERhdGFiYXNlL0RhdGFiYXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAg
ICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFu
Z2VkKToKKwogMjAxMC0wNi0xNCAgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdl
YktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6
ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Fic3RyYWN0
RGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9C
U3RyaW5nLmg+CkBAIC03Myw3ICs3NCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2VXaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KQEAgLTQ3MTAsNyArNDcx
MCw3IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2UKICAgICBociA9
IHByZWZzUHJpdmF0ZS0+ZGF0YWJhc2VzRW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxF
RChocikpCiAgICAgICAgIHJldHVybiBocjsKLSAgICBEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUo
ZW5hYmxlZCk7CisgICAgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7
CiAjZW5kaWYKIAogICAgIGhyID0gcHJlZnNQcml2YXRlLT5sb2NhbFN0b3JhZ2VFbmFibGVkKCZl
bmFibGVkKTsKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNjExODApCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTUgIER1bWl0cnUgRGFuaWxp
dWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNb3ZlIGlzQXZhaWxhYmxlKCkvc2V0SXNBdmFpbGFibGUoKSBmcm9t
IERhdGFiYXNlL0RhdGFiYXNlU3luYyB0byBBYnN0cmFjdERhdGFiYXNlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNDEKKworICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAod3hXZWJWaWV3OjpTZXREYXRhYmFzZXNFbmFibGVkKToKKyAg
ICAgICAgKHd4V2ViVmlldzo6QXJlRGF0YWJhc2VzRW5hYmxlZCk6CisKIDIwMTAtMDYtMTQgIEls
eWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJLaXQvd3gvV2ViVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3d4L1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYktpdC93
eC9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRlICJE
YXRhYmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNlbmRpZgogCkBAIC05OTUsNyArOTk1LDcgQEAgd3hTdHJpbmcgd3hX
ZWJWaWV3OjpHZXREYXRhYmFzZURpcmVjdG9yeQogdm9pZCB3eFdlYlZpZXc6OlNldERhdGFiYXNl
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBXZWJD
b3JlOjpEYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CisgICAgV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAt
MTAwMyw3ICsxMDAzLDcgQEAgdm9pZCB3eFdlYlZpZXc6OlNldERhdGFiYXNlc0VuYWJsZWQoYm9v
bAogYm9vbCB3eFdlYlZpZXc6OkFyZURhdGFiYXNlc0VuYWJsZWQoKQogewogI2lmIEVOQUJMRShE
QVRBQkFTRSkKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCk7CiAjZW5k
aWYKICAgICByZXR1cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="review"
          id="45217"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="45218"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>