<?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>82503</bug_id>
          
          <creation_ts>2012-03-28 12:16:25 -0700</creation_ts>
          <short_desc>Provide UI to show alternative strings of dictated text.</short_desc>
          <delta_ts>2012-04-19 11:22:11 -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>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>82942</dependson>
    
    <dependson>82946</dependson>
    
    <dependson>82970</dependson>
    
    <dependson>83047</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jia Pu">jiapu.mail</reporter>
          <assigned_to name="Jia Pu">jiapu.mail</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>mitz</cc>
    
    <cc>morrita</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590254</commentid>
    <comment_count>0</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-28 12:16:25 -0700</bug_when>
    <thetext>When user uses speech recognition as input method, sometimes the recognizer is not very confident about the recognized text, and provides alternatives texts. On OSX, AppKit provides an UI to show alternative text when user move caret to end of a dictated word which has alternatives. The behavior is similar to spelling suggestion UI. We&apos;d like to hook up the same UI to WebKit on OSX.

&lt;rdar://problem/11033898&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590543</commentid>
    <comment_count>1</comment_count>
      <attachid>134430</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-28 15:49:02 -0700</bug_when>
    <thetext>Created attachment 134430
Patch (v1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590581</commentid>
    <comment_count>2</comment_count>
      <attachid>134430</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-03-28 16:33:30 -0700</bug_when>
    <thetext>Comment on attachment 134430
Patch (v1)

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:27747
&gt; +				COPY_PHASE_STRIP = NO;
&gt; +				GCC_TREAT_WARNINGS_AS_ERRORS = NO;

Don&apos;t do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590601</commentid>
    <comment_count>3</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-28 16:52:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 134430 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134430&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:27747
&gt; &gt; +				COPY_PHASE_STRIP = NO;
&gt; &gt; +				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
&gt; 
&gt; Don&apos;t do this.

Oops. We will for sure have some revision to this patch. I will revert this in next patch. Accidental change when I struggled to set up a debug environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590632</commentid>
    <comment_count>4</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-28 17:10:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 134430 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134430&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:27747
&gt; &gt; +				COPY_PHASE_STRIP = NO;
&gt; &gt; +				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
&gt; 
&gt; Don&apos;t do this.

Oops. We will for sure have some revision to this patch. I will revert this in next patch. Accidental change when I struggled to set up a debug environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590865</commentid>
    <comment_count>5</comment_count>
      <attachid>134430</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-28 23:05:10 -0700</bug_when>
    <thetext>Comment on attachment 134430
Patch (v1)

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

&gt; Source/WebCore/editing/DictationAlternativeController.h:13
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY

This is an old version of the license - the company is called differently now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590914</commentid>
    <comment_count>6</comment_count>
      <attachid>134518</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 00:36:54 -0700</bug_when>
    <thetext>Created attachment 134518
Patch (v2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590915</commentid>
    <comment_count>7</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 00:38:21 -0700</bug_when>
    <thetext>Patch (v2):
Updated patch to TOT.
Reverted unintended xcode project file change.
Fixed entity name in license term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590916</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 00:42:17 -0700</bug_when>
    <thetext>Attachment 134518 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/editing/SpellingCorrectionController.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/editing/Editor.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/editing/DictationAlternativeController.h:37:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 3 in 78 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>590923</commentid>
    <comment_count>9</comment_count>
      <attachid>134518</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 00:58:00 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12172219</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590924</commentid>
    <comment_count>10</comment_count>
      <attachid>134518</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 00:58:37 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12172218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590925</commentid>
    <comment_count>11</comment_count>
      <attachid>134518</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 00:58:38 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12204151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590927</commentid>
    <comment_count>12</comment_count>
      <attachid>134518</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 01:03:45 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12172220</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590931</commentid>
    <comment_count>13</comment_count>
      <attachid>134518</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 01:15:02 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12202146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590955</commentid>
    <comment_count>14</comment_count>
      <attachid>134518</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 01:58:06 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12184258</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590959</commentid>
    <comment_count>15</comment_count>
      <attachid>134518</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 02:05:18 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12192178</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590961</commentid>
    <comment_count>16</comment_count>
      <attachid>134518</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 02:06:08 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12173231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590963</commentid>
    <comment_count>17</comment_count>
      <attachid>134518</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 02:08:10 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12192181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590967</commentid>
    <comment_count>18</comment_count>
      <attachid>134518</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-29 02:14:26 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12173239</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591046</commentid>
    <comment_count>19</comment_count>
      <attachid>134518</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-29 04:55:00 -0700</bug_when>
    <thetext>Comment on attachment 134518
Patch (v2)

Attachment 134518 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12172314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591288</commentid>
    <comment_count>20</comment_count>
      <attachid>134612</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 10:34:40 -0700</bug_when>
    <thetext>Created attachment 134612
Patch (v3)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591289</commentid>
    <comment_count>21</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 10:35:39 -0700</bug_when>
    <thetext>Patch (v3): Attempt to fix build failures on various platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591293</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 10:38:27 -0700</bug_when>
    <thetext>Attachment 134612 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/editing/DictationAlternativeController.h:37:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/WebCore.vcproj/WebCore.vcproj:54006:  not well-formed (invalid token)  [xml/syntax] [5]
Total errors found: 2 in 89 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>591306</commentid>
    <comment_count>23</comment_count>
      <attachid>134616</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 10:47:19 -0700</bug_when>
    <thetext>Created attachment 134616
Patch (v4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591310</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 10:51:57 -0700</bug_when>
    <thetext>Attachment 134616 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/editing/DictationAlternativeController.h:37:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 89 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>591321</commentid>
    <comment_count>25</comment_count>
      <attachid>134616</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-29 11:00:39 -0700</bug_when>
    <thetext>Comment on attachment 134616
Patch (v4)

Attachment 134616 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12192369</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591334</commentid>
    <comment_count>26</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 11:09:50 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Attachment 134616 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
&gt; Source/WebCore/editing/DictationAlternativeController.h:37:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Total errors found: 1 in 89 files
&gt; 
&gt; 

I not quite sure about this style violation. The offending line just follows what&apos;s already on SpellingCorrectionController.h:69.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591341</commentid>
    <comment_count>27</comment_count>
      <attachid>134616</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-29 11:14:44 -0700</bug_when>
    <thetext>Comment on attachment 134616
Patch (v4)

Attachment 134616 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12192374</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591344</commentid>
    <comment_count>28</comment_count>
      <attachid>134616</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 11:18:11 -0700</bug_when>
    <thetext>Comment on attachment 134616
Patch (v4)

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

r- due to style and build EWS failures. You should also restructure this code so that it doesn&apos;t add so much code.

&gt; Source/WebCore/ChangeLog:16
&gt; +        3. Introduced DictationCommand which will add DictationAlternative markers to text
&gt; +           inserted by the command.

It seems like this class is unnecessary. We probably want to add a new flag or something to InsertTextCommand instead.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:76
&gt; +    VisibleSelection currentSelection(m_frame-&gt;selection()-&gt;selection());
&gt; +    if (!currentSelection.isCaret() || currentSelection == oldSelection)
&gt; +        return;
&gt; +    
&gt; +    VisiblePosition selectionPosition = currentSelection.start();
&gt; +    // Creating a Visible position triggers a layout and there is no
&gt; +    // guarantee that the selection is still valid.
&gt; +    if (selectionPosition.isNull())
&gt; +        return;
&gt; +    
&gt; +    VisiblePosition endPositionOfWord = endOfWord(selectionPosition, LeftWordIfOnBoundary);
&gt; +    if (selectionPosition != endPositionOfWord)
&gt; +        return;
&gt; +    
&gt; +    Position position = endPositionOfWord.deepEquivalent();
&gt; +    if (position.anchorType() != Position::PositionIsOffsetInAnchor)
&gt; +        return;

This chunk of code is duplicated in SpellingCorrectionController::respondToChangedSelection.
We should at least share some code with SpellingCorrectionController.
I&apos;m not convinced at all that we need this new class for just supporting dictation alternatives.
Can&apos;t we generalize SpellingCorrectionController to support dictations as well?

&gt; Source/WebCore/editing/AlternativeTextController.cpp:129
&gt; +PassRefPtr&lt;Range&gt; replaceTextInRange(const String&amp; newText, Range* range, Frame* frame, bool forSpellingCorrection)
&gt; +{

This function probably belongs in Editor.cpp

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:5975
&gt; +#if USE(DICTATION_ALTERNATIVES)
&gt; +        if (dictationAlternatives.size())
&gt; +            eventHandled = [[self _webView] _insertDictatedText:eventText alternatives:dictationAlternatives triggeringEvent:event];
&gt; +        else
&gt; +#endif
&gt; +            eventHandled = coreFrame-&gt;editor()-&gt;insertText(eventText, event);

You should obtain the list of dictation alternatives here, and then add some optional argument to insertText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591351</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 11:20:35 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; Attachment 134616 [details] [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
&gt; &gt; Source/WebCore/editing/DictationAlternativeController.h:37:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; &gt; Total errors found: 1 in 89 files
&gt; &gt; 
&gt; &gt; 
&gt; 
&gt; I not quite sure about this style violation. The offending line just follows what&apos;s already on SpellingCorrectionController.h:69.

A lot of existing code violates coding style but we try to fix any style violations in new code so that we can slowly migrate the entire code base to be style-guide compliant :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591414</commentid>
    <comment_count>30</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-29 12:05:38 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 134616 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134616&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        3. Introduced DictationCommand which will add DictationAlternative markers to text
&gt; &gt; +           inserted by the command.
&gt; 
&gt; It seems like this class is unnecessary. We probably want to add a new flag or something to InsertTextCommand instead.

DictationCommand is the counter part of TypingCommand when the input is done by dictation rather than typing. They both call into InsertTextCommand eventually. I could try to merge DictationCommand into TypingCommand, but then the name &quot;TypingCommand&quot; won&apos;t be accurate anymore. Do we want to keep them separated to make the distinction clear, or do we want to merge them, and maybe change &quot;TypingCommand&quot; to &quot;TextInputCommand&quot; ?

&gt; 
&gt; &gt; Source/WebCore/editing/AlternativeTextController.cpp:76
&gt; &gt; +    VisibleSelection currentSelection(m_frame-&gt;selection()-&gt;selection());
&gt; &gt; +    if (!currentSelection.isCaret() || currentSelection == oldSelection)
&gt; &gt; +        return;
&gt; &gt; +    
&gt; &gt; +    VisiblePosition selectionPosition = currentSelection.start();
&gt; &gt; +    // Creating a Visible position triggers a layout and there is no
&gt; &gt; +    // guarantee that the selection is still valid.
&gt; &gt; +    if (selectionPosition.isNull())
&gt; &gt; +        return;
&gt; &gt; +    
&gt; &gt; +    VisiblePosition endPositionOfWord = endOfWord(selectionPosition, LeftWordIfOnBoundary);
&gt; &gt; +    if (selectionPosition != endPositionOfWord)
&gt; &gt; +        return;
&gt; &gt; +    
&gt; &gt; +    Position position = endPositionOfWord.deepEquivalent();
&gt; &gt; +    if (position.anchorType() != Position::PositionIsOffsetInAnchor)
&gt; &gt; +        return;
&gt; 
&gt; This chunk of code is duplicated in SpellingCorrectionController::respondToChangedSelection.
&gt; We should at least share some code with SpellingCorrectionController.

I use AlternativeTextController to hold code shared by SpellingCorrectionController and DictationAlternativeController. I will try to factor this piece of code out as well.

&gt; I&apos;m not convinced at all that we need this new class for just supporting dictation alternatives.
&gt; Can&apos;t we generalize SpellingCorrectionController to support dictations as well?

OK, I will merge DictationAlternativeController into SpellingCorrectionController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592719</commentid>
    <comment_count>31</comment_count>
      <attachid>134925</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-30 18:41:17 -0700</bug_when>
    <thetext>Created attachment 134925
Patch (v5)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592723</commentid>
    <comment_count>32</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-03-30 18:48:42 -0700</bug_when>
    <thetext>Following Ryosuke&apos;s suggestion, Patch (v5) avoided adding new classes DictationAlternativeController and AlternativeTextController, in addition to existing SpellingCorrectionController. Instead, this patch renamed SpellingCorrectionController to AlternativeTextController, which now contains logic for both spelling correction and alternative dictated text. But this does result in much larger patch size.

This patch still contains new class DictationCommand. Since InsertTextCommand assumes that the input doesn&apos;t contain line separator, it&apos;s not very easy to fit dictation input into InsertTextCommand. It&apos;s possible to merge dictation command into existing TypingCommand class. However, TypingCommand is quite complex already, and most of its functionalities are irrelevant to dictated text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592731</commentid>
    <comment_count>33</comment_count>
      <attachid>134925</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 19:01:35 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12288547</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592732</commentid>
    <comment_count>34</comment_count>
      <attachid>134925</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 19:02:33 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12267558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592734</commentid>
    <comment_count>35</comment_count>
      <attachid>134925</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-30 19:10:07 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12266634</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592744</commentid>
    <comment_count>36</comment_count>
      <attachid>134925</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 19:34:52 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12291540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592755</commentid>
    <comment_count>37</comment_count>
      <attachid>134925</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-30 19:47:28 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12291551</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592756</commentid>
    <comment_count>38</comment_count>
      <attachid>134925</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 19:49:34 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12247617</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592757</commentid>
    <comment_count>39</comment_count>
      <attachid>134925</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-30 19:50:34 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12266626</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592762</commentid>
    <comment_count>40</comment_count>
      <attachid>134925</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 19:59:31 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12266657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592765</commentid>
    <comment_count>41</comment_count>
      <attachid>134925</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-30 20:14:09 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Attachment 134925 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12262561</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592811</commentid>
    <comment_count>42</comment_count>
      <attachid>134925</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-31 00:04:15 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

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

I would be interested in hearing morrita&apos;s comments here since he has done a lot of refactoring in this area.
I want to make sure we&apos;re heading to the right direction with this new feature.

&gt; Source/WebCore/editing/AlternativeTextController.h:119
&gt; +class AlternativeTextController {

Did you use svn mv for this rename? patch usually shows diff if you had used svn mv.

&gt; Source/WebCore/editing/DictationCommand.cpp:102
&gt; +void DictationCommand::doApply()
&gt; +{
&gt; +    unsigned offset = 0;
&gt; +    size_t newline;
&gt; +    while ((newline = m_textToInsert.find(&apos;\n&apos;, offset)) != notFound) {
&gt; +        if (newline != offset)
&gt; +            insertTextRunWithoutNewlines(offset, newline - offset);
&gt; +        insertParagraphSeparator();
&gt; +        offset = newline + 1;
&gt; +    }
&gt; +    if (!offset)
&gt; +        insertTextRunWithoutNewlines(0, m_textToInsert.length());
&gt; +    else {
&gt; +        unsigned length = m_textToInsert.length();
&gt; +        if (length != offset)
&gt; +            insertTextRunWithoutNewlines(offset, length - offset);
&gt; +    }
&gt; +}

This looks like a duplicate of TypingCommand::insertText(const String &amp;text, bool selectInsertedText) at http://trac.webkit.org/browser/trunk/Source/WebCore/editing/TypingCommand.cpp?rev=106646#L354
Why do we need to duplicate this code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593100</commentid>
    <comment_count>43</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-01 16:19:32 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 134925 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134925&amp;action=review
&gt; 
&gt; I would be interested in hearing morrita&apos;s comments here since he has done a lot of refactoring in this area.
&gt; I want to make sure we&apos;re heading to the right direction with this new feature.
&gt; 
&gt; &gt; Source/WebCore/editing/AlternativeTextController.h:119
&gt; &gt; +class AlternativeTextController {
&gt; 
&gt; Did you use svn mv for this rename? patch usually shows diff if you had used svn mv.

No, I use git-svn, and renamed it in Xcode. I think xcode uses &quot;git mv&quot; under the hood. 

&gt; 
&gt; &gt; Source/WebCore/editing/DictationCommand.cpp:102
&gt; &gt; +void DictationCommand::doApply()
&gt; &gt; +{
&gt; &gt; +    unsigned offset = 0;
&gt; &gt; +    size_t newline;
&gt; &gt; +    while ((newline = m_textToInsert.find(&apos;\n&apos;, offset)) != notFound) {
&gt; &gt; +        if (newline != offset)
&gt; &gt; +            insertTextRunWithoutNewlines(offset, newline - offset);
&gt; &gt; +        insertParagraphSeparator();
&gt; &gt; +        offset = newline + 1;
&gt; &gt; +    }
&gt; &gt; +    if (!offset)
&gt; &gt; +        insertTextRunWithoutNewlines(0, m_textToInsert.length());
&gt; &gt; +    else {
&gt; &gt; +        unsigned length = m_textToInsert.length();
&gt; &gt; +        if (length != offset)
&gt; &gt; +            insertTextRunWithoutNewlines(offset, length - offset);
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; This looks like a duplicate of TypingCommand::insertText(const String &amp;text, bool selectInsertedText) at http://trac.webkit.org/browser/trunk/Source/WebCore/editing/TypingCommand.cpp?rev=106646#L354
&gt; Why do we need to duplicate this code?

I am hesitant to put DictationCommand code into TypingCommand. How about move this function into CompoteEditCommand, so that it can be used by both DictationCommand and TypingCommand?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593102</commentid>
    <comment_count>44</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-01 16:56:41 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; (From update of attachment 134925 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134925&amp;action=review
&gt; &gt; 
&gt; &gt; I would be interested in hearing morrita&apos;s comments here since he has done a lot of refactoring in this area.
&gt; &gt; I want to make sure we&apos;re heading to the right direction with this new feature.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/editing/AlternativeTextController.h:119
&gt; &gt; &gt; +class AlternativeTextController {
&gt; &gt; 
&gt; &gt; Did you use svn mv for this rename? patch usually shows diff if you had used svn mv.
&gt; 
&gt; No, I use git-svn, and renamed it in Xcode. I think xcode uses &quot;git mv&quot; under the hood. 

The last time I checked, git mv doesn&apos;t work with WebKit repository. You&apos;ll probably need to do this manually on some svn checkout.

&gt; &gt; This looks like a duplicate of TypingCommand::insertText(const String &amp;text, bool selectInsertedText) at http://trac.webkit.org/browser/trunk/Source/WebCore/editing/TypingCommand.cpp?rev=106646#L354
&gt; &gt; Why do we need to duplicate this code?
&gt; 
&gt; I am hesitant to put DictationCommand code into TypingCommand. How about move this function into CompoteEditCommand, so that it can be used by both DictationCommand and TypingCommand?

But so much of DictationCommand looks like TypingCommand. TypingCommand is a very weird editing command (it has a concept of being open, etc...). Does DictationCommand want a similar behavior? e.g. if a user types some word by a dictation, followed by another word by a dictation, should undo remove both of those words? Or should it revert one by one? If the answer to this question is yes, then I don&apos;t want to introduce another composite edit command that behaves like TypingCommand. If anything, we should be extracting a common super class aside from CompositeEditCommand that this peculiar behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593171</commentid>
    <comment_count>45</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-01 22:06:25 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #43)
&gt; &gt; (In reply to comment #42)
&gt; &gt; &gt; (From update of attachment 134925 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134925&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; I would be interested in hearing morrita&apos;s comments here since he has done a lot of refactoring in this area.
&gt; &gt; &gt; I want to make sure we&apos;re heading to the right direction with this new feature.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/editing/AlternativeTextController.h:119
&gt; &gt; &gt; &gt; +class AlternativeTextController {
&gt; &gt; &gt; 
&gt; &gt; &gt; Did you use svn mv for this rename? patch usually shows diff if you had used svn mv.
&gt; &gt; 
&gt; &gt; No, I use git-svn, and renamed it in Xcode. I think xcode uses &quot;git mv&quot; under the hood. 
&gt; 
&gt; The last time I checked, git mv doesn&apos;t work with WebKit repository. You&apos;ll probably need to do this manually on some svn checkout.

Ok, I will try to work from a svn checkout. 

&gt; 
&gt; &gt; &gt; This looks like a duplicate of TypingCommand::insertText(const String &amp;text, bool selectInsertedText) at http://trac.webkit.org/browser/trunk/Source/WebCore/editing/TypingCommand.cpp?rev=106646#L354
&gt; &gt; &gt; Why do we need to duplicate this code?
&gt; &gt; 
&gt; &gt; I am hesitant to put DictationCommand code into TypingCommand. How about move this function into CompoteEditCommand, so that it can be used by both DictationCommand and TypingCommand?
&gt; 
&gt; But so much of DictationCommand looks like TypingCommand. TypingCommand is a very weird editing command (it has a concept of being open, etc...). 

DictationCommand has much simpler logic than TypingCommand. It is really just some sort of &quot;insert text&quot; command that supports multi-line input and allows passing in markers attached to the input text. How about using multiple inheritance? We would create a CommonTextInserationBehavior class that contains that shared insertText() function. DictationCommand and TypingCommand would derive from both CompsiteEditCommand and CommonTextInserationBehavior. This way, we can share the code without moving it into CompositeEditCommand to muddy the relatively pure base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593174</commentid>
    <comment_count>46</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-01 22:08:29 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; DictationCommand has much simpler logic than TypingCommand. It is really just some sort of &quot;insert text&quot; command that supports multi-line input and allows passing in markers attached to the input text. How about using multiple inheritance? We would create a CommonTextInserationBehavior class that contains that shared insertText() function. DictationCommand and TypingCommand would derive from both CompsiteEditCommand and CommonTextInserationBehavior. This way, we can share the code without moving it into CompositeEditCommand to muddy the relatively pure base class.

Why can&apos;t this shared class inherit from CompositeEditCommand? That&apos;s the benefit of using multiple inheritance here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593182</commentid>
    <comment_count>47</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-04-01 22:45:15 -0700</bug_when>
    <thetext>Hi Jia,

This patch looks to large to review at once. How about to split this into

- Simple naming
   - from SpellingCorrectionController to AlternativeTextController
   - related names like Editor::m_spellingCorrector
   which would be trivial and easy to get reviewed. Some small style change
   like bool-to-enum conversion could be part of this.

- Adding Clients. I hope spelling correction and dictation related client API to have
   separate object, like AlternativeTextClient. tons of ifdefs are strong signal for new interface.
   Also, we might be able to apply Supplement&lt;T&gt; pattern for Editor.

- Extending TextEvent to add dictation related data and types.
   I thinks change on EventHandler and Editor related this dictation stuff
   could stay inside AlternativeTextController since it doesn&apos;t affect Editor/EventHandler state.
   Adding DictationCommand could be also done here.
   We can write tests which don&apos;t care markers.

- Adding marker state and rendering. test is easy and you can use window.internals object for this.
   It now inspect marker types on the node.

This splitting is just an idea. The point here is that splitting trivial change and
landing stuff in stage manner both help us a lot.
It would be appreciated if you consider approaches like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593183</commentid>
    <comment_count>48</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-01 22:49:41 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; Hi Jia,
&gt; 
&gt; This patch looks to large to review at once. How about to split this into
&gt; 

Thanks for the suggestion, I will work toward something like you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593185</commentid>
    <comment_count>49</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-01 22:52:15 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; DictationCommand has much simpler logic than TypingCommand. It is really just some sort of &quot;insert text&quot; command that supports multi-line input and allows passing in markers attached to the input text. How about using multiple inheritance? We would create a CommonTextInserationBehavior class that contains that shared insertText() function. DictationCommand and TypingCommand would derive from both CompsiteEditCommand and CommonTextInserationBehavior. This way, we can share the code without moving it into CompositeEditCommand to muddy the relatively pure base class.
&gt; 
&gt; Why can&apos;t this shared class inherit from CompositeEditCommand? That&apos;s the benefit of using multiple inheritance here?

We can certainly do that. My thought is that CompositeEditCommand is base class of many concrete command types, but this little function is relevant to only these two commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593186</commentid>
    <comment_count>50</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-01 22:59:54 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #46)
&gt; &gt; (In reply to comment #45)
&gt; &gt; &gt; DictationCommand has much simpler logic than TypingCommand. It is really just some sort of &quot;insert text&quot; command that supports multi-line input and allows passing in markers attached to the input text. How about using multiple inheritance? We would create a CommonTextInserationBehavior class that contains that shared insertText() function. DictationCommand and TypingCommand would derive from both CompsiteEditCommand and CommonTextInserationBehavior. This way, we can share the code without moving it into CompositeEditCommand to muddy the relatively pure base class.
&gt; &gt; 
&gt; &gt; Why can&apos;t this shared class inherit from CompositeEditCommand? That&apos;s the benefit of using multiple inheritance here?
&gt; 
&gt; We can certainly do that. My thought is that CompositeEditCommand is base class of many concrete command types, but this little function is relevant to only these two commands.

Sorry, mis-read your comment. My previous reply is directly relevant. 

I&apos;m often more inlined toward multiple inheritance for this sort of small shared functions, Because it&apos;s more flexible to add on shared code without significantly alter existing primary class hierarchy. But as I said, I can go either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593200</commentid>
    <comment_count>51</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-01 23:45:05 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; I&apos;m often more inlined toward multiple inheritance for this sort of small shared functions, Because it&apos;s more flexible to add on shared code without significantly alter existing primary class hierarchy. But as I said, I can go either way.

While multiple-inheritace is a handy way to modularize classes (we use it for ScriptElement class for example), I don&apos;t think we need that kind of modularity for these two classes so I&apos;d rather use a single inheritance to keep the inheritance hierarchy simple here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594193</commentid>
    <comment_count>52</comment_count>
      <attachid>134925</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-04-02 22:08:08 -0700</bug_when>
    <thetext>Comment on attachment 134925
Patch (v5)

Marking this obsolete since Jia is submitting the staged version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605727</commentid>
    <comment_count>53</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-19 11:21:44 -0700</bug_when>
    <thetext>Closing this bug, since I will address this with staged changes in other bugs.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134430</attachid>
            <date>2012-03-28 15:49:02 -0700</date>
            <delta_ts>2012-03-29 00:36:50 -0700</delta_ts>
            <desc>Patch (v1)</desc>
            <filename>bug-82503-20120328154901.patch</filename>
            <type>text/plain</type>
            <size>206280</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Q2ZjZlZDQ5MDE5OTIw
MWMwNjFiMzBhMzZmYmQ1MWJiZGNlZjYyOC4uYjFkM2ViNWY4YTRlN2UwNGQ0NmZlMWVjMWU0ZGMw
NzY3MzVlYzdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxMi0wMy0yOCAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJu
YXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIE9TWCBzcGVjaWZpYyBwYXRjaCB0aGF0
IGFsbG93cyBXZWJLaXQgdG8gdXRpbGl6ZSBBcHBLaXQgVUkgdG8gZGlzcGxheSBhbHRlcm5hdGl2
ZQorICAgICAgICBkaWN0YXRpb24gcmVzdWx0cyBmb3IgYSBnaXZlbiB0ZXh0LiBUbyBhY2hpZXZl
IHRoaXMsIHRoaXMgcmVsYXRpdmVseSBsYXJnZSBwYXRjaCBpbnRyb2R1Y2VkCisgICAgICAgIGZv
bGxvd2luZyBtYWpvciBjaGFuZ2VzOgorCisgICAgICAgIDEuIE1vZGlmaWVkIFRleHRFdmVudCB0
byBob2xkIGRpY3RhdGlvbiByZWxhdGVkIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIHRleHQu
CisgICAgICAgIDIuIEludHJvZHVjZWQgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyB0byBtYXJrIHRleHQgZm9yIHdoaWNoIGRpY3RhdGlvbgorICAgICAgICAgICAgc3lzdGVt
IHByb3ZpZGVkIGFsdGVybmF0aXZlcy4KKyAgICAgICAgMy4gSW50cm9kdWNlZCBEaWN0YXRpb25D
b21tYW5kIHdoaWNoIHdpbGwgYWRkIERpY3RhdGlvbkFsdGVybmF0aXZlIG1hcmtlcnMgdG8gdGV4
dAorICAgICAgICAgICBpbnNlcnRlZCBieSB0aGUgY29tbWFuZC4KKyAgICAgICAgNC4gQWRkZWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KCkgdG8gRWRpdG9yLgorICAgICAgICA1LiBJbnRyb2R1Y2VkIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciB3aGljaCBzZXJ2ZXMgc2ltaWxhciByb2xlIGFz
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuCisgICAgICAgIDYuIEFkZGVkIG5lY2Vzc2Fy
eSBpbnRlcmZhY2UgdG8gRWRpdG9yQ2xpZW50IHNpbWlsYXIgdG8gdGhvc2UgYWRkZWQgZm9yIGNv
cnJlY3Rpb24gcGFuZWwgVUkgb24gT1NYLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
RG9jdW1lbnRNYXJrZXIpOiBDcmVhdGUgbWFya2VyIHVzaW5nIHN1cHBsaWVkIERvY3VtZW50TWFy
a2VyRGV0YWlscyBvYmplY3QuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnRNYXJrZXIuaDogQWRkZWQgRGljdGF0aW9uQWx0ZXJuYXRpdmUgbWFya2VyIHR5cGUuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vyczo6QWxsTWFya2Vycyk6
CisgICAgICAgIChEb2N1bWVudE1hcmtlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oOgorICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKToKKyAgICAg
ICAgKiBkb20vVGV4dEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6Y3Jl
YXRlRm9yRGljdGF0aW9uKTogQ3JlYXRlIFRleHRFdmVudCBnZW5lcmF0ZWQgYnkgZGljdGF0aW9u
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OlRleHRF
dmVudCk6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAoVGV4dEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6aXNEaWN0YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEV2ZW50OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIGRvbS9U
ZXh0RXZlbnRJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlc3BvbmRUb0NhcmV0QXRFbmRPZldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJu
YXRpdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VUZXh0SW5SYW5nZSk6CisgICAgICAgICogZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IEFkZGVkLiBUaGlzIGNsYXNzIHNlcnZlcyB0
byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBJdCBjb250YWlucyBzb21lIGZ1bmN0aW9ucyBzaGFy
ZWQgYnkgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciBhbmQKKyAgICAgICAgICBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuIDIpIEluIHNpdHVhdGlvbiB3aGVyZSBFZGl0b3IgaW50
ZXJhY3Qgd2l0aAorICAgICAgICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgYW5kIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciBpbiBzYW1lIGZhc2hpb24sIAorICAgICAgICAg
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgc2VydmVzIGFzIGEgcHJveHkgZm9yIHRob3NlIHR3
byBjbGFzc2VzLCBzbyB0aGF0IEVkaXRvcgorICAgICAgICAgIG9ubHkgbmVlZCB0byBpbnRlcmFj
dHMgd2l0aCBvbmUgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRU
ZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSk6IFByb3ZpZGUgYW4gaW50ZXJmYWNlCisgICAgICAgICAg
IHRvIGFkZCBtYXJrZXJzIGFsb25nIHdpdGggdGV4dC4gSXQncyBjdXJyZW50bHkgdXNlZCBieSBE
aWN0YXRpb25Db21tYW5kLCBidXQgY291bGQKKyAgICAgICAgICAgYmUgdXNlZnVsIGZvciBvdGhl
ciBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNEaWN0YXRpb25Db21tYW5kKToK
KyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpEaWN0YXRpb25NYXJr
ZXJEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c3RvcFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
ZGlzbWlzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJl
bW92ZUFsdGVybmF0aXZlc0Zvck1hcmtlcik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDogQWRkZWQuIFNpbWlsYXIgdG8gU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlciwKKyAgICAgICAgICB0aGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBsb2dpYyBy
ZWdhcmRpbmcgd2hlbiB0byBzaG93IG9yIGRpc21pc3MgYWx0ZXJuYXRpdmUgZGljdGF0aW9uCisg
ICAgICAgICAgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEaWN0YXRpb25N
YXJrZXJEZXRhaWxzKTogQSBzdWJjbGFzcyBvZiBEb2N1bWVudE1hcmtlckRldGFpbHMgdXNlZCBi
eSBEaWN0YXRpb25BbHRlcm5hdGl2ZQorICAgICAgICAgIHR5cGUgbWFya2VyLgorICAgICAgICAo
V2ViQ29yZTo6RGljdGF0aW9uTWFya2VyRGV0YWlsczo6b3JpZ2luYWxUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6OmRpY3RhdGlvbkNvbnRleHQpOgorICAg
ICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJSW5mbzo6RGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAoRGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24uaDogQWRkZWQuIEl0IGNvbnRhaW5zIHRoZSByYW5nZSBpbiB3aGljaCB0aGUKKyAgICAg
ICAgICBpbnB1dCB0ZXh0IGhhcyBhbHRlcm5hdGl2ZSBkaWN0YXRpb24gcmVzdWx0LCBhbmQgYW4g
aW50ZWdlciB0aGF0IGlkZW50aWZ5IGRpY3RhdGlvbiBjb250ZXh0LgorICAgICAgICAoRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6RGljdGF0aW9uQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyk6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6Y29sbGVjdERpY3RhdGlvbk1hcmtl
cnNJblJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuaDogIFNpbWls
YXIgdG8gVHlwaW5nQ29tbWFuZCwgYnV0IGFsbG93cyB1cyB0bworICAgICAgICAgIHBhc3MgYWRk
aXRpb25hbCBkaWN0YXRpb24gcmVsYXRlZCBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSB0ZXh0
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEaWN0YXRpb25Db21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmlzRGljdGF0aW9uQ29tbWFuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q29tcG9uZW50
c09uQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRF
ZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRE
aWN0YXRlZFRleHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFZGl0b3Ip
OgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6IEFsbG93IHBh
c3NpbmcgbWFya2VycyAKKyAgICAgICAgICBhbG9uZyB3aXRoIHRleHQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpjcmVhdGUpOgorICAgICAgICAoSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6CisgICAg
ICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRUZXh0Q29tbWFuZDo6SW5zZXJ0VGV4dENvbW1hbmQpOiBBbGxvdyBwYXNzaW5nIG1hcmtl
cnMgCisgICAgICAgICAgYWxvbmcgd2l0aCB0ZXh0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKEluc2VydFRleHRD
b21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hv
dyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBs
eUNvcnJlY3Rpb25QYW5lbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQpOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAgICAoU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzaG91bGRTdGFydFRpbWVyRm9yKToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKiBlZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQXBwZW5kTmV3TGlu
ZUZlZWRUb1NlbGVjdGlvbik6IE1vdmVkIHRoaXMgZnVuY3Rpb24gZnJvbSBUeXBpbmdDb21tYW5k
CisgICAgICAgICAgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBEaWN0YXRpb25Db21tYW5kLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6Cisg
ICAgICAgIChFbXB0eUVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRv
ckNsaWVudDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXMpOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcnMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRleHRNYXJrZXJMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoSW5saW5lVGV4dEJveCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFy
a2VyVHlwZXNGcm9tKToKKwogMjAxMi0wMy0yMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFRpbGVDYWNoZSBuZWVkcyB0byBrbm93IGlmIGl0cyBjb250
YWluaW5nIHBhZ2UgaXMgaW4gYSB3aW5kb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggODViODVlNzI4MGM5MTBjMDlk
MzMyNzcxYjY4OGYyN2U0MmMxNjU4Yi4uYTM5ZTFiN2Y5ZGY5ZjA5MGQzYzcwOTRiMzFmZjRlY2E1
MDc1MTAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMy0yOCAgSmlhIFB1ICA8
anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJuYXRpdmUg
c3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZWUgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGZvciBkZXRhaWxz
LgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTIt
MDMtMjAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgd3Rm
L1BsYXRmb3JtLmggZnJvbSBKYXZhU2NyaXB0Q29yZSB0byBTb3VyY2UvV1RGL3d0ZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCmluZGV4IDE0Zjc1NmJlNmI5MjlmZjFlMzM2OGNhNDBkNmFjMmU4YzNiMjMxYjUuLjdm
ZWI2ZDM1MjFhMGM0MDY2MTUyYWY3ZmFlYWFhZjE4NWM3MTNjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1NiBAQAorMjAxMi0wMy0yOCAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KKwor
ICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJuYXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRl
ZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
ZWUgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGZvciBkZXRhaWxzLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmg6IEFkZGVkLiBUaGlz
IGNsYXNzIHNlcnZlcyB0d28gcHVycG9zZXM6CisgICAgICAgICAgMSkgUmV0YWluIHRoZSBkaWN0
YXRpb24gYWx0ZXJuYXRpdmUgb2JqZWN0cyBwcm92aWRlZCBieSBBcHBLaXQsIGFuZCBwcm92aWRl
IGFuCisgICAgICAgICAgICAgaW50ZWdlciB0byBvYmplY3QgbWFwcGluZyBmb3IgV2ViQ29yZS4K
KyAgICAgICAgICAyKSBDb250cm9sIGRpY3RhdGlvbiBhbHRlcm5hdGl2ZSBVSS4KKyAgICAgICAg
KERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAgICAgIChEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAg
ICAgIChEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcik6CisgICAgICAgIChEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjpEaWN0YXRpb25D
b250ZXh0Q29udHJvbGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFkZEFsdGVybmF0aXZl
cyk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNv
bnRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KToKKyAgICAg
ICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRy
b2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQpOgorICAgICAgICAo
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxl
cjo6Y2xlYXIpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjphZGRB
bHRlcm5hdGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpj
bGVhcik6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnNob3dBbHRl
cm5hdGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpoYW5k
bGVBY2NlcHRlZEFsdGVybmF0aXZlKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlcyk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlcyk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg6IEFkZGVkLiBBIHNpbXBsZSBzdHJ1Y3Qg
dGhhdCBoZWxwcyB0bworICAgICAgICAgIHBhc3MgYXJvdW5kIGEgY291cGxlIG9mIHBpZWNlcyBv
ZiBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOiBBZGRlZC4K
KyAgICAgICAgKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0
b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChjb2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0
aXZlcyk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGluc2VydFRleHQ6XSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9pbnNlcnREaWN0YXRlZFRl
eHQ6YWx0ZXJuYXRpdmVzOnRyaWdnZXJpbmdFdmVudDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBf
c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUk6V2ViQ29yZTo6Zm9yRGljdGF0aW9uQ29udGV4dDpd
KToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUldKToK
KyAgICAgICAgKC1bV2ViVmlldyBfcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOl0pOgorICAg
ICAgICAoLVtXZWJWaWV3IF9oYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlOl0pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZp
ZXdEYXRhLm1tOgorICAgICAgICAoLVtXZWJWaWV3UHJpdmF0ZSBpbml0XSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTAz
LTIwICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
Q29udmVydCBoYXNTcGVsbGluZ01hcmtlciB0byB1c2UgSW50ZXJuYWxzIGludGVyZmFjZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBjYTNmOGZkOTFiY2EwMGVjYzI1NGI0YjI1ZmM1Y2NmNTAyNGI2NDUxLi5jMmZk
YTRiYzZmZGY5OGU5OTg3MTZkYWZhZGFmYzU5YjEzYjdlNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsOTEgQEAKKzIwMTItMDMtMjggIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAg
UHJvdmlkZSBVSSB0byBzaG93IGFsdGVybmF0aXZlIHN0cmluZ3Mgb2YgZGljdGF0ZWQgdGV4dC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTAzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBT
ZWUgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGZvciBkZXRhaWxzLgorCisgICAgICAgICogU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29k
ZSk6CisgICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OlBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OnBhZ2VDbG9zZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKGNvbGxl
Y3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKC1bV0tWaWV3IGluc2VydFRl
eHQ6cmVwbGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tWaWV3IGhhbmRsZUFjY2VwdGVk
RGljdGF0aW9uQWx0ZXJuYXRpdmU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAg
ICAoUGFnZUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZUFj
Y2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJQYWdlUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDogQWRkZWQuIFRoaXMgY2xh
c3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBSZXRhaW4gdGhlIGRpY3RhdGlv
biBhbHRlcm5hdGl2ZSBvYmplY3RzIHByb3ZpZGVkIGJ5IEFwcEtpdCwgYW5kIHByb3ZpZGUgYW4K
KyAgICAgICAgICAgICBpbnRlZ2VyIHRvIG9iamVjdCBtYXBwaW5nIGZvciBXZWJDb3JlLgorICAg
ICAgICAgIDIpIENvbnRyb2wgZGljdGF0aW9uIGFsdGVybmF0aXZlIFVJLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRp
b25Db250ZXh0Q29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFkZEFsdGVybmF0aXZl
cyk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGlj
dGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3Rh
dGlvbkNvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpE
aWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmFkZEFsdGVybmF0aXZlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAo
V2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnNob3dBbHRlcm5hdGl2ZXMp
OgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmhhbmRs
ZUFjY2VwdGVkQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoV2ViS2l0OjpE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaDogQWRkZWQuIEEg
c2ltcGxlIHN0cnVjdCB0aGF0IGhlbHBzIHRvCisgICAgICAgICAgcGFzcyBhcm91bmQgYSBjb3Vw
bGUgb2YgcGllY2VzIG9mIGluZm9ybWF0aW9uLgorICAgICAgICAoVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5tbTogQWRkZWQuCisgICAgICAgIChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRUZXh0
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRp
dG9yQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZl
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlQWNjZXB0ZWREaWN0YXRp
b25BbHRlcm5hdGl2ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKFdlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0RGljdGF0ZWRUZXh0KToKKyAg
ICAgICAgKFdlYktpdCk6CisKIDIwMTItMDMtMjEgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHlu
LnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFdlYkdyYXBoaWNzTGF5ZXI6IFVu
dGllIHRoZSBsYXllciB1cGRhdGVzIGFuZCB0aWxlIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CmluZGV4IGMxNzgxYTI3YzZlODc1NWQ3NzdjODlkODk2MDdiMWExNjlhMTViN2UuLmM2MmQ0MWRk
MDczNzI0MjlmZDc4YjAwZTcxNTc3ZDgxMjE5ODE3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBA
IC03MDUsNiArNzA1LDkgQEAgX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlvbklzTWljcm9zb2Z0TXlE
YXlFdgogX19aTjdXZWJDb3JlMjdjb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHNFdgogX19aTjdX
ZWJDb3JlMjdjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmVFdgogX19aTjdXZWJDb3JlMjdzdGFy
dE9ic2VydmluZ0Nvb2tpZUNoYW5nZXNFdgorX19aTjdXZWJDb3JlMjhEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uQzFFUktTMF8KK19fWk43V2ViQ29yZTI4RGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbkMxRXl5eQorX19aTjdXZWJDb3JlMjhEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
QzFFdgogX19aTjdXZWJDb3JlMjhjb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplRXYKIF9fWk43
V2ViQ29yZTI4Y29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yc0V2CiBfX1pON1dlYkNvcmUyOGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlua3NFdgpAQCAtODYzLDYgKzg2Niw3IEBAIF9fWk43V2Vi
Q29yZTZFZGl0b3IxN2NhbmNlbENvbXBvc2l0aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxN2lu
c2VydE9yZGVyZWRMaXN0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxOGNvbmZpcm1Db21wb3NpdGlv
bkVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IxOGNvbmZpcm1Db21wb3NpdGlv
bkV2CitfX1pON1dlYkNvcmU2RWRpdG9yMThpbnNlcnREaWN0YXRlZFRleHRFUktOM1dURjZTdHJp
bmdFUktOUzFfNlZlY3RvcklOU18yOERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25FTG0wRUVF
UE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWNvdW50TWF0Y2hlc0ZvclRleHRFUktO
M1dURjZTdHJpbmdFUE5TXzVSYW5nZUVqamIKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWRlbGV0ZVdp
dGhEaXJlY3Rpb25FTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlF
YmIKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWluc2VydFVub3JkZXJlZExpc3RFdgpAQCAtODg1LDYg
Kzg4OSw3IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IzMGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERl
bGV0ZUViCiBfX1pON1dlYkNvcmU2RWRpdG9yMzBwYXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhU
TUxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjMyZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rp
b25FdgogX19aTjdXZWJDb3JlNkVkaXRvcjMzaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRl
cmVkRXYKK19fWk43V2ViQ29yZTZFZGl0b3IzNGhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJu
YXRpdmVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMzRzZXRNYXJrZWRUZXh0
TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRWIKIF9fWk43V2ViQ29yZTZFZGl0b3IzNWluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzNXNldElnbm9y
ZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlRWIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwOTdjZDAyMzhmYTIyZWVjYTdiZjZk
YmVhODM5YmQ5ZDM0YzU3OTRhLi41YjlhMjU3YWJiZDA5YThiM2IxZmE4NmE4NTk3ZmYwZDI2YmU5
MjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01NzA2LDEzICs1NzA2LDIxIEBACiAJCUNERUE3Qzg1MTI3NjIzMDQwMEI4NDZE
RCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENERUE3QzgzMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2Ny
ZWVuLmNwcCAqLzsgfTsKIAkJQ0RGNjVDQzgxNDVCMUU3NTAwQzRDN0FBIC8qIE1lZGlhQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Qy
N0Y2RTQxNDU3Njc4NzAwNzgyMDdEIC8qIE1lZGlhQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNERjY1Q0NBMTQ1QjQ0ODgwMEM0
QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjY1Q0M5MTQ1QjQzQTcwMEM0QzdBQSAvKiBNZWRp
YUNvbnRyb2xsZXJJbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDRTAwQzdFRjE1MUQxMzdGMDA2N0FFMDEgLyogRGljdGF0aW9uQ29t
bWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RTAwQzdFRDE1MUQxMzdGMDA2N0FFMDEgLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi87IH07CisJ
CUNFMDBDN0YwMTUxRDEzN0YwMDY3QUUwMSAvKiBEaWN0YXRpb25Db21tYW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAwQzdFRTE1MUQxMzdGMDA2
N0FFMDEgLyogRGljdGF0aW9uQ29tbWFuZC5oICovOyB9OworCQlDRTAwQzdGNDE1MUQ0MjI5MDA2
N0FFMDEgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMDBDN0YyMTUxRDQyMjgwMDY3QUUw
MSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwICovOyB9OworCQlDRTAwQzdG
NTE1MUQ0MjI5MDA2N0FFMDEgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAwQzdGMzE1MUQ0
MjI5MDA2N0FFMDEgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggKi87IH07CiAJ
CUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FE
RDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8q
IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8q
IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUNFM0YyRTIzMTUyMEM1NDEwMEE2Mzg2QiAvKiBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENFM0YyRTIxMTUyMEM1NDEwMEE2Mzg2QiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCAqLzsgfTsKKwkJQ0UzRjJFMjQxNTIwQzU0MTAwQTYzODZCIC8qIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENFM0YyRTIyMTUyMEM1NDEwMEE2Mzg2QiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgg
Ki87IH07CiAJCUNFNTRGRDM4MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U1NEZE
MzcxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0VBMzk0OUMxMUQ0NUNEQTAw
MzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUEzOTQ5QTExRDQ1Q0RBMDAzMDk0Q0YgLyogU3Rh
dGljSGFzaFNldE5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQ0VBMzk0OUQxMUQ0NUNEQTAwMzA5NENG
IC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hT
ZXROb2RlTGlzdC5oICovOyB9OwogCQlDRUNDRkMzQjE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2Rl
RXNjYXBlU2VxdWVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2Vz
LmggKi87IH07CisJCUNFRDJCNzhBMTUxQTc5OEEwMDNBQkNFRiAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENFRDJCNzg4MTUxQTc5OEEwMDNBQkNFRiAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uLmNwcCAqLzsgfTsKKwkJQ0VEMkI3OEIxNTFBNzk4QTAwM0FCQ0VGIC8qIERpY3RhdGlv
bkFsdGVybmF0aXZlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFRDJCNzg5MTUxQTc5OEEwMDNBQkNFRiAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0VGNDE4Q0UxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOEND
MTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi87IH07CiAJCUNFRjQx
OENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJD
IC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRDAwMEVCQTIxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFjaGlu
ZS5jcHAgKi87IH07CkBAIC0xMjc3NiwxNCArMTI3ODQsMjIgQEAKIAkJQ0RFQTdDODMxMjc2MjMw
NDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyRnVsbFNjcmVlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNERjY1Q0M5MTQ1QjQzQTcwMEM0QzdBQSAvKiBNZWRpYUNvbnRyb2xsZXJJbnRl
cmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFDb250cm9sbGVy
SW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjY1Q0NDMTQ1QjZB
RkUwMEM0QzdBQSAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0UwMEM3RUQxNTFEMTM3RjAwNjdBRTAxIC8qIERp
Y3RhdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGljdGF0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFMDBD
N0VFMTUxRDEzN0YwMDY3QUUwMSAvKiBEaWN0YXRpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0UwMEM3RjIxNTFENDIyODAwNjdBRTAxIC8qIERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDRTAwQzdGMzE1MUQ0MjI5MDA2N0FFMDEgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTAy
RjBDMzExRTgzQUREMDBDNjY4NEEgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q29udHJvbGxlckJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRTA1N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50TWFya2VyQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTNGMkUyMTE1MjBDNTQxMDBB
NjM4NkIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0UzRjJFMjIxNTIwQzU0MTAwQTYzODZCIC8qIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U291cmNlUHJvdmlkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U1Q0IxQjMxNEVEQUI2RjAwQkIyNzk1IC8qIEV2
ZW50U2VuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50U2VuZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFQTM5NDlBMTFENDVDREEwMDMwOTRD
RiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2Rl
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9k
ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VDQ0ZDM0ExNDE5NzNENTAw
MkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0VEMkI3ODgxNTFBNzk4QTAwM0FCQ0VGIC8qIERpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNFRDJCNzg5MTUxQTc5OEEwMDNBQkNFRiAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4
QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAv
KiBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzY0Miw3ICsxMzY1OCw3IEBACiAJCQkJMUFFODJFQzkwQ0FBRTE3NzAw
MjIzN0FFIC8qIHN0b3JhZ2UgKi8sCiAJCQkJQjIyMjc3Q0EwRDAwQkYxRTAwNzFCNzgyIC8qIHN2
ZyAqLywKIAkJCQk0MTdEQTRDRDEzNzM0MjA0MDA3QzU3RkIgLyogdGVzdGluZyAqLywKLQkJCQlG
RDMxNUZBMjEyQjAyNUIxMDBDMUEzNTkgLyogd2ViYXVkaW8gKi8sCisJCQkJRkQzMTVGQTIxMkIw
MjVCMTAwQzFBMzU5IC8qIE1vZHVsZXMvd2ViYXVkaW8gKi8sCiAJCQkJMkU0MzQ2MzEwRjU0NkE2
ODAwQjBGMUJBIC8qIHdvcmtlcnMgKi8sCiAJCQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8q
IHhtbCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2Vz
ICovLApAQCAtMTY1MzUsNiArMTY1NTEsOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQlFRDUwMURDOTBCMjQ5RjM5MDBBRTE4RDkgLyogbWFjICovLAorCQkJCUNF
M0YyRTIxMTUyMEM1NDEwMEE2Mzg2QiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAq
LywKKwkJCQlDRTNGMkUyMjE1MjBDNTQxMDBBNjM4NkIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oICovLAogCQkJCTkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmROb2RlQ29t
bWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVD
b21tYW5kLmggKi8sCiAJCQkJOUI0MTcwNjMxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5jcHAgKi8sCkBAIC0xNjU1NSw2ICsxNjU3MywxMiBAQAogCQkJCTkzMzA5
RDkwMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmggKi8sCiAJ
CQkJOTMzMDlEOTEwOTlFNjQ5MTAwNTZFNTgxIC8qIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
ICovLAogCQkJCTkzMzA5RDkyMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVTZWxlY3Rpb25Db21t
YW5kLmggKi8sCisJCQkJQ0UwMEM3RjIxNTFENDIyODAwNjdBRTAxIC8qIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQ0UwMEM3RjMxNTFENDIyOTAwNjdBRTAxIC8q
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovLAorCQkJCUNFRDJCNzg4MTUxQTc5
OEEwMDNBQkNFRiAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCAqLywKKwkJCQlD
RUQyQjc4OTE1MUE3OThBMDAzQUJDRUYgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5o
ICovLAorCQkJCUNFMDBDN0VEMTUxRDEzN0YwMDY3QUUwMSAvKiBEaWN0YXRpb25Db21tYW5kLmNw
cCAqLywKKwkJCQlDRTAwQzdFRTE1MUQxMzdGMDA2N0FFMDEgLyogRGljdGF0aW9uQ29tbWFuZC5o
ICovLAogCQkJCTkzMzA5RDkzMDk5RTY0OTEwMDU2RTU4MSAvKiBFZGl0QWN0aW9uLmggKi8sCiAJ
CQkJOTMzMDlEOTQwOTlFNjQ5MTAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmNwcCAqLywKIAkJCQk5
MzMwOUQ5NTA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdENvbW1hbmQuaCAqLywKQEAgLTIxMTY5LDcg
KzIxMTkzLDcgQEAKIAkJCXBhdGggPSBvcGVuZ2w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OwotCQlGRDMxNUZBMjEyQjAyNUIxMDBDMUEzNTkgLyogd2ViYXVkaW8gKi8gPSB7CisJ
CUZEMzE1RkEyMTJCMDI1QjEwMEMxQTM1OSAvKiBNb2R1bGVzL3dlYmF1ZGlvICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlGRDU2ODZDNzEzQUMxODAyMDBC
NjlDNjggLyogQXN5bmNBdWRpb0RlY29kZXIuY3BwICovLApAQCAtMjE0NjksNiArMjE0OTMsNyBA
QAogCQkJCTI5QTgxMjJCMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTI5QTgxMjMyMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUE4MTI0MTBGQkI5QzFEMDA1MTAy
OTMgLyogQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRUQy
Qjc4QjE1MUE3OThBMDAzQUJDRUYgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyM0YwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxp
dHlUYWJsZUhlYWRlckNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzEwRkJC
OUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjVEMzFERkIxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI0NjExLDYgKzI0NjM2LDkgQEAKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBG
NTQyRUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTkz
RjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRjg5QTQyMTUxOEZERUEwMEU1NDdCNSAvKiBUaWxlZEJhY2tpbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUNFMDBDN0YwMTUxRDEzN0YwMDY3QUUwMSAvKiBEaWN0YXRpb25Db21tYW5kLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDRTAwQzdGNTE1MUQ0MjI5MDA2N0FFMDEgLyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRTNGMkUyNDE1MjBD
NTQxMDBBNjM4NkIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0yNzU5Niw2ICsyNzYyNCwxMCBAQAogCQkJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAv
KiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UzMkI5RTE1MTdDMjI3MDBGNTQy
RUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFOTNG
NDcxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDRUQyQjc4QTE1MUE3OThBMDAzQUJDRUYgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRTAwQzdFRjE1MUQxMzdGMDA2N0FFMDEgLyog
RGljdGF0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRTAwQzdGNDE1MUQ0MjI5
MDA2N0FFMDEgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUNFM0YyRTIzMTUyMEM1NDEwMEE2Mzg2QiAvKiBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjc2OTgsOSArMjc3MzAsMTEgQEAKIAkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2Ug
PSAxQ0RENDVFNDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwog
CQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CiAJCQkJREVB
RF9DT0RFX1NUUklQUElORyA9ICIkKERFQURfQ09ERV9TVFJJUFBJTkdfZGVidWcpIjsKIAkJCQlE
RUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU19kZWJ1ZykiOwogCQkJCUdDQ19PUFRJTUla
QVRJT05fTEVWRUwgPSAiJChHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMX2RlYnVnKSI7CisJCQkJR0ND
X1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IE5POwogCQkJCVNUUklQX0lOU1RBTExFRF9QUk9E
VUNUID0gIiQoU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1RfZGVidWcpIjsKIAkJCX07CiAJCQluYW1l
ID0gRGVidWc7CkBAIC0yNzcwOSw2ICsyNzc0Myw4IEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmln
dXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUNERDQ1RTQwQkE5Qzg0
NjAwRjkwMTQ3IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUdDQ19UUkVBVF9XQVJOSU5HU19B
U19FUlJPUlMgPSBOTzsKIAkJCQlTVFJJUF9JTlNUQUxMRURfUFJPRFVDVCA9IE5POwogCQkJfTsK
IAkJCW5hbWUgPSBSZWxlYXNlOwpAQCAtMjc3MTcsNiArMjc3NTMsOCBAQAogCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDREQ0
NUU2MEJBOUM4NDYwMEY5MDE0NyAvKiBCYXNlLnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJR0NDX1RSRUFUX1dBUk5JTkdT
X0FTX0VSUk9SUyA9IE5POwogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5jcHAKaW5kZXggYjRmOTk5NGRiNGVmNmFlY2ZkOGM1
Njc5MzBiODE3Nzg4ZWViZDYxYS4uNTNkNDNlNGVhYjU2MDZhNmNjNjVjNzhiM2Y3ZmVhM2IzMzQx
Y2YwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuY3BwCkBAIC0xMjMsNiArMTIz
LDE0IEBAIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjCiB7CiB9CiAKK0RvY3VtZW50TWFya2VyOjpE
b2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIFBhc3NSZWZQdHI8RG9jdW1lbnRNYXJrZXJEZXRhaWxzPiBkZXRhaWxz
KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQor
ICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICwgbV9kZXRhaWxzKGRldGFpbHMpCit7
Cit9CisKIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQgZGVsdGEpCiB7CiAg
ICAgbV9zdGFydE9mZnNldCArPSBkZWx0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgK
aW5kZXggNDFlZDg0ODM2NDBkY2U1Zjk5MWZjNzM2YWMzM2JkN2U1NmU5NjI0NS4uYzFlNzM4ZDQz
Njk1MWQ2ZTcxNDQ4YTAwZjAwOTk1NmNkZTRiNzdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyLmgKQEAgLTYzLDcgKzYzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gcmFuZ2UgdGhh
dCBiZWFycyB0aGlzIG1hcmtlci4gSW4gc29tZSBwbGF0Zm9ybXMsIGlmIHRoZSB1c2VyIGxhdGVy
IGluc2VydHMgdGhlIHNhbWUgb3JpZ2luYWwKICAgICAgICAgLy8gd29yZCBhZ2FpbiBhdCB0aGlz
IHBvc2l0aW9uLCBpdCB3aWxsIG5vdCBiZSBhdXRvY29ycmVjdGVkIGFnYWluLiBUaGUgZGVzY3Jp
cHRpb24gb2YgdGhpcwogICAgICAgICAvLyBtYXJrZXIgaXMgdGhlIG9yaWdpbmFsIHdvcmQgYmVm
b3JlIGF1dG9jb3JyZWN0aW9uIHdhcyBhcHBsaWVkLgotICAgICAgICBEZWxldGVkQXV0b2NvcnJl
Y3Rpb24gPSAxIDw8IDgKKyAgICAgICAgRGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gMSA8PCA4LAor
ICAgICAgICAvLyBUaGlzIG1hcmtlciBpbmRpY2F0ZXMgdGhhdCB0aGUgcmFuZ2Ugb2YgdGV4dCBz
cGFubmVkIGJ5IHRoZSBtYXJrZXIgaXMgZW50ZXJlZCBieSB2b2ljZSBkaWN0YXRpb24sCisgICAg
ICAgIC8vIGFuZCBpdCBoYXMgYWx0ZXJuYXRpdmUgdGV4dC4KKyAgICAgICAgRGljdGF0aW9uQWx0
ZXJuYXRpdmVzID0gMSA8PCA5CiAgICAgfTsKIAogICAgIGNsYXNzIE1hcmtlclR5cGVzIHsKQEAg
LTg1LDcgKzg4LDcgQEAgcHVibGljOgogICAgIGNsYXNzIEFsbE1hcmtlcnMgOiBwdWJsaWMgTWFy
a2VyVHlwZXMgewogICAgIHB1YmxpYzoKICAgICAgICAgQWxsTWFya2VycygpCi0gICAgICAgICAg
ICA6IE1hcmtlclR5cGVzKFNwZWxsaW5nIHwgR3JhbW1hciB8IFRleHRNYXRjaCB8IFJlcGxhY2Vt
ZW50IHwgQ29ycmVjdGlvbkluZGljYXRvciB8IFJlamVjdGVkQ29ycmVjdGlvbiB8IEF1dG9jb3Jy
ZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRGVsZXRlZEF1dG9jb3JyZWN0aW9uKQor
ICAgICAgICAgICAgOiBNYXJrZXJUeXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2gg
fCBSZXBsYWNlbWVudCB8IENvcnJlY3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24g
fCBBdXRvY29ycmVjdGVkIHwgU3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29y
cmVjdGlvbiB8IERpY3RhdGlvbkFsdGVybmF0aXZlcykKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgfTsKQEAgLTk0LDYgKzk3LDcgQEAgcHVibGljOgogICAgIERvY3VtZW50TWFya2VyKE1hcmtl
clR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogICAgIERv
Y3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIERvY3VtZW50TWFya2Vy
KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0aXZlTWF0
Y2gpOworICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIFBhc3NSZWZQdHI8RG9jdW1lbnRNYXJrZXJEZXRhaWxzPik7
CiAKICAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBlMDY3
MmQwZDNkMWZkOGRiN2FlYTRiZDkxZDM2ZjRjNjdlMmFkYWNkLi40YmMyMTBjZTUwMjY5ZTg5YWE2
N2JhNWUwOWE2NmMyYzc3NTY4NDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
dGFjaCgpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOworICAgIHZvaWQgYWRkTWFya2VyKE5v
ZGUqLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOwogICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2Vy
KFJhbmdlKiwgYm9vbCBhY3RpdmVNYXRjaCk7CiAKICAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUq
IHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2Rl
LCBpbnQgZGVsdGEpOwpAQCAtODAsOCArODEsNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKLQog
ICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxpc3Q7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTWFya2VyTGlzdCo+IE1hcmtlck1hcDsK
ICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAppbmRleCAxZGZmYjAxNGVlZDVmNmIzMTA0NTM3OTcz
MGQ4NjM1ZjkxNmYxZGY3Li5hMWQyNTdmYjExZjUwZTU4ZjZiNzJlYWQ3NDJlZjdlMmEwNzYzNGUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcApAQCAtNTcsNiArNTcsMTEgQEAgUGFzc1JlZlB0
cjxUZXh0RXZlbnQ+IFRleHRFdmVudDo6Y3JlYXRlRm9yRHJvcChQYXNzUmVmUHRyPEFic3RyYWN0
Vmlldz4gdmlldywgY28KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCh2aWV3LCBk
YXRhLCBUZXh0RXZlbnRJbnB1dERyb3ApKTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IFRl
eHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3
LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEsIGRpY3RhdGlvbkFsdGVybmF0aXZlcykpOworfQorCiBU
ZXh0RXZlbnQ6OlRleHRFdmVudCgpCiAgICAgOiBtX2lucHV0VHlwZShUZXh0RXZlbnRJbnB1dEtl
eWJvYXJkKQogICAgICwgbV9zaG91bGRTbWFydFJlcGxhY2UoZmFsc2UpCkBAIC04NSw2ICs5MCwx
NiBAQCBUZXh0RXZlbnQ6OlRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywg
Y29uc3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUAogewogfQogCitUZXh0RXZlbnQ6OlRleHRFdmVu
dChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25z
dCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0
aXZlcykKKyAgICA6IFVJRXZlbnQoZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50LCB0cnVlLCB0
cnVlLCB2aWV3LCAwKQorICAgICwgbV9pbnB1dFR5cGUoVGV4dEV2ZW50SW5wdXREaWN0YXRpb24p
CisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fc2hvdWxkU21hcnRSZXBsYWNlKGZhbHNlKQor
ICAgICwgbV9zaG91bGRNYXRjaFN0eWxlKGZhbHNlKQorICAgICwgbV9kaWN0YXRpb25BbHRlcm5h
dGl2ZXMoZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworfQorCiBUZXh0RXZlbnQ6On5UZXh0RXZl
bnQoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCmluZGV4IDliMDg3N2FkNGZlY2IyMWFkZmQ3
NDhjYTMxZDNjYzg3NmNmODJhMDkuLjFiY2RkNDUwODNjYTg2MTMzZjMxM2IzN2EwOWU1NGYyYWQw
Mzg1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYg
VGV4dEV2ZW50X2gKICNkZWZpbmUgVGV4dEV2ZW50X2gKIAorI2luY2x1ZGUgIkRpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUZXh0RXZlbnRJbnB1dFR5cGUuaCIKICNp
bmNsdWRlICJVSUV2ZW50LmgiCiAKQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvclBsYWluVGV4
dFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEs
IGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dEV2ZW50PiBjcmVhdGVGb3JGcmFnbWVudFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2
aWV3LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRhdGEsIGJvb2wgc2hvdWxkU21hcnRS
ZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckRyb3AoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcs
IGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVu
dD4gY3JlYXRlRm9yRGljdGF0aW9uKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgU3Ry
aW5nJiBkYXRhLCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CiAKICAgICAgICAgdmlydHVhbCB+VGV4dEV2ZW50KCk7CiAg
ICAgCkBAIC01NiwxMCArNTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IGlzQmFja1RhYigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0
QmFja1RhYjsgfQogICAgICAgICBib29sIGlzUGFzdGUoKSBjb25zdCB7IHJldHVybiBtX2lucHV0
VHlwZSA9PSBUZXh0RXZlbnRJbnB1dFBhc3RlOyB9CiAgICAgICAgIGJvb2wgaXNEcm9wKCkgY29u
c3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXREcm9wOyB9CisgICAgICAg
IGJvb2wgaXNEaWN0YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBUZXh0RXZl
bnRJbnB1dERpY3RhdGlvbjsgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRTbWFydFJlcGxhY2U7IH0KICAgICAgICAgYm9vbCBzaG91
bGRNYXRjaFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYXRjaFN0eWxlOyB9CiAgICAg
ICAgIERvY3VtZW50RnJhZ21lbnQqIHBhc3RpbmdGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFzdGluZ0ZyYWdtZW50LmdldCgpOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3QgeyByZXR1
cm4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZXM7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFRl
eHRFdmVudCgpOwpAQCAtNjcsNiArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwg
VGV4dEV2ZW50SW5wdXRUeXBlID0gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CiAgICAgICAgIFRl
eHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwKICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxk
U21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOworICAgICAgICBUZXh0RXZlbnQo
UGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3Rv
cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsK
IAogICAgICAgICBUZXh0RXZlbnRJbnB1dFR5cGUgbV9pbnB1dFR5cGU7CiAgICAgICAgIFN0cmlu
ZyBtX2RhdGE7CkBAIC03NCw2ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fcGFzdGluZ0ZyYWdtZW50OwogICAgICAgICBib29s
IG1fc2hvdWxkU21hcnRSZXBsYWNlOwogICAgICAgICBib29sIG1fc2hvdWxkTWF0Y2hTdHlsZTsK
KyAgICAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaAppbmRleCA5OGJmMzQzMmQ4YjQ2OTM3ODJlYWJm
Y2MzODBhYWZlZWRhMDBhMmVlLi44YmUyMzNjNGJmZjBiYTVmNWYyZjk2ZDUwMzBkMTg4YjVjNTZi
YTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50SW5wdXRUeXBlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudElucHV0VHlwZS5oCkBAIC0zNSw2ICsz
NSw3IEBAIGVudW0gVGV4dEV2ZW50SW5wdXRUeXBlIHsKICAgICBUZXh0RXZlbnRJbnB1dEJhY2tU
YWIsCiAgICAgVGV4dEV2ZW50SW5wdXRQYXN0ZSwKICAgICBUZXh0RXZlbnRJbnB1dERyb3AsCisg
ICAgVGV4dEV2ZW50SW5wdXREaWN0YXRpb24sCiAgICAgVGV4dEV2ZW50SW5wdXRPdGhlciwKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwY2RhM2M1NmY5MjAyYzNjMjhiMTY5OWVmYzVlZjAwYmEz
ZDBkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAibWFya3VwLmgi
CisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUq
IGZyYW1lLCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKiBzcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIqIGRpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcikKKzogbV9mcmFtZShmcmFtZSkKKywgbV9zcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKHNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpCissIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyKGRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcikKK3sK
K30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICByZXNwb25kVG9DYXJldEF0
RW5kT2ZXb3JkKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2FyZXRBdEVuZE9mV29yZChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25z
IG9wdGlvbnMpCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9u
LmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1
cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICAvLyBDcmVhdGluZyBhIFZpc2libGUgcG9zaXRp
b24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJlIGlzIG5vCisgICAgLy8gZ3VhcmFudGVlIHRo
YXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxpZC4KKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRp
b24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25P
ZldvcmQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKHBvc2l0aW9uLmFuY2hv
clR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsK
KyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5tYXJrZXJzRm9yKG5vZGUpOworICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1h
cmtlcnMuc2l6ZSgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291
bnQ7ICsraSkgeworICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vy
c1tpXTsKKyAgICAgICAgaWYgKCFtYXJrZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzID0gZmFsc2U7CisgICAg
ICAgIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci0+cmVzcG9uZFRvTWFya2VyQXRFbmRP
ZldvcmQoKm1hcmtlciwgcG9zaXRpb24sICZzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpOworICAg
ICAgICAKKyAgICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb24sIGhhbmRsaW5nIGEgbWFya2VyIHdv
dWxkIHByaGliaXQgdGhlIHByb3BlciBoYW5kbGluZyBvZiBvdGhlciBtYXJrZXJzLgorICAgICAg
ICAvLyBTbyBpZiBzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMgaXMgc2V0IHRvIHRydWUsIHdlIGJy
ZWFrIHRoZSBsb29wLgorICAgICAgICBpZiAoc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBpZiAoIShvcHRpb25zICYgRnJhbWVT
ZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCkpIHsKKyAgICAgICAgICAgIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLT5yZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCgqbWFya2Vy
LCBwb3NpdGlvbiwgJnNob3VsZElnbm9yZU90aGVyTWFya2Vycyk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3NB
bHRlcm5hdGl2ZVRleHRVSSgpCit7CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAg
ICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+ZGlzbWlzcygpOworfQorCit2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmVzKGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gJm9sZFNlbGVjdGlvbikKK3sKKyAgICBtX3NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rp
b24pOworICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5zdG9wUGVuZGluZ0Fs
dGVybmF0aXZlKCk7Cit9CisgICAgCitGbG9hdFJlY3QgcmFuZ2VCb3VuZGluZ0JveEluUm9vdFZp
ZXcoY29uc3QgU2Nyb2xsVmlldyogdmlldywgY29uc3QgUmFuZ2UqIHJhbmdlKQoreworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHRleHRRdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7CisgICAgRmxv
YXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGJvdW5kaW5n
UmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CisgICAgcmV0dXJuIHZpZXct
PmNvbnRlbnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOworfQorCitQYXNzUmVm
UHRyPFJhbmdlPiByZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBSYW5n
ZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSwgYm9vbCBmb3JTcGVsbGluZ0NvcnJlY3Rpb24pCit7Cisg
ICAgaWYgKCFyYW5nZSB8fCAhZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IHJhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
c2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQ
YXJhZ3JhcGgocmFuZ2UtPmVuZFBvc2l0aW9uKCkpKTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxh
Y2UgdGhlIHdvcmQgYXQgJ3JhbmdlJywgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJh
bmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRo
ZSB2YWx1ZSBvZiAncmFuZ2UnIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAgIC8vIFNvIGJlZm9y
ZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiAncmFuZ2UnCisgICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0
aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIHJlcGxhY2VtZW50U3RhcnRP
ZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRv
IG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQorICAg
IC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgJ3JhbmdlJy4KKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50U3RhcnRP
ZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5z
dGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVS
ZXBsYWNlZCA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgcmVwbGFjZW1lbnRTdGFydE9m
ZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJl
cGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQu
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgc3RhcnQgbG9jYXRpb24gb2Yg
dGhlIHJhbmdlIHRvIGJlIHJlcGxhY2VkLCBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVy
IHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgorICAgIGludCByZXBsYWNlbWVudFN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJlcGxhY2VtZW50U3Rh
cnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJh
bmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhl
IG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxh
Y2VkID0gcmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgIGlmIChmb3JTcGVsbGluZ0NvcnJlY3Rp
b24pCisgICAgICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVh
dGUocmFuZ2VUb0JlUmVwbGFjZWQsIG5ld1RleHQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChy
YW5nZSwgbmV3VGV4dCk7CisgICAgICAgIGlmIChmcmFnbWVudCkgeworICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24ocmFuZ2UsIEZyYW1lU2VsZWN0aW9uOjpEaWN0
YXRpb25UcmlnZ2VyZWQgfCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNlbGVj
dGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSk7CisgICAgICAgICAgICBhcHBseUNvbW1hbmQoUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKSwgZnJhZ21lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nLCBFZGl0QWN0aW9uUGFzdGUpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5n
ZXQoKSwgcmVwbGFjZW1lbnRTdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbmV3VGV4dC5sZW5ndGgo
KSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgorICAg
IFN0cmluZyB0ZXh0QWZ0ZXJSZXBsYWNlbWVudCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdl
LmdldCgpKTsKKyAgICBpZiAodGV4dEFmdGVyUmVwbGFjZW1lbnQgIT0gbmV3VGV4dCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlcGxhY2VtZW50UmFuZ2U7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTc2MzUwMjczNWE2MTA0NjgwMWJmYTQwODU3NzgxOGYyOTE5YWYyMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcl9oCisjZGVmaW5lIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRl
ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOworY2xhc3MgUmFuZ2U7CitjbGFzcyBGcmFt
ZTsKK2NsYXNzIFNjcm9sbFZpZXc7CitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OworCitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lKiwg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciosIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlciopOworICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRp
b25zKTsKKyAgICB2b2lkIGRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSgpOworICAgIHZvaWQgc3Rv
cFBlbmRpbmdBbHRlcm5hdGl2ZXMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
KTsKK3ByaXZhdGU6CisgICAgdm9pZCByZXNwb25kVG9DYXJldEF0RW5kT2ZXb3JkKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlv
bk9wdGlvbnMpOworICAgIAorICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIqIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjsKKyAgICBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIqIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOworfTsKKworRmxvYXRSZWN0IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KGNvbnN0IFNj
cm9sbFZpZXcqLCBjb25zdCBSYW5nZSopOworCisvLyBVcG9uIHN1Y2Nlc3MsIHJldHVybiB2YWx1
ZSBjb250YWlucyB0aGUgcmFuZ2Ugb2YgbmV3VGV4dC4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIG51
bGwuCitQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiBu
ZXdUZXh0LCBSYW5nZSosIEZyYW1lKiwgYm9vbCBmb3JTcGVsbGluZ0NvcnJlY3Rpb24pOworfQor
CisjZW5kaWYgLy8gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDgzMGVhY2Y2ZmVlZDZm
ZTRlYjNkMDY0M2VkMDMxZDlkNzQyNDkwZGUuLjI0MjQ2NzcwNmYzMDVhNzA4YTJjNGZmNzlhNTQw
ZjM0Njc4N2I1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCkBAIC00NjEsNiArNDYxLDEyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Omluc2VydFRleHRJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9m
CiAgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIHRleHQpKTsKIH0KIAordm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6aW5zZXJ0VGV4dFdpdGhNYXJrZXJzSW50b05vZGUoUGFzc1JlZlB0cjxUZXh0PiBu
b2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERv
Y3VtZW50TWFya2VyPiYgbWFya2VycykKK3sKKyAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQorICAg
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpj
cmVhdGUobm9kZSwgb2Zmc2V0LCB0ZXh0LCBtYXJrZXJzKSk7Cit9CisKIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgY291
bnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaApp
bmRleCBmN2QxNzQ5NDM5NDBiNWU5YzU3ZjI1M2EwNDZmMmY4NDUxOGZjOWMwLi5iMDc5Nzc5YmU1
ZTBkODcyZDljZDgwODk4YWY4NTE4ZGNmZGI3NzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnRNYXJrZXI7CiBjbGFzcyBFZGl0aW5nU3R5bGU7
CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CkBAIC04Miw2ICs4Myw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NyZWF0ZUxpbmtDb21tYW5kKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc0RpY3RhdGlvbkNvbW1hbmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sKTsK
QEAgLTExMSw2ICsxMTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBpbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IoYm9vbCB1c2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCA9IGZhbHNlKTsKICAgICB2
b2lkIGluc2VydExpbmVCcmVhaygpOwogICAgIHZvaWQgaW5zZXJ0VGV4dEludG9Ob2RlKFBhc3NS
ZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICB2
b2lkIGluc2VydFRleHRXaXRoTWFya2Vyc0ludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI+JiBtYXJrZXJzKTsKICAgICB2b2lkIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoUGFzc1JlZlB0
cjxFbGVtZW50PiwgUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCByZWJhbGFuY2VXaGl0
ZXNwYWNlKCk7CiAgICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODZmNDRkZDVmNTliNGNmNTUxZTYxNWMw
ZGMxZTIxOTdlZDVmMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworCitEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzKGNvbnN0
IFN0cmluZyYgb3JpZ2luYWxUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorICAgIDog
bV9kaWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpCisgICAgLCBtX29yaWdpbmFsVGV4
dChvcmlnaW5hbFRleHQpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGljdGF0aW9uTWFya2VyRGV0YWls
cz4gRGljdGF0aW9uTWFya2VyRGV0YWlsczo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxU
ZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGljdGF0aW9uTWFya2VyRGV0YWlscyhvcmlnaW5hbFRleHQsIGRpY3RhdGlvbkNvbnRleHQp
KTsKK30KKyAgICAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKworRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoRnJh
bWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fdGltZXIodGhpcywgJkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6dGltZXJGaXJlZCkKKyAgICAsIG1faXNVSUFj
dGl2ZShmYWxzZSkKK3sKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIs
IGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmQsIGJvb2wqIHNob3VsZElnbm9yZU90aGVyTWFya2Vy
cykKK3sKKyAgICBpZiAobWFya2VyLnR5cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50
PihtYXJrZXIuZW5kT2Zmc2V0KCkpICE9IGVuZE9mV29yZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZC5jb250YWlu
ZXJOb2RlKCk7CisgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJr
ZXIuZW5kT2Zmc2V0KCkpOworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3Jk
UmFuZ2UuZ2V0KCkpOworCisgICAgY29uc3QgRGljdGF0aW9uTWFya2VyRGV0YWlscyogbWFya2Vy
RGV0YWlscyA9IHN0YXRpY19jYXN0PGNvbnN0IERpY3RhdGlvbk1hcmtlckRldGFpbHMqPihtYXJr
ZXIuZGV0YWlscygpKTsKKyAgICBpZiAoIW1hcmtlckRldGFpbHMpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGV0YWlscy0+b3JpZ2luYWxUZXh0KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2FsdGVybmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRl
eHQgPSB3b3JkUmFuZ2U7CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5mby5kaWN0YXRpb25Db250ZXh0
ID0gbWFya2VyRGV0YWlscy0+ZGljdGF0aW9uQ29udGV4dCgpOworICAgIGNvbnN0IGRvdWJsZSBk
aWN0YXRpb25BbHRlcm5hdGl2ZVVJRGVsYXkgPSAwLjM7CisgICAgbV90aW1lci5zdGFydE9uZVNo
b3QoZGljdGF0aW9uQWx0ZXJuYXRpdmVVSURlbGF5KTsKKyAgICAqc2hvdWxkSWdub3JlT3RoZXJN
YXJrZXJzID0gdHJ1ZTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OnN0b3BUaW1lcigpCit7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV9hbHRlcm5hdGl2ZVVJ
SW5mby5yYW5nZU9mRGljdGF0ZWRUZXh0LmNsZWFyKCk7CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5m
by5kaWN0YXRpb25Db250ZXh0ID0gMDsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI6OmRpc21pc3MoKQoreworICAgIGlmICghbV9pc1VJQWN0aXZlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9pc1VJQWN0aXZlID0gZmFsc2U7CisgICAgaWYgKGNsaWVudCgpKQorICAg
ICAgICBjbGllbnQoKS0+ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKTsKK30KKwordm9p
ZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUo
KQoreworICAgIHN0b3BUaW1lcigpOworICAgIGRpc21pc3MoKTsKK30KKwordm9pZCBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnRpbWVyRmlyZWQoVGltZXI8RGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyPiopCit7CisgICAgaWYgKCFtX2FsdGVybmF0aXZlVUlJbmZvLnJhbmdl
T2ZEaWN0YXRlZFRleHQgfHwgIW1fYWx0ZXJuYXRpdmVVSUluZm8uZGljdGF0aW9uQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRp
bmdCb3hJblJvb3RWaWV3KG1fZnJhbWUtPnZpZXcoKSwgbV9hbHRlcm5hdGl2ZVVJSW5mby5yYW5n
ZU9mRGljdGF0ZWRUZXh0LmdldCgpKTsKKyAgICBtX2lzVUlBY3RpdmUgPSB0cnVlOworICAgIGlm
ICghYm91bmRpbmdCb3guaXNFbXB0eSgpICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdCb3gsIG1fYWx0ZXJuYXRpdmVVSUlu
Zm8uZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK0VkaXRvckNsaWVudCogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkg
PyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKwordm9pZCBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZSkKK3sKKyAgICBSYW5nZSogcmFuZ2VUb1JlcGxhY2UgPSBtX2Fs
dGVybmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRleHQuZ2V0KCk7CisgICAgaWYgKCFyYW5n
ZVRvUmVwbGFjZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJhbmdlVG9SZXBsYWNlLT5vd25l
ckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNVSUFjdGl2ZSA9IGZhbHNl
OworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHJlcGxhY2VUZXh0SW5SYW5n
ZShhbHRlcm5hdGl2ZSwgcmFuZ2VUb1JlcGxhY2UsIG1fZnJhbWUsIGZhbHNlKTsKKyAgICBpZiAo
cmVwbGFjZW1lbnRSYW5nZSkgeworICAgICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1h
cmtlckNvbnRyb2xsZXIgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCk7CisgICAgICAgIG1hcmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihy
ZXBsYWNlbWVudFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CisgICAgfQorICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8ucmFuZ2VPZkRpY3RhdGVkVGV4
dC5jbGVhcigpOworICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8uZGljdGF0aW9uQ29udGV4dCA9IDA7
Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5h
dGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlcikKK3sKKyAgICBpZiAo
IWNsaWVudCgpIHx8ICFtYXJrZXIgfHwgbWFya2VyLT50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvbkFsdGVybmF0aXZlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRGlj
dGF0aW9uTWFya2VyRGV0YWlscyogbWFya2VyRGV0YWlscyA9IHN0YXRpY19jYXN0PGNvbnN0IERp
Y3RhdGlvbk1hcmtlckRldGFpbHMqPihtYXJrZXItPmRldGFpbHMoKSk7CisgICAgY2xpZW50KCkt
PnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhtYXJrZXJEZXRhaWxzLT5kaWN0YXRpb25Db250
ZXh0KCkpOworfQorI2VuZGlmIC8vIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzdjMGNkYjJjMjgwYmY1MWQ4NWFhNjk0YTg2ZDc4Mzg3
ZDMxYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCisjZGVmaW5lIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQorI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIDsKKyNl
bHNlCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgZnVuY3Rpb25Cb2R5Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFZGl0b3JDbGllbnQ7CitjbGFz
cyBGcmFtZTsKKworY2xhc3MgRGljdGF0aW9uTWFya2VyRGV0YWlscyA6IHB1YmxpYyBEb2N1bWVu
dE1hcmtlckRldGFpbHMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERpY3RhdGlv
bk1hcmtlckRldGFpbHM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgdWludDY0
X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQoKSBj
b25zdCB7IHJldHVybiBtX29yaWdpbmFsVGV4dDsgfQorICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RpY3RhdGlvbkNvbnRleHQ7IH0KK3ByaXZhdGU6Cisg
ICAgRGljdGF0aW9uTWFya2VyRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgdWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgdWludDY0X3QgbV9kaWN0YXRpb25Db250ZXh0
OworICAgIFN0cmluZyBtX29yaWdpbmFsVGV4dDsKK307CisKK2NsYXNzIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcihGcmFtZSopIFVOTEVTU19F
TkFCTEVEKHsgfSkKKworICAgIHZvaWQgcmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3Qg
RG9jdW1lbnRNYXJrZXImLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZXb3JkLCBib29sKiBzaG91bGRJ
Z25vcmVPdGhlck1hcmtlcnMpIFVOTEVTU19FTkFCTEVEKHtVTlVTRURfUEFSQU0oZW5kT2ZXb3Jk
KTsgVU5VU0VEX1BBUkFNKHNob3VsZElnbm9yZU90aGVyTWFya2Vycyk7fSkKKworICAgIHZvaWQg
ZGlzbWlzcygpIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHN0b3BQZW5kaW5nQWx0ZXJu
YXRpdmUoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZEFsdGVy
bmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKGFsdGVybmF0aXZlKTsgfSkKKyAgICB2b2lkIHJlbW92ZUFsdGVybmF0aXZlc0Zvck1h
cmtlcihjb25zdCBEb2N1bWVudE1hcmtlciopIFVOTEVTU19FTkFCTEVEKHsgfSkKKyNpZiBVU0Uo
RElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK3ByaXZhdGU6CisgICAgc3RydWN0IERpY3RhdGlvbkFs
dGVybmF0aXZlVUlJbmZvIHsgCisgICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlVUlJbmZvKCkg
OiBkaWN0YXRpb25Db250ZXh0KDApIHsgfQorICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZE
aWN0YXRlZFRleHQ7CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQ7CisgICAgfTsK
KworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVy
PERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4qKTsKKyAgICB2b2lkIHN0b3BUaW1lcigp
OworCisgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgVGltZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyPiBtX3RpbWVyOworICAgIERpY3RhdGlvbkFsdGVybmF0aXZlVUlJbmZvIG1fYWx0
ZXJuYXRpdmVVSUluZm87CisgICAgYm9vbCBtX2lzVUlBY3RpdmU7CisjZW5kaWYKK307CisKKyN1
bmRlZiBVTkxFU1NfRU5BQkxFRAorCit9CisKKyNlbmRpZiAvLyBEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFiZDA1ZTUwNmM0NmM3MzYz
YzQyZmJiYjk3MjYwOGJhMzgyOTcwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKHVpbnQ2NF90IHN0
YXJ0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IGNvbnRleHQpCis6IHJhbmdlU3RhcnQoc3Rh
cnQpCissIHJhbmdlTGVuZ3RoKGxlbmd0aCkKKywgZGljdGF0aW9uQ29udGV4dChjb250ZXh0KQor
eyB9CisgICAgCitEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uKCkKKzogcmFuZ2VTdGFydCgwKQorLCByYW5nZUxlbmd0aCgwKQorLCBkaWN0
YXRpb25Db250ZXh0KDApCit7IH0KKworRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbjo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbihjb25zdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uJiBhbm90aGVyKQorOiByYW5nZVN0YXJ0KGFub3RoZXIucmFuZ2VTdGFydCkKKywgcmFuZ2VM
ZW5ndGgoYW5vdGhlci5yYW5nZUxlbmd0aCkKKywgZGljdGF0aW9uQ29udGV4dChhbm90aGVyLmRp
Y3RhdGlvbkNvbnRleHQpCit7IH0KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWM2NDVjOGIy
MjE1NThkYTdkOWIzY2NiZWZiZDc2ZjhlMjAwM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uX2gK
KyNkZWZpbmUgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKKy8vIFNv
bWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3RpbmcgYWx0ZXJuYXRpdmUgZGljdGF0
aW9uIHRleHQuCisjZGVmaW5lIFdURl9VU0VfRElDVEFUSU9OX0FMVEVSTkFUSVZFUyAxCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xJT04pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uIHsKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKHVpbnQ2NF90IHN0
YXJ0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IGNvbnRleHQpOworICAgIERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24oKTsKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKGNv
bnN0IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mIGFub3RoZXIpOworICAgIHVpbnQ2NF90
IHJhbmdlU3RhcnQ7CisgICAgdWludDY0X3QgcmFuZ2VMZW5ndGg7CisgICAgdWludDY0X3QgZGlj
dGF0aW9uQ29udGV4dDsKK307CisKK30KKworI2VuZGlmIC8vIERpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDA2ZWFmOTZhNGIzYzA5MmViMGFhZWY2NDMyMjRlNTIzNTJhOWJkZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5j
cHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGljdGF0aW9uQ29tbWFuZC5oIgorCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuaCIKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgi
CisjaW5jbHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5k
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGljdGF0aW9uQ29tbWFuZDo6RGljdGF0aW9u
Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBhbHRlcm5hdGl2ZXMpCisgICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKKyAgICAsIG1fdGV4dFRvSW5zZXJ0KHRleHQp
CisgICAgLCBtX2FsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpCit7Cit9CisKK3ZvaWQgRGljdGF0
aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGFsdGVybmF0
aXZlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKQorewor
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBBU1NFUlQo
ZnJhbWUpOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBib29sIGNoYW5nZVNlbGVjdGlvbiA9IGN1
cnJlbnRTZWxlY3Rpb24gIT0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uOworCisgICAgU3RyaW5nIG5l
d1RleHQgPSB0ZXh0OworICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNl
cnRpb24uc3RhcnQoKS5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CisgICAgICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LiBUaGUgZXZlbnQgaGFuZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vz
c2FyeS4KKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVm
UHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dDo6Y3JlYXRlKHRleHQpOworICAgICAgICAgICAgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVt
ZW50KCktPmRpc3BhdGNoRXZlbnQoZXZ0LCBlYyk7CisgICAgICAgICAgICBuZXdUZXh0ID0gZXZ0
LT50ZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8RGljdGF0aW9uQ29tbWFu
ZD4gY21kOworICAgIGlmIChuZXdUZXh0ID09IHRleHQpCisgICAgICAgIGNtZCA9IERpY3RhdGlv
bkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgbmV3VGV4dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICBl
bHNlCisgICAgICAgIC8vIElmIHRoZSB0ZXh0IHdhcyBtb2RpZmllZCBiZWZvcmUgaW5zZXJ0aW9u
LCB0aGUgbG9jYXRpb24gb2YgZGljdGF0aW9uIGFsdGVybmF0aXZlcworICAgICAgICAvLyB3aWxs
IG5vdCBiZSB2YWxpZCBhbnltb3JlLiBXZSB3aWxsIGp1c3QgZHJvcCB0aGUgYWx0ZXJuYXRpdmVz
LgorICAgICAgICBjbWQgPSBEaWN0YXRpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIG5ld1Rl
eHQsIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPigpKTsKKworICAgIGlmIChj
aGFuZ2VTZWxlY3Rpb24pIHsKKyAgICAgICAgY21kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxl
Y3Rpb25Gb3JJbnNlcnRpb24pOworICAgICAgICBjbWQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxl
Y3Rpb25Gb3JJbnNlcnRpb24pOworICAgIH0KKyAgICBhcHBseUNvbW1hbmQoY21kKTsKKyAgICBp
ZiAoY2hhbmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGNtZC0+c2V0RW5kaW5nU2VsZWN0aW9uKGN1
cnJlbnRTZWxlY3Rpb24pOworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlv
bihjdXJyZW50U2VsZWN0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgbmV3bGlu
ZTsKKyAgICB3aGlsZSAoKG5ld2xpbmUgPSBtX3RleHRUb0luc2VydC5maW5kKCdcbicsIG9mZnNl
dCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIGlmIChuZXdsaW5lICE9IG9mZnNldCkKKyAgICAg
ICAgICAgIGluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMob2Zmc2V0LCBuZXdsaW5lIC0gb2Zm
c2V0KTsKKyAgICAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7CisgICAgICAgIG9mZnNl
dCA9IG5ld2xpbmUgKyAxOworICAgIH0KKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgaW5zZXJ0
VGV4dFJ1bldpdGhvdXROZXdsaW5lcygwLCBtX3RleHRUb0luc2VydC5sZW5ndGgoKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fdGV4dFRvSW5zZXJ0Lmxlbmd0aCgp
OworICAgICAgICBpZiAobGVuZ3RoICE9IG9mZnNldCkKKyAgICAgICAgICAgIGluc2VydFRleHRS
dW5XaXRob3V0TmV3bGluZXMob2Zmc2V0LCBsZW5ndGggLSBvZmZzZXQpOworICAgIH0KK30KKwor
dm9pZCBEaWN0YXRpb25Db21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKHNpemVf
dCBsaW5lU3RhcnQsIHNpemVfdCBsaW5lTGVuZ3RoKQoreworICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcj4gZG9jdW1lbnRNYXJrZXJzOworICAgIGNvbGxlY3REaWN0YXRpb25NYXJrZXJzSW5SYW5n
ZShsaW5lU3RhcnQsIGxpbmVMZW5ndGgsIGRvY3VtZW50TWFya2Vycyk7CisgICAgUmVmUHRyPElu
c2VydFRleHRDb21tYW5kPiBjb21tYW5kID0gSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBtX3RleHRUb0luc2VydC5zdWJzdHJpbmcobGluZVN0YXJ0LCBsaW5lTGVuZ3RoKSwg
ZG9jdW1lbnRNYXJrZXJzKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kLCBl
bmRpbmdTZWxlY3Rpb24oKSk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKCkKK3sKKyAgICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQoKSkpOworfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6OmNvbGxlY3REaWN0YXRp
b25NYXJrZXJzSW5SYW5nZShzaXplX3QgcmFuZ2VTdGFydCwgc2l6ZV90IHJhbmdlTGVuZ3RoLCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlc1tpXTsK
KyAgICAgICAgaWYgKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgPj0gcmFuZ2VTdGFydCAmJiAoYWx0
ZXJuYXRpdmUucmFuZ2VTdGFydCArIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoKSA8PSByYW5nZVN0
YXJ0ICsgcmFuZ2VMZW5ndGgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hcmtlclN0YXJ0T2Zm
c2V0ID0gYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCAtIHJhbmdlU3RhcnQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBtYXJrZXJFbmRPZmZzZXQgPSBtYXJrZXJTdGFydE9mZnNldCArIGFsdGVybmF0aXZl
LnJhbmdlTGVuZ3RoOworICAgICAgICAgICAgbWFya2Vycy5hcHBlbmQoRG9jdW1lbnRNYXJrZXIo
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyU3RhcnRPZmZzZXQs
IG1hcmtlckVuZE9mZnNldCwgRGljdGF0aW9uTWFya2VyRGV0YWlsczo6Y3JlYXRlKG1fdGV4dFRv
SW5zZXJ0LnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5n
ZUxlbmd0aCksIGFsdGVybmF0aXZlLmRpY3RhdGlvbkNvbnRleHQpKSk7CisgICAgICAgICAgICBt
YXJrZXJzLmFwcGVuZChEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbiwgbWFya2VyU3RhcnRPZmZzZXQsIG1hcmtlckVuZE9mZnNldCkpOworICAgICAg
ICB9CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rp
Y3RhdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBjMGM4ZWM5NTBjZDJmODYwNTkzYjUzNDI5YzQ3YzAxMTUzZDc0NGYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1h
bmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaWN0YXRpb25Db21tYW5k
X2gKKyNkZWZpbmUgRGljdGF0aW9uQ29tbWFuZF9oCisKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0
Q29tbWFuZC5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKKworY2xhc3MgRGlj
dGF0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBhbHRlcm5hdGl2ZXMsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaWN0YXRpb25Db21tYW5k
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEaWN0YXRpb25Db21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgYWx0
ZXJuYXRpdmVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWN0YXRpb25D
b21tYW5kKGRvY3VtZW50LCB0ZXh0LCBhbHRlcm5hdGl2ZXMpKTsKKyAgICB9CisKKyAgICBEaWN0
YXRpb25Db21tYW5kKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGFsdGVybmF0aXZlcyk7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKKworICAgIHZvaWQgaW5zZXJ0VGV4dFJ1bldpdGhvdXRO
ZXdsaW5lcyhzaXplX3QgbGluZVN0YXJ0LCBzaXplX3QgbGluZUxlbmd0aCk7CisgICAgdm9pZCBp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKKyAgICB2b2lkIGNvbGxlY3REaWN0YXRpb25NYXJr
ZXJzSW5SYW5nZShzaXplX3QgcmFuZ2VTdGFydCwgc2l6ZV90IHJhbmdlTGVuZ3RoLCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKTsKKworICAgIFN0cmluZyBtX3RleHRUb0luc2VydDsK
KyAgICBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4gbV9hbHRlcm5hdGl2ZXM7
Cit9OworfQorCisjZW5kaWYgLy8gRGljdGF0aW9uQ29tbWFuZF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKaW5kZXggNzJlMjFmYTI0YTU4NTU5MTRmY2I4ZTQ4M2M5MmY0ZTM3NmFiZWFiOS4u
MTJjNmZiYzcwNjMxM2QwMTJkYWY5MzdhMjNkMDRkOTNlZDAyM2ZlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkVkaXRvci5oIgogCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgpAQCAtNDEsNiAr
NDIsOCBAQAogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRl
QnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIK
KyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJE
aWN0YXRpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRpbmdUZXh0Lmgi
CkBAIC00NzYsMTMgKzQ3OSwxMyBAQCBib29sIEVkaXRvcjo6c2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZShIVE1MRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICByZXR1cm4gY2xpZW50KCkgJiYg
Y2xpZW50KCktPnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoZWxlbWVudCk7CiB9CiAKLXZvaWQg
RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbikKK3ZvaWQgRWRpdG9yOjpub3RpZnlDb21wb25lbnRzT25DaGFuZ2VkU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAoY2xpZW50KCkpCiAg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUpOwogICAg
IHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLSAgICBt
X3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlv
bik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9u
KQpAQCAtNzg0LDggKzc4NywxMCBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1Jl
ZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY21kKQogCiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoY21kLmdldCgpKTsKIAorICAgIAogICAgIC8vIERv
bid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2UuICBX
ZSBkbyB0aG9zZSB0aGluZ3MgZWxzZXdoZXJlIGlmIG5lY2Vzc2FyeS4KLSAgICBjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBmYWxzZSwgZmFsc2UpOworICAgIEZyYW1l
U2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBjbWQtPmlzRGljdGF0aW9u
Q29tbWFuZCgpID8gRnJhbWVTZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCA6IDA7CisgICAg
Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CiAKICAg
ICBpZiAoIWNtZC0+cHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKICAgICAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmNsZWFyVHlwaW5nU3R5bGUoKTsKQEAgLTgxMSw3ICs4MTYsNyBAQCB2b2lkIEVk
aXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+
IGNtZCkKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY21kLT5zdGFy
dGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY21kLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50
KCkpOwogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+c3RhcnRp
bmdTZWxlY3Rpb24oKSk7Ci0gICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVj
dGlvbiwgdHJ1ZSwgdHJ1ZSk7CisgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1Nl
bGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nIHwgRnJhbWVTZWxlY3Rpb246OkNs
ZWFyVHlwaW5nU3R5bGUpOwogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb1VuYXBw
bGllZEVkaXRpbmcoY21kLmdldCgpKTsKICAgICAKICAgICBtX2xhc3RFZGl0Q29tbWFuZCA9IDA7
CkBAIC04MjcsNyArODMyLDcgQEAgdm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNv
bnRlbnRDaGFuZ2VkRXZlbnRzKGNtZC0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNt
ZC0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKICAgICAKICAgICBWaXNpYmxlU2VsZWN0
aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlvbigpKTsKLSAgICBjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCB0cnVlLCB0cnVlKTsKKyAgICBjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VU
eXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSk7CiAgICAgCiAgICAgbV9s
YXN0RWRpdENvbW1hbmQgPSAwOwogICAgIGlmIChjbGllbnQoKSkKQEAgLTg0NSw2ICs4NTAsOCBA
QCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRy
KG5ldyBLaWxsUmluZykpCiAgICAgLCBtX3NwZWxsQ2hlY2tlcihhZG9wdFB0cihuZXcgU3BlbGxD
aGVja2VyKGZyYW1lKSkpCiAgICAgLCBtX3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0UHRyKG5ldyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKGZyYW1lKSkpCisgICAgLCBtX2RpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcihhZG9wdFB0cihuZXcgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyKGZyYW1lKSkpCisgICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoYWRvcHRQ
dHIobmV3IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoZnJhbWUsIG1fc3BlbGxpbmdDb3JyZWN0
b3IuZ2V0KCksIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmdldCgpKSkpCiAgICAg
LCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1
bHRQYXJhZ3JhcGhTZXBhcmF0b3IoRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXYpCiB7CkBA
IC04NzIsNiArODc5LDExIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29t
cG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBtX2ZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21w
b3NpdGlvbik7CiB9CiAKK2Jvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRp
Y3RhdGlvbkFsdGVybmF0aXZlcywgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkKK3sKKyAgICByZXR1
cm4gbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQodGV4
dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCB0cmlnZ2VyaW5nRXZlbnQpOworfQorCiBib29sIEVk
aXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4
dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIFRleHRFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQog
ewogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKQEAgLTkwNiwxMiArOTE4LDE2IEBAIGJvb2wgRWRp
dG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBib29sIHNlbGVjdEluCiAgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0g
c2VsZWN0aW9uU3RhcnQtPmRvY3VtZW50KCk7CiAKICAgICAgICAgICAgIC8vIEluc2VydCB0aGUg
dGV4dAotICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKLSAg
ICAgICAgICAgIGlmIChzZWxlY3RJbnNlcnRlZFRleHQpCi0gICAgICAgICAgICAgICAgb3B0aW9u
cyB8PSBUeXBpbmdDb21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQ7Ci0gICAgICAgICAgICBpZiAo
YXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkKQotICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gVHlw
aW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3I7Ci0gICAgICAgICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBzZWxlY3Rpb24s
IG9wdGlvbnMsIHRyaWdnZXJpbmdFdmVudCAmJiB0cmlnZ2VyaW5nRXZlbnQtPmlzQ29tcG9zaXRp
b24oKSA/IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkNvbmZpcm0gOiBUeXBpbmdDb21t
YW5kOjpUZXh0Q29tcG9zaXRpb25Ob25lKTsKKyAgICAgICAgICAgIGlmICh0cmlnZ2VyaW5nRXZl
bnQtPmlzRGljdGF0aW9uKCkpCisgICAgICAgICAgICAgICAgRGljdGF0aW9uQ29tbWFuZDo6aW5z
ZXJ0VGV4dChkb2N1bWVudC5nZXQoKSwgdGV4dCwgdHJpZ2dlcmluZ0V2ZW50LT5kaWN0YXRpb25B
bHRlcm5hdGl2ZXMoKSwgc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIFR5cGluZ0NvbW1hbmQ6Ok9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgICAgICAgICAg
ICAgaWYgKHNlbGVjdEluc2VydGVkVGV4dCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8
PSBUeXBpbmdDb21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQ7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8
PSBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsKKyAgICAgICAg
ICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBz
ZWxlY3Rpb24sIG9wdGlvbnMsIHRyaWdnZXJpbmdFdmVudCAmJiB0cmlnZ2VyaW5nRXZlbnQtPmlz
Q29tcG9zaXRpb24oKSA/IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkNvbmZpcm0gOiBU
eXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25Ob25lKTsKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgLy8gUmV2ZWFsIHRoZSBjdXJyZW50IHNlbGVjdGlvbgogICAgICAgICAgICAgaWYg
KEZyYW1lKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQpAQCAtMjIyNSw3ICsyMjQx
LDEyIEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQsIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2YWxlbnQoKSwgZW5k
T2ZMYXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIGRvY3VtZW50LT5tYXJrZXJzKCkt
PnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcg
fCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICAvLyBXaGVuIHdlIHJlbW92ZSBkaWN0YXRp
b24gbWFya2Vycywgd2UgYWxzbyBuZWVkIHRvIHRlbGwgY2xpZW50IHRvIHJlbW92ZSBhbnkgZGlj
dGF0aW9uIGFsdGVybmF0aXZlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIAorICAgIFZl
Y3RvcjxEb2N1bWVudE1hcmtlcio+IGRpY3RhdGlvbk1hcmtlcnMgPSBkb2N1bWVudC0+bWFya2Vy
cygpLT5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGljdGF0aW9u
TWFya2Vycy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXItPnJlbW92ZUFsdGVybmF0aXZlc0Zvck1hcmtlcihkaWN0YXRpb25NYXJrZXJzW2ldKTsK
KworICAgIGRvY3VtZW50LT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbklu
ZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgZG9jdW1lbnQtPm1hcmtl
cnMoKS0+Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIApAQCAtMjM2NiwxMCAr
MjM4NywxNCBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0
IFN0cmluZyYgY29ycmVjdGlvbikKICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29ycmVjdGlvbik7CiB9CiAKK3ZvaWQgRWRpdG9yOjpoYW5kbGVB
Y2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUpCit7
CisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmhhbmRsZUFjY2VwdGVkQWx0
ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOworfQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbEFzSWdub3JlZCgpCit2b2lkIEVkaXRvcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJ
KCkKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXItPmRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSgpOwogfQogCiBib29sIEVkaXRvcjo6aW5zaWRl
VmlzaWJsZUFyZWEoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMjUxMCw3ICsy
NTM1LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpuZXh0VmlzaWJsZVJhbmdlKFJhbmdl
KiBjdXJyZW50UmFuZ2UsIGNvbnN0IFN0cmluZyYgdGEKICAgICByZXR1cm4gZmlyc3RWaXNpYmxl
UmFuZ2UodGFyZ2V0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlv
bkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wg
Y2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSkKK3ZvaWQgRWRpdG9yOjpjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9u
LCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIC8v
IElmIHRoZSBuZXcgc2VsZWN0aW9uIGlzIG9ycGhhbmVkLCB0aGVuIGRvbid0IHVwZGF0ZSB0aGUg
c2VsZWN0aW9uLgogICAgIGlmIChuZXdTZWxlY3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5l
d1NlbGVjdGlvbi5lbmQoKS5pc09ycGhhbigpKQpAQCAtMjUyMSwxNCArMjU0Niw4IEBAIHZvaWQg
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgbmV3U2VsZWN0aW9uLCBiCiAgICAgLy8gVGhlIG9sZCBzZWxlY3Rpb24gY2FuIGJlIGludmFs
aWQgaGVyZSBhbmQgY2FsbGluZyBzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY2FuIHByb2R1Y2Ugc29t
ZSBzdHJhbmdlIGNhbGxzLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTcyOTMxNT4gU29t
ZSBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlIGNvbnRhaW4gUmFuZ2VzIGZvciBzZWxlY3Rp
b25zIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZAogICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikp
IHsKLSAgICAgICAgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9
IDA7Ci0gICAgICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gRnJh
bWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nOwotICAgICAgICBpZiAoY2xlYXJUeXBpbmdTdHlsZSkK
LSAgICAgICAgICAgIG9wdGlvbnMgfD0gRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5bGU7
CisgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMp
OwotICAgIH0KIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0aGUgc2Vs
ZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhl
IERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4gdGhlIGZv
bGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTI2MTUsNyArMjYzNCw4IEBA
IHZvaWQgRWRpdG9yOjp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZSkKIAogdm9p
ZCBFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKIHsKLSAgICBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgZGlzbWlzc0FsdGVybmF0aXZlVGV4
dFVJKCk7CisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmRpc21pc3MoKTsK
ICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT50ZXh0RmllbGREaWRFbmRFZGl0
aW5nKGUpOwogfQpAQCAtMjg4NSw3ICsyOTA1LDcgQEAgdm9pZCBFZGl0b3I6OnNldE1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQogCiB2b2lkIEVkaXRvcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgbV9z
cGVsbGluZ0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7Cisg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wUGVuZGluZ0FsdGVybmF0aXZlcyhv
bGRTZWxlY3Rpb24pOwogCiAgICAgYm9vbCBjbG9zZVR5cGluZyA9IG9wdGlvbnMgJiBGcmFtZVNl
bGVjdGlvbjo6Q2xvc2VUeXBpbmc7CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IHRoaXMtPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0y
OTM1LDcgKzI5NTUsNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYQogICAgIGlmICghaXNDb250
aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKIAot
ICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAgICBub3RpZnlD
b21wb25lbnRzT25DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9CiAK
IHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKaW5kZXggM2MyNTQ0YTcxNmNhZmQ4ZDhkMzRhOWYzMjBhYmE1OTg1MWZiN2E2Zi4u
YTRhMTU2ZTIwMGU2ZjU3ZmJlOTc3ZGFmNTI3OTA5NTY0YTZiMGI3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVk
aXRBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3IuaCIKQEAgLTQ2LDkgKzQ3LDEx
IEBAIHR5cGVkZWYgaW50IE5TV3JpdGluZ0RpcmVjdGlvbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOwogY2xhc3MgQ2xpcGJvYXJkOwog
Y2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFzcyBEZWxldGVCdXR0b25Db250cm9sbGVy
OworY2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOwogY2xhc3MgRWRpdENvbW1h
bmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3MgRWRpdG9yQ2xpZW50OwpA
QCAtMTMyLDggKzEzNSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZFNob3dEZWxldGVJbnRl
cmZhY2UoSFRNTEVsZW1lbnQqKSBjb25zdDsKICAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydHlTZXQq
LCBSYW5nZSopOwotICAgIAotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pOworCiAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsK
IAogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShpbnQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgY29uc3Q7CkBAIC0yMDMsNiArMjA1LDcgQEAgcHVibGljOgogICAgIGJv
b2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KTsKICAg
ICBib29sIGluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQpOwogICAgIGJvb2wgaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0
cmluZyYsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBUZXh0RXZlbnQqIHRyaWdnZXJpbmdFdmVu
dCk7CisgICAgYm9vbCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVj
dG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMs
IEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGJvb2wgaW5zZXJ0TGluZUJyZWFrKCk7CiAg
ICAgYm9vbCBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKICAgICAKQEAgLTMyMiw3ICszMjUs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAg
Ly8gSWYgdXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBjb3JyZWN0aW9uIHBhbmVs
LCBjb3JyZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSBpdCBtZWFucyB0aGF0
IHVzZXIgaGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCiAgICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9u
UGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKLSAgICB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVkRGljdGF0
aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSk7CisgICAgdm9pZCBkaXNt
aXNzQWx0ZXJuYXRpdmVUZXh0VUkoKTsKIAogICAgIHZvaWQgcGFzdGVBc0ZyYWdtZW50KFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5
bGUpOwogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNtYXJ0
UmVwbGFjZSk7CkBAIC00MDIsNiArNDA2LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8S2lsbFJp
bmc+IG1fa2lsbFJpbmc7CiAgICAgT3duUHRyPFNwZWxsQ2hlY2tlcj4gbV9zcGVsbENoZWNrZXI7
CiAgICAgT3duUHRyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fc3BlbGxpbmdDb3Jy
ZWN0b3I7CisgICAgT3duUHRyPERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4gbV9kaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7CisgICAgT3duUHRyPEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI+IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjsKICAgICBWaXNpYmxlU2VsZWN0
aW9uIG1fbWFyazsKICAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsK
ICAgICBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3IgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9y
OwpAQCAtNDIzLDcgKzQyOSw4IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFz
dFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAgICAgUGFzc1JlZlB0
cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRp
b25zKTsKIAotICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5
cGluZ1N0eWxlKTsKKyAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rp
b25PcHRpb25zKTsKKyAgICB2b2lkIG5vdGlmeUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0
U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0
aW9uKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRl
eCBiMTg3N2Y2ZDBiNTY4ZGU0MDEwNGJmM2NkYmJiM2ViMGM4OTEwYmIyLi5iZGE5YzRiMGZhMGE1
MzliMWY0NzMzNDFiZGU5OTU1NWZiMDRjNjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oCkBAIC0xMTgsNiArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBDbGVhclR5
cGluZ1N0eWxlID0gMSA8PCAyLAogICAgICAgICBTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQgPSAx
IDw8IDMsCiAgICAgICAgIERvTm90U2V0Rm9jdXMgPSAxIDw8IDQsCisgICAgICAgIERpY3RhdGlv
blRyaWdnZXJlZCA9IDEgPDwgNQogICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBTZXRTZWxl
Y3Rpb25PcHRpb25zOyAvLyBVbmlvbiBvZiB2YWx1ZXMgaW4gU2V0U2VsZWN0aW9uT3B0aW9uIGFu
ZCBFVXNlclRyaWdnZXJlZAogICAgIHN0YXRpYyBpbmxpbmUgRVVzZXJUcmlnZ2VyZWQgc2VsZWN0
aW9uT3B0aW9uc1RvVXNlclRyaWdnZXJlZChTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
LmNwcAppbmRleCBlMDk2NWUwZjY1NWY2NzA2YjcwNGNmNThmYjg0ZThlNmQyN2U5ODE2Li42ZGI0
N2M5ZmUyYTRkNDg4NDEzMWMxM2Y1ZWM4YWZhNDVlMDAwNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJl
bmRlclRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAg
LTQ1LDYgKzQ2LDIyIEBAIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpCiAgICAgQVNTRVJUKCFtX3Rl
eHQuaXNFbXB0eSgpKTsKIH0KIAorSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50
b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJz
KQorICAgIDogU2ltcGxlRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fbm9k
ZShub2RlKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV90ZXh0KHRleHQpCit7Cisg
ICAgQVNTRVJUKG1fbm9kZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0IDw9IG1fbm9kZS0+bGVuZ3Ro
KCkpOworICAgIEFTU0VSVCghbV90ZXh0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRN
YXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIG1fbWFya2Vycy5hcHBlbmQoRG9j
dW1lbnRNYXJrZXIobWFya2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBvZmZzZXQs
IG1hcmtlci5lbmRPZmZzZXQoKSArIG9mZnNldCwgbWFya2VyLmRldGFpbHMoKSkpOworICAgIH0K
K30KKyAgICAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAg
ICAgaWYgKCFtX25vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQpAQCAtNTksNiArNzYsMTAgQEAg
dm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICBFeGNlcHRpb25D
b2RlIGVjOwogICAgIG1fbm9kZS0+aW5zZXJ0RGF0YShtX29mZnNldCwgbV90ZXh0LCBlYyk7CiAK
KyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBkb2N1bWVu
dCgpLT5tYXJrZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21hcmtlcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1hcmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihtX25vZGUuZ2V0
KCksIG1fbWFya2Vyc1tpXSk7CisKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5ub2RlVGV4
dENoYW5nZU5vdGlmaWNhdGlvbihtX25vZGUtPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFY
VGV4dEluc2VydGVkLCBtX29mZnNldCwgbV90ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgKaW5kZXggZjY4NTQ3MjFiYTFh
MWI1YjkzNTc4Zjc5Y2E3ODk1MjZjMTg2MzFlMy4uNTIyZTFlMmFkNzY4NzRkNzk4N2M2YzNhOGUz
YTJjMDA5YTY5ZTk4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKIGNsYXNzIFRleHQ7CiAKIGNsYXNzIEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewpAQCAtMzks
OCArNDAsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQobm9kZSwgb2Zmc2V0LCB0ZXh0KSk7CiAgICAgfQogCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQ
dHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQobm9kZSwgb2Zmc2V0LCB0ZXh0
LCBtYXJrZXJzKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIEluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CisgICAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+
IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJSSURFOwpAQCAtNTIs
NiArNTksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxUZXh0PiBtX25vZGU7CiAgICAgdW5zaWdu
ZWQgbV9vZmZzZXQ7CiAgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI+IG1fbWFya2VyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggMzlmYTJhODk3ZmI2YzJh
N2E3NWM3YWY1ZDM2ODI5YTA1YzQzNjYwMi4uOTNlOWIxMzI3ZTQyN2ZlNzA4MDM3YjZhNWZjMTJk
Yjk3ZjA3MGM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgog
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5oIgogI2luY2x1ZGUgIkVk
aXRvci5oIgpAQCAtNDYsNiArNDcsMTUgQEAgSW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRD
b21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib28KIHsKIH0K
IAorSW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRDb21tYW5kKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJr
ZXJzKQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpCisgICAgLCBtX3RleHQo
dGV4dCkKKyAgICAsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KGZhbHNlKQorICAgICwgbV9yZWJhbGFu
Y2VUeXBlKFJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzKQorICAgICwgbV9t
YXJrZXJzKG1hcmtlcnMpCit7Cit9CisKIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjpwb3Np
dGlvbkluc2lkZVRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwKQogewogICAgIFBvc2l0aW9uIHBv
cyA9IHA7CkBAIC0xNjUsNyArMTc1LDEwIEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBzdGFydFBvc2l0aW9uLmNvbnRh
aW5lclRleHQoKTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgb2Zmc2V0ID0gc3RhcnRQb3NpdGlv
bi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKIAotICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUo
dGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKKyAgICAgICAgaWYgKG1fbWFya2Vycy5zaXplKCkp
CisgICAgICAgICAgICBpbnNlcnRUZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSh0ZXh0Tm9kZSwgb2Zm
c2V0LCBtX3RleHQsIG1fbWFya2Vycyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc2Vy
dFRleHRJbnRvTm9kZSh0ZXh0Tm9kZSwgb2Zmc2V0LCBtX3RleHQpOwogICAgICAgICBlbmRQb3Np
dGlvbiA9IFBvc2l0aW9uKHRleHROb2RlLCBvZmZzZXQgKyBtX3RleHQubGVuZ3RoKCkpOwogCiAg
ICAgICAgIGlmIChtX3JlYmFsYW5jZVR5cGUgPT0gUmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5n
V2hpdGVzcGFjZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
VGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
aAppbmRleCAxYWRiYTQ0YWUyNzcwNWI2MDFhYTJkMWFiNDI1YWY2NTQ3NTg0OWJkLi40Y2QwZmUw
MDUxNzYxMTRhYzAyNGM5OWE1MjhjZmQyYjZiMGM5OGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnRNYXJrZXI7CisKIGNsYXNzIEluc2VydFRleHRDb21t
YW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKICAgICBlbnVtIFJl
YmFsYW5jZVR5cGUgewpAQCAtNDMsOSArNDUsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluc2VydFRleHRDb21tYW5kKGRvY3VtZW50LCB0ZXh0LCBzZWxlY3RJbnNl
cnRlZFRleHQsIHJlYmFsYW5jZVR5cGUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNlcnRUZXh0Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCwg
dGV4dCwgbWFya2VycykpOworICAgIH0KKwogcHJpdmF0ZToKIAogICAgIEluc2VydFRleHRDb21t
YW5kKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4
dCwgUmViYWxhbmNlVHlwZSk7CisgICAgSW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOwog
CiAgICAgdm9pZCBkZWxldGVDaGFyYWN0ZXIoKTsKIApAQCAtNjEsNiArNjksNyBAQCBwcml2YXRl
OgogICAgIFN0cmluZyBtX3RleHQ7CiAgICAgYm9vbCBtX3NlbGVjdEluc2VydGVkVGV4dDsKICAg
ICBSZWJhbGFuY2VUeXBlIG1fcmViYWxhbmNlVHlwZTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI+IG1fbWFya2VyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CmluZGV4IDRmZmRjN2Y5NTZjMDk3NzYzZDJiM2U0YTEyMDg3ZDZmMDQ3NDcxY2EuLjNiOTRmODM3
ODM4NGViYTZkZGQ1MGJhOTQ3ODYzZjIwNTBhZmJjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtMjcs
MjAgKzI3LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJodG1sZWRpdGluZy5oIgot
I2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTU1LDcgKzE1Niw3IEBAIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlz
CiAKIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKLSAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFj
ZS5nZXQoKSk7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmFuZ2VCb3VuZGluZ0JveElu
Um9vdFZpZXcobV9mcmFtZS0+dmlldygpLCByYW5nZVRvUmVwbGFjZS5nZXQoKSk7CiAgICAgaWYg
KGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQo
KSk7CkBAIC0xOTksNDMgKzIwMCw5IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVuCiAgICAgaWYg
KCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKGVjKQorICAgIFJlZlB0cjxS
YW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHJlcGxhY2VUZXh0SW5SYW5nZShtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKSwgbV9mcmFtZSwgdHJ1ZSk7CisgICAgaWYgKCFyZXBsYWNlbWVudFJh
bmdlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOwot
Ci0gICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBs
YWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2
ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRv
QmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fy
cnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRp
b24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9z
aXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGgKLSAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0
byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAg
ICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50
KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwg
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAg
ICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25P
ZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFp
bmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0
SW5Db250YWluZXJOb2RlKCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhh
dCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAg
ICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7
Ci0KLSAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRo
b2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFp
blRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYg
cmVwbGFjZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250
YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwogICAgIHNpemVfdCBzaXplID0gbWFya2Vy
VHlwZXNUb0FkZC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKQEAgLTI5OCw3ICsyNjUsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7
CiAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4
dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSByYW5nZUJvdW5kaW5nQm94SW5Sb290VmlldyhtX2ZyYW1lLT52aWV3KCks
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CiAgICAgICAg
IGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICAgICAgY2xpZW50KCktPnNob3dD
b3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdC
b3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKICAgICB9CkBAIC0z
MTYsNyArMjgzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0
aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmUKICAgICAgICAgU3RyaW5nIHRv
cFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwogICAgICAgICBzdWdnZXN0aW9ucy5y
ZW1vdmUoMCk7CiAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7
Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KG1fZnJhbWUt
PnZpZXcoKSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsK
ICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbGllbnQo
KS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBi
b3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdn
ZXN0aW9uLCBzdWdnZXN0aW9ucyk7CiAgICAgfQpAQCAtMzYwLDcxICszMjcsMjcgQEAgdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQo
Y29uc3QgU3RyaW5nJiBjb3IKIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKICAgICByZXR1cm4gY2xpZW50
KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwot
fQotCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cm9vdFZpZXdSZWN0
Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAotewotICAgIEZyYW1lVmlldyogdmll
dyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7Ci0gICAgcmFuZ2UtPnRl
eHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7Ci0gICAgc2l6
ZV90IHNpemUgPSB0ZXh0UXVhZHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUodGV4dFF1YWRzW2ldLmJvdW5k
aW5nQm94KCkpOwotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChi
b3VuZGluZ1JlY3QpKTsKLX0gICAgICAgIAorfSAgICAgIAogCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uKQordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2Vy
LCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24sIGJvb2wqIHNob3VsZElnbm9yZU90
aGVyTWFya2VycykKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAvLyBXaGVuIHVzZXIgbW92ZXMg
Y2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hv
dyB0aGUgcGFuZWwKLSAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlv
biB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCi0gICAgLy8gdW5kZXNp
cmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVy
IG9uY2Ugd2UgY29uZmlybSB0aGF0Ci0gICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBh
dCB0aGUgZW5kIG9mIGEgd29yZC4KLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgp
IHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQorICAgIGlmICghc2hvdWxkU3Rh
cnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBv
c2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOwotICAgIAotICAgIC8vIENyZWF0aW5n
IGEgVmlzaWJsZSBwb3NpdGlvbiB0cmlnZ2VycyBhIGxheW91dCBhbmQgdGhlcmUgaXMgbm8KLSAg
ICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIHZhbGlkLgotICAgIGlm
IChzZWxlY3Rpb25Qb3NpdGlvbi5pc051bGwoKSkKKyAgICBOb2RlKiBub2RlID0gZW5kT2ZXb3Jk
UG9zaXRpb24uY29udGFpbmVyTm9kZSgpOworICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZz
ZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBTdHJpbmcgY3VycmVudFdvcmQg
PSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKKyAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0
aCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0
aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSk7Ci0gICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZX
b3JkLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGludCBlbmRPZmZz
ZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJz
Rm9yKG5vZGUpOwotICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291bnQ7ICsraSkgewotICAgICAgICBjb25z
dCBEb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKCFzaG91
bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFt
ZS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIt
PmVuZE9mZnNldCgpKTsKLSAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdv
cmRSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOwotICAgICAgICBpZiAobWFya2VyLT50eXBlKCkg
PT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9u
UGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rp
b25zKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXItPmRlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBz
dGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJl
dmVyc2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKKyAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7CisgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgaWYgKG1hcmtlci50
eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnMpOworICAgIGVsc2UgeworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb24oKTsKKyAgICAgICAgc3RhcnRDb3JyZWN0
aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pOwog
ICAgIH0KKyAgICAqc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzID0gdHJ1ZTsKIH0KIAogdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21w
b3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKaW5kZXggZGZkMDYwOGIyMzdmMjA1
NjliY2IxNTIxZmQ1OGQzNDRhZmFkY2VjNy4uYjJhNjJkYWFmMWZmNmNhMGM0ZTE5MjY1YjE5YzUz
YTU3NWZiODQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAgLTgxLDcgKzgxLDYgQEAgcHVibGljOgogICAgIHZv
aWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCiAKICAgICB2
b2lkIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VO
QUJMRUQoe30pCi0gICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9KQogICAgIHZv
aWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2Up
OyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQogCiAgICAgdm9pZCBhcHBseUNvcnJlY3Rp
b25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVO
TEVTU19FTkFCTEVEKHt9KQpAQCAtOTEsNyArOTAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNw
b25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9u
KTsgfSkKICAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21t
YW5kKikgVU5MRVNTX0VOQUJMRUQoeyB9KQogICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkRWRp
dGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKikgVU5MRVNTX0VOQUJMRUQoeyB9KQotICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0p
CiAKICAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlv
bik7IH0pCiAgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCkBAIC0xMTQsMTYgKzExMiwyMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJh
bmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVy
biB0cnVlOyB9KTsKICAgICB2b2lkIGRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29u
c3QgUG9zaXRpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShvcmlnaW5hbFN0cmluZyk7IH0pCiAKKyAgICB2b2lkIHJlc3BvbmRU
b01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiwgY29uc3QgUG9zaXRpb24m
IGVuZE9mV29yZFBvc2l0aW9uLCBib29sKiBzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpIFVOTEVT
U19FTkFCTEVEKHtVTlVTRURfUEFSQU0oZW5kT2ZXb3JkUG9zaXRpb24pOyBVTlVTRURfUEFSQU0o
c2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKTt9KQorCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BB
TkVMKQogcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZl
cnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nKTsKIAotICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVu
dE1hcmtlciogbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAorICAgIGJvb2wgc2hvdWxkU3Rh
cnRUaW1lckZvcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICgoKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLT5kZXNjcmlwdGlvbigpLmlzTnVsbCgpKSAK
LSAgICAgICAgICAgICAgICAgfHwgbWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci0+ZW5kT2Zmc2V0KCkpID09IGVuZE9m
ZnNldCk7CisgICAgICAgIHJldHVybiAoKChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uKCkuaXNOdWxsKCkpCisgICAgICAg
ICAgICAgICAgIHx8IG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAm
JiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSkgPT0gZW5kT2Zmc2V0KTsKICAg
ICB9CiAKKyAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbCk7CisKICAgICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOwogICAgIFRleHRDaGVja2Vy
Q2xpZW50KiB0ZXh0Q2hlY2tlcigpOwogICAgIEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5n
ZShjb25zdCBSYW5nZSopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAKaW5kZXggOWFlMzk1NTQxYTgzYzVlMjRiMDlmZTRiNDVjMGE5YWZiMTJmYTc4Zi4uYmZm
ZDIyNzJkYzc3YmNhZGM2YjQ5YWI5Y2Y5MjhmNmYyZTNlMmY4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC00OCwxOCArNDgsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBib29sIGNhbkFw
cGVuZE5ld0xpbmVGZWVkKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsKLSAg
ICBOb2RlKiBub2RlID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmlu
ZygiXG4iKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hF
dmVudChldmVudCwgZWMpOwotICAgIHJldHVybiBldmVudC0+dGV4dCgpLmxlbmd0aCgpOwotfQot
CiBUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgRVR5cGlu
Z0NvbW1hbmQgY29tbWFuZFR5cGUsIGNvbnN0IFN0cmluZyAmdGV4dFRvSW5zZXJ0LCBPcHRpb25z
IG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgVGV4dENvbXBvc2l0aW9uVHlw
ZSBjb21wb3NpdGlvblR5cGUpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkK
ICAgICAsIG1fY29tbWFuZFR5cGUoY29tbWFuZFR5cGUpCkBAIC0zODcsNyArMzc1LDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKGNvbnN0IFN0cmlu
ZyAmdGV4dCwgYm9vbCBzZWxlY3QKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJl
YWsoKQogewotICAgIGlmICghY2FuQXBwZW5kTmV3TGluZUZlZWQoZW5kaW5nU2VsZWN0aW9uKCkp
KQorICAgIGlmICghY2FuQXBwZW5kTmV3TGluZUZlZWRUb1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKElu
c2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CkBAIC0zOTYsNyArMzg0
LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoKQogCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiB7Ci0gICAgaWYgKCFjYW5BcHBl
bmROZXdMaW5lRmVlZChlbmRpbmdTZWxlY3Rpb24oKSkpCisgICAgaWYgKCFjYW5BcHBlbmROZXdM
aW5lRmVlZFRvU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCmluZGV4IGU2NDczOWQ3Njg0NDlkNDY1M2I4YmQ5Mzc0NmI4MTNjYTM2
MTQ4ZmQuLmY1MmRiM2I1ZDk1ZDZiMWM5ZjRmMDhmZDIzZmY2ZWFlNzEyOTQxMTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKIAor
I2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTYw
Niw2ICs2MDcsMTggQEAgTm9kZSogVmlzaWJsZVNlbGVjdGlvbjo6bm9uQm91bmRhcnlTaGFkb3dU
cmVlUm9vdE5vZGUoKSBjb25zdAogICAgIHJldHVybiBzdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkg
PyBzdGFydCgpLmRlcHJlY2F0ZWROb2RlKCktPm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2Rl
KCkgOiAwOwogfQogCitib29sIGNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIE5vZGUqIG5vZGUgPSBzZWxlY3Rp
b24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVudCA9IEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIpKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBub2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7CisgICAg
cmV0dXJuIGV2ZW50LT50ZXh0KCkubGVuZ3RoKCk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiAKIHZv
aWQgVmlzaWJsZVNlbGVjdGlvbjo6ZGVidWdQb3NpdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4IDhjODEwZGE0ZGQxOTdlMzFjZjZhNWY2
ZjhiOGI4ODI2Mjk3YmI3ZWYuLmIyYzNjZTRkOWY1YzhkYjViZDRmYjVhMmYzYTBlMjM2MmE3MWI1
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCkBAIC0xNTEs
NiArMTUxLDggQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBhLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBiKQogICAgIHJldHVybiAhKGEgPT0gYik7CiB9
CiAKK2Jvb2wgY2FuQXBwZW5kTmV3TGluZUZlZWRUb1NlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCBmMWRmYjA5OThjOTdjOTk4ODQzMzk2
OGQ1MGZlMDMwMWFmZTQ2MmQ2Li42ZGZiNjNkZjZiYWMyNmMwNWU2ZDg5ZjM5MjEyODY4ZmY2NzU2
NDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC01MjYsNiArNTI2LDEx
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29v
bihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IHJldHVybiBTdHJpbmcoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KICNl
bmRpZgorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIHZpcnR1YWwgdm9pZCBz
aG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBGbG9hdFJlY3QmLCB1aW50NjRfdCkgeyB9
OworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpIHsgfTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90KSB7
IH07CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaAppbmRleCA0ZWNkNTY1ODRkMzNmZmM2NDk2Njc2MmUxNjY1NzVh
ZDZlYzAwNmU0Li4yY2ZjZjExOWVkYWNkMGYxYWYxMzczZmUyNTE3YWU3ZGUyYTg3Y2I5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgRWRp
dG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gKIAorI2luY2x1ZGUgIkRpY3RhdGlv
bkFsdGVybmF0aXZlTG9jYXRpb24uaCIKICNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCkBAIC0xNTgsNiArMTU5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZykgPSAwOwogI2VuZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgRmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCkgPSAwOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJE
ZXRhaWwmIGRldGFpbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2hv
d1NwZWxsaW5nVUkoYm9vbCBzaG93KSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggYWJhODYyNGYwY2I5YTU2NzRlMWM0MDFkOTVkYjVjOTQ5YTRlNGE0Mi4uNTE2Zjgy
NmQ2NjkxZGJmOTE1ZTEzMWY4ZTc3NTMxY2Q3YzAwZTkwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMzE4Nyw2ICszMTg3LDI5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5n
RXZlCiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7CiAgICAgcmV0dXJuIGV2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlRGlj
dGF0aW9uSW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdW5k
ZXJseWluZ0V2ZW50KQoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQ7CisgICAgaWYgKHVuZGVybHlpbmdFdmVudCkKKyAg
ICAgICAgdGFyZ2V0ID0gdW5kZXJseWluZ0V2ZW50LT50YXJnZXQoKTsKKyAgICBlbHNlCisgICAg
ICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0Tm9kZUZvckRvY3VtZW50KG1fZnJhbWUtPmRvY3VtZW50
KCkpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQorICAgICAgICB2aWV3LT5yZXNldERl
ZmVycmVkUmVwYWludERlbGF5KCk7CisKKyAgICBSZWZQdHI8VGV4dEV2ZW50PiBldmVudCA9IFRl
eHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKG1fZnJhbWUtPmRvbVdpbmRvdygpLCB0ZXh0LCBk
aWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5k
ZXJseWluZ0V2ZW50KTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KGV2ZW50LCBlYyk7CisgICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
OworfQogICAgIAogYm9vbCBFdmVudEhhbmRsZXI6OmlzS2V5Ym9hcmRPcHRpb25UYWIoS2V5Ym9h
cmRFdmVudCogZXZlbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCA3MDFm
YTJiZjk0NTU1NDk3NGJkOWRmNDZhNDc2MTkzNzk3MzA1MzViLi44MWU4ZGQwYTBjYjI2NzQ4MDEw
MDRjOTY4N2JkMWU2NzY3M2YyNjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgRXZlbnRIYW5kbGVyX2gKICNkZWZpbmUgRXZlbnRIYW5k
bGVyX2gKIAorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJEcmFnQWN0aW9ucy5oIgogI2luY2x1ZGUgIkRyYWdTdGF0ZS5oIgogI2luY2x1ZGUgIkZv
Y3VzRGlyZWN0aW9uLmgiCkBAIC0xODYsNiArMTg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVm
YXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKIAogICAgIGJvb2wgaGFu
ZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2
ZW50ID0gMCwgVGV4dEV2ZW50SW5wdXRUeXBlID0gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7Cisg
ICAgYm9vbCBoYW5kbGVEaWN0YXRpb25JbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5h
dGl2ZXMsIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQpOwogICAgIHZvaWQgZGVmYXVsdFRleHRJbnB1
dEV2ZW50SGFuZGxlcihUZXh0RXZlbnQqKTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCmluZGV4IGJhYTA3MmFjY2NlOGRmMWMyMzBhNWE4ODQ4MWNjYjk1NGYy
NzkyMzcuLjA0NzhhMTMxYjljOTYwODIwZTdkZTA0MGI3YzY1NzMxMmVlZDFhNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRl
eHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IK
ICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2VkaXRvci5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgbV9lZGl0b3IuZGlzbWlzc0FsdGVy
bmF0aXZlVGV4dFVJKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFJlc3BlY3QgU1ZHcyB6
b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCBmN2JlZjRmOTU4OTU4ZjJiZDcxMjQ1OTgyNTdmY2Q3OWNlYjFmZGM5Li4wM2M5
N2VkOGI3YzA4YmFhZjcxODBiMGY1ZDZjZjAxYTFhYmEyMTMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzUyLDEyICsz
NTIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVz
KTsKIAogICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwotICAgICAgICBlbnVtIFRleHRDaGVja2luZ0xpbmVT
dHlsZSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZSwKLSAgICAg
ICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGUsCi0gICAgICAgICAgICBUZXh0Q2hl
Y2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQorICAgICAgICBlbnVtIFRleHRNYXJrZXJMaW5lU3R5
bGUgeworICAgICAgICAgICAgVGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlLAorICAgICAgICAg
ICAgVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGUsCisgICAgICAgICAgICBUZXh0TWFya2VyQXV0
b2NvcnJlY3Rpb25SZXBsYWNlbWVudExpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRNYXJrZXJE
aWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGUKICAgICAgICAgfTsKLSAgICAgICAgdm9pZCBk
cmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIFRl
eHRDaGVja2luZ0xpbmVTdHlsZSk7CisgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0TWFya2Vy
cyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUpOwog
CiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNl
dFBhaW50aW5nRGlzYWJsZWQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQppbmRleCBhY2VkOTZi
MmY0ZTdmZmMzODNjZWZlNzFkYjc5YTY2YTlhYzY2ODIyLi42NTFlMmZkNjNmZmRkN2FiY2ViZWM1
ZDIxMDY5Y2Q3ZmU5Y2MwZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KQEAgLTk5LDcgKzk5LDcg
QEAgc3RhdGljIE5TQ29sb3IqIGNyZWF0ZVBhdHRlcm5Db2xvcihOU1N0cmluZyogZmlyc3RDaG9p
Y2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2gKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0
YW5kYXJkIHBsYXRmb3JtIGNvbXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBs
YXRmb3JtIGFydHdvcmsgZm9yIHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgs
IFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRNYXJrZXJzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwg
VGV4dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB3aWQKICAgICBib29sIHVzaW5nRG90OwogICAgIE5TQ29sb3IgKnBhdHRlcm5Db2xvcjsKICAg
ICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5l
U3R5bGU6CisgICAgICAgIGNhc2UgVGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOgogICAgICAg
ICB7CiAgICAgICAgICAgICAvLyBDb25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3Iu
CiAgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvclNwZWxsaW5nID0gZmFsc2U7CkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWQKICAgICAgICAgICAgIHBh
dHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9yLmdldCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxl
OgorICAgICAgICBjYXNlIFRleHRNYXJrZXJHcmFtbWFyTGluZVN0eWxlOgogICAgICAgICB7CiAg
ICAgICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdyYW1tYXIgcGF0dGVybiBjb2xvci4KICAgICAg
ICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3JhbW1hciA9IGZhbHNlOwpAQCAtMTMxLDcg
KzEzMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkCiAgICAgICAgIH0KICNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICAgICAgLy8gVG8gc3VwcG9ydCBjb3JyZWN0aW9uIHBh
bmVsLgotICAgICAgICBjYXNlIFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlOgorICAg
ICAgICBjYXNlIFRleHRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlOgor
ICAgICAgICBjYXNlIFRleHRNYXJrZXJEaWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBj
b2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmZWMz
YmI3YThjYjIzNDUxYjFiYmUwNzIyMjFkNDk3NDAyZDFmMzc0Li4wNjJmMDg1YTc3NWVlMTgzNjBi
Njg0YzAyMTM5MzBhM2FiODUwNTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCkBAIC05ODMsMjIgKzk4MywyNCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQm
CiAgICAgICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CiB9CiAKLXN0YXRpYyBHcmFwaGljc0Nv
bnRleHQ6OlRleHRDaGVja2luZ0xpbmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJr
ZXJUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCitzdGF0aWMgR3Jh
cGhpY3NDb250ZXh0OjpUZXh0TWFya2VyTGluZVN0eWxlIHRleHRNYXJrZXJMaW5lU3R5bGVGb3JN
YXJrZXJUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCiB7CiAgICAg
c3dpdGNoIChtYXJrZXJUeXBlKSB7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6
Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1NwZWxsaW5nTGlu
ZVN0eWxlOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0TWFya2VyU3BlbGxp
bmdMaW5lU3R5bGU7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZTsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU7
CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGU7
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRNYXJrZXJBdXRvY29ycmVjdGlv
blJlcGxhY2VtZW50TGluZVN0eWxlOworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlv
bkFsdGVybmF0aXZlczoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtl
ckRpY3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4
dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQ6OlRleHRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZTsKICAgICB9CiB9CiAKLXZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihHcmFwaGlj
c0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2Vy
KiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFt
bWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFya2VycyAoNTMy
Nzg4NykKICAgICBpZiAodGV4dFJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCkpCkBA
IC0xMDYzLDcgKzEwNjUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdy
YW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYQogICAgICAgICAvLyBJ
biBsYXJnZXIgZm9udHMsIHRob3VnaCwgcGxhY2UgdGhlIHVuZGVybGluZSB1cCBuZWFyIHRoZSBi
YXNlbGluZSB0byBwcmV2ZW50IGEgYmlnIGdhcC4KICAgICAgICAgdW5kZXJsaW5lT2Zmc2V0ID0g
YmFzZWxpbmUgKyAyOwogICAgIH0KLSAgICBwdC0+ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoRmxv
YXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVP
ZmZzZXQpLCB3aWR0aCwgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJrZXIt
PnR5cGUoKSkpOworICAgIHB0LT5kcmF3TGluZUZvclRleHRNYXJrZXJzKEZsb2F0UG9pbnQoYm94
T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lk
dGgsIHRleHRNYXJrZXJMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CiB9
CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciogbWFy
a2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCkBAIC0xMTMwLDYgKzEx
MzIsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNz
Q29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICBjYXNlIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZzoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkNvcnJl
Y3Rpb25JbmRpY2F0b3I6CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudDoKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlczoKICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTUzLDE2ICsxMTU2LDE3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250
ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgLy8gbWFya2VyIGludGVyc2VjdHMg
dGhpcyBydW4uICBQYWludCBpdC4KICAgICAgICAgc3dpdGNoIChtYXJrZXItPnR5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6Ci0gICAgICAgICAgICAg
ICAgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0
eWxlLCBmb250LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcGFpbnRTcGVsbGluZ0dyYW1tYXJE
aWN0YXRpb25NYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2Up
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtl
cjo6R3JhbW1hcjoKLSAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2Vy
KHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIHRydWUpOworICAgICAgICAgICAg
ICAgIHBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKHB0LCBib3hPcmlnaW4sIG1h
cmtlciwgc3R5bGUsIGZvbnQsIHRydWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgogICAgICAgICAgICAgICAgIHBh
aW50VGV4dE1hdGNoTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6
Q29ycmVjdGlvbkluZGljYXRvcjoKLSAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nT3JHcmFt
bWFyTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKKyAg
ICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKKyAg
ICAgICAgICAgICAgICBwYWludFNwZWxsaW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihwdCwgYm94
T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudDoKICAgICAg
ICAgICAgICAgICBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKG1hcmtlciwgc3R5bGUs
IGZvbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggZTU5
NjYwZTNmMDIwMjVhOWVlMzdiZDk0OTIyMTY2YmViMTFkYThkMi4uYzFiZTJhMjkyMzIwNGY4MmZl
MzdlMzNiZDU4ZDdmNzRlNjIyODNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5oCkBAIC0xNzgsNyArMTc4LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBi
b3hPcmlnaW4sIGludCBkZWNvcmF0aW9uLCBjb25zdCBTaGFkb3dEYXRhKik7CiAgICAgdm9pZCBw
YWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwotICAgIHZvaWQgcGFpbnRTcGVsbGluZ09y
R3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBncmFt
bWFyKTsKKyAgICB2b2lkIHBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIq
LCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOwogICAgIHZvaWQgcGFp
bnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwogICAg
IHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciosIFJl
bmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKaW5kZXggYzgyNmIxNTBhMDcyZDg4NTMwM2UyZjQyMmYyMzQ3ZTBmNjFiODJmZS4uNzEwNjQy
NDg0ODIwNzE4YzJlZjdhODM2MzYwOWJiMDE2ZjI1OWVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcApAQCAtOTQsNiArOTQsOCBAQCBzdGF0aWMgYm9vbCBtYXJrZXJUeXBlc0Zy
b20oY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZQog
ICAgICAgICByZXN1bHQgPSAgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb247
CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWFya2VyVHlwZSwgIkRlbGV0ZWRBdXRv
Y29ycmVjdGlvbiIpKQogICAgICAgICByZXN1bHQgPSAgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRB
dXRvY29ycmVjdGlvbjsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJrZXJUeXBl
LCAiRGljdGF0aW9uQWx0ZXJuYXRpdmVzIikpCisgICAgICAgIHJlc3VsdCA9IERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGM4ZGU3NTViNmNkNjI2YzExODQxNTdiZjBhMzI4NTJjZjEyNDFjZjEuLjM0ZmRhNTAx
OGYxZTUxMjhmYmY2ZTcyZjNmYjMxODkyYzgxYmNkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzcwLDYgKzM3MCwxMCBAQAogCQlD
RDhFQUM3MzExQ0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4RUFDNzIxMUNBQzlBMzAwNzc0
MDc1IC8qIElPS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJQ0RBNjJBRTIxMjVGODdDMjAwN0ZEMTE4
IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREE2MkFFMDEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0RBNjJBRTMxMjVGODdDMjAwN0ZEMTE4IC8qIFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBNjJBRTExMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5D
b250cm9sbGVyLm1tICovOyB9OworCQlDRTdGQjgxQzE1MjIzNTQxMDBCRDFFQTkgLyogRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRTdGQjgxODE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLmggKi87IH07CisJCUNFN0ZCODFEMTUyMjM1NDEwMEJEMUVBOSAv
KiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTdGQjgxOTE1MjIzNTQwMDBCRDFFQTkgLyogRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tICovOyB9OworCQlDRTdGQjgxRTE1MjIzNTQx
MDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTdGQjgxQTE1MjIzNTQxMDBCRDFFQTkgLyog
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi87IH07CisJCUNFN0ZCODFGMTUyMjM1NDEwMEJE
MUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTdGQjgxQjE1MjIzNTQxMDBCRDFFQTkgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovOyB9OwogCQlERDdDREVFNzBBMjNCQTlFMDAwNjk5
MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREQ3Q0RFRTYwQTIzQkE5RTAwMDY5OTI4IC8qIFdlYlR5cGVzSW50ZXJu
YWwuaCAqLzsgfTsKIAkJREQ4OTY4MjAwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0
aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
RDg5NjgxRTA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkuaCAqLzsgfTsK
IAkJREQ4OTY4MjEwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQ4OTY4MUYwOUFB
ODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tICovOyB9OwpAQCAtNjk5LDYg
KzcwMywxMCBAQAogCQlDRDhFQUM3MjExQ0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3b3Jr
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBl
ci5mcmFtZXdvcms7IG5hbWUgPSBJT0tpdC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CiAJCUNEQTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE2MkFFMTEyNUY4N0MyMDA3
RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0U3RkI4MTgxNTIyMzU0MDAwQkQxRUE5IC8qIERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0U3RkI4MTkxNTIyMzU0MDAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0U3RkI4MUExNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0U3RkI4MUIxNTIyMzU0MTAw
QkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQ3Q0RFRTYwQTIzQkE5RTAwMDY5OTI4IC8qIFdlYlR5
cGVzSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVHlwZXNJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDg5NjgxRTA5QUE4NzI0
MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFbGVtZW50RGljdGlvbmFyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJREQ4
OTY4MUYwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFbGVt
ZW50RGljdGlvbmFyeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CkBAIC0xMjk0LDYgKzEzMDIsMTAgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUI4Mjk1OEQxMTMyNzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAqLywKIAkJ
CQlCODI5NThEMjEzMjcwN0QwMDAwRDBFNzkgLyogQ29ycmVjdGlvblBhbmVsLm1tICovLAorCQkJ
CUNFN0ZCODE4MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIuaCAqLywKKwkJCQlDRTdGQjgxOTE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLm1tICovLAorCQkJCUNFN0ZCODFBMTUyMjM1NDEwMEJEMUVBOSAvKiBU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLywKKwkJCQlDRTdGQjgxQjE1MjIzNTQxMDBCRDFF
QTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovLAogCQkJCUI2ODA0OTcxMEZGQkNF
QzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLmggKi8sCiAJCQkJQjY4MDQ5NzIwRkZC
Q0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUubW0gKi8sCiAJCQkJQTVERUZDMTEx
MUQ1MzQ0QjAwODg1MjczIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YU1hbmFnZXIuaCAqLywK
QEAgLTE2NDMsNiArMTY1NSw4IEBACiAJCQkJNDFGNDQ4NEYxMDMzOEU4QzAwMzBFNTVFIC8qIFdl
YldvcmtlcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTJFMkZFNTE0RTQ4MTgyMDA3
Q0NBMTggLyogV2ViTm90aWZpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTJFMkZFOTE0
RTQ4MjE1MDA3Q0NBMTggLyogV2ViTm90aWZpY2F0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNFN0ZCODFDMTUyMjM1NDEwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFN0ZCODFFMTUyMjM1NDEwMEJEMUVBOSAv
KiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjAzMCw2ICsy
MDQ0LDggQEAKIAkJCQlCQzJFNDY0RTBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0MUY0NDg1MDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vy
c1ByaXZhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTJFMkZFNjE0RTQ4MTgyMDA3Q0NBMTgg
LyogV2ViTm90aWZpY2F0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3RkI4MUQxNTIyMzU0
MTAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUNFN0ZCODFGMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDk4MTZhODc2MDg5ZWIzNTc5ZTBhMjcyZjI0YzA4MzNjNzhlMmE3ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCisjZGVmaW5lIERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZl
czsKK09CSkNfQ0xBU1MgV2ViVmlldzsKKworY2xhc3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xs
ZXI7CisKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciB7CitwdWJsaWM6Cisg
ICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKCkgeyB9CisgICAgLy8gUmV0dXJucyBh
IGRpY3RhdGlvbiBjb250ZXh0IElELgorICAgIHVpbnQ2NF90IGFkZEFsdGVybmF0aXZlcyhjb25z
dCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYpOworICAgIHZvaWQgY2xlYXIoKTsKKyAg
ICB2b2lkIHNob3dBbHRlcm5hdGl2ZXMoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nLCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
KTsKKyAgICB2b2lkIGRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKKyAgICB2b2lkIHJlbW92ZUFsdGVy
bmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoTlNTdHJpbmcqIGFjY2VwdGVkQWx0ZXJuYXRpdmUs
IHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIE5TVGV4dEFsdGVybmF0aXZlcyopOworICAgIAor
ICAgIGNsYXNzIERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyKCkgeyB9CisgICAgICAgIHVpbnQ2NF90IGFk
ZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYpOworICAg
ICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIE5TVGV4dEFsdGVybmF0aXZlcyogYWx0ZXJuYXRp
dmVzRm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICAg
ICAgdm9pZCByZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQpOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52YWxpZENv
bnRleHQgPSAwOworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4gPiBIYXNoTWFwVHlwZTsKKyAgICAgICAg
SGFzaE1hcFR5cGUgbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXA7CisgICAgfTsKKworICAgIERpY3Rh
dGlvbkNvbnRleHRDb250cm9sbGVyIG1fY29udGV4dENvbnRyb2xsZXI7CisgICAgUmV0YWluUHRy
PFdlYlZpZXc+IG1fdmlldzsKK307CisjZW5kaWYKKyNlbmRpZiAvLyBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMyNTgzM2JjNTQ0M2Y0ZTkxMTdmYTRkNzFhZmE2ZTlmNTRlN2M3ZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIubW0KQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKworI2lmIFVTRShESUNUQVRJ
T05fQUxURVJOQVRJVkVTKQorCisjaW1wb3J0IDxBcHBLaXQvTlNTcGVsbENoZWNrZXIuaD4KKyNp
bXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMuaD4KKyNpbXBvcnQgIldlYlZpZXdJbnRl
cm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordWludDY0X3QgRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWRkQWx0
ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2
ZXMpCit7CisgICAgdWludDY0X3QgY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+
KGFsdGVybmF0aXZlcy5nZXQoKSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
aW52YWxpZENvbnRleHQ7CisgICAgc3RkOjpwYWlyPEhhc2hNYXBUeXBlOjppdGVyYXRvciwgYm9v
bD4gcmVzdWx0ID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuYWRkKGNvbnRleHQsIGFsdGVybmF0
aXZlcyk7CisgICAgaWYgKHJlc3VsdC5maXJzdCA9PSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRDb250ZXh0OworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIGNvbnRleHQ7Cit9CisKK05TVGV4dEFsdGVybmF0aXZlcyogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVz
Rm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIEhh
c2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5m
aW5kKGRpY3RhdGlvbkNvbnRleHQpOworICAgIGlmIChpdHIgPT0gbV9hbHRlcm5hdGl2ZXNPYmpl
Y3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBpdHItPnNlY29u
ZC5nZXQoKTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3Rh
dGlvbkNvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250
ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgbV9hbHRlcm5hdGl2ZXNPYmpl
Y3RNYXAucmVtb3ZlKGRpY3RhdGlvbkNvbnRleHQpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmNsZWFyKCkKK3sK
KyAgICBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5jbGVhcigpOworfQorCit1aW50NjRfdCBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmFkZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5Q
dHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYgYWx0ZXJuYXRpdmVzKQoreworICAgIHJldHVybiBtX2Nv
bnRleHRDb250cm9sbGVyLmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpOworfQorCit2b2lk
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xlYXIoKQoreworICAgIHJldHVybiBt
X2NvbnRleHRDb250cm9sbGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyOjpzaG93QWx0ZXJuYXRpdmVzKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nLCB1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KQoreworICAgIGRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZpZXcgPSB2aWV3OworICAgIE5TVGV4dEFsdGVy
bmF0aXZlcyogYWx0ZXJuYXRpdmVzID0gbV9jb250ZXh0Q29udHJvbGxlci5hbHRlcm5hdGl2ZXNG
b3JEaWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpOworICAgIGlmICghYWx0ZXJuYXRp
dmVzKQorICAgICAgICByZXR1cm47CisgICAgTlNTcGVsbENoZWNrZXIqIHNwZWxsQ2hlY2tlciA9
IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAgIFtzcGVsbENoZWNrZXIg
c2hvd0NvcnJlY3Rpb25JbmRpY2F0b3JPZlR5cGU6TlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZUd1
ZXNzZXMgcHJpbWFyeVN0cmluZzphbHRlcm5hdGl2ZXMucHJpbWFyeVN0cmluZyBhbHRlcm5hdGl2
ZVN0cmluZ3M6YWx0ZXJuYXRpdmVzLmFsdGVybmF0aXZlU3RyaW5ncyBmb3JTdHJpbmdJblJlY3Q6
W3ZpZXcgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3OmJvdW5kaW5nQm94T2ZEaWN0YXRlZFN0cmlu
Z10gdmlldzptX3ZpZXcuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyogYWNjZXB0
ZWRTdHJpbmcpIHsKKyAgICAgICAgaWYgKGFjY2VwdGVkU3RyaW5nKQorICAgICAgICAgICAgaGFu
ZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShhY2NlcHRlZFN0cmluZywgZGljdGF0aW9uQ29udGV4dCwg
YWx0ZXJuYXRpdmVzKTsKKyAgICB9XTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoTlNTdHJpbmcqIGFjY2VwdGVkQWx0
ZXJuYXRpdmUsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIE5TVGV4dEFsdGVybmF0aXZlcyog
YWx0ZXJuYXRpdmVzKQoreworICAgIFthbHRlcm5hdGl2ZXMgbm90ZVNlbGVjdGVkQWx0ZXJuYXRp
dmVTdHJpbmc6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07CisgICAgbV9jb250ZXh0Q29udHJvbGxlci5y
ZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpOwor
ICAgIFttX3ZpZXcuZ2V0KCkgX2hhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6YWNj
ZXB0ZWRBbHRlcm5hdGl2ZV07CisgICAgbV92aWV3LmNsZWFyKCk7Cit9CisKK3ZvaWQgRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpkaXNtaXNzQWx0ZXJuYXRpdmVzKCkKK3sKKyAgICBp
ZiAoIW1fdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVk
U3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVjdGlvbkluZGljYXRvckZvclZpZXc6bV92aWV3Lmdl
dCgpXTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFs
dGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1fY29udGV4dENv
bnRyb2xsZXIucmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dChkaWN0YXRpb25D
b250ZXh0KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWRl
NmQ3ZWQyMmFmZDg2MGIxNmRiZWRhZTdkNzA5NDg1MTg2YzhkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdl
LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dEFsdGVybmF0aXZl
V2l0aFJhbmdlX2gKKyNkZWZpbmUgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorT0JKQ19D
TEFTUyBOU1RleHRBbHRlcm5hdGl2ZXM7CisKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFu
Z2UgeworICAgIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShOU1RleHRBbHRlcm5hdGl2ZXMqIGFu
QWx0ZXJuYXRpdmVzLCBOU1JhbmdlIGFSYW5nZSk7CisgICAgVGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlKGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYW5vdGhlcik7CisgICAgTlNSYW5n
ZSByYW5nZTsKKyAgICBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiBhbHRlcm5hdGl2ZXM7
Cit9OworCisjZW5kaWYKKworI2VuZGlmIC8vIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBlMDU3ODcxM2YxODViZDg1ZTNiM2Y3
ODE4ZDNjMTYxNDgyZjYxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbQpAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgorCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJu
YXRpdmVzLmg+CisKK1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlKE5TVGV4dEFsdGVybmF0aXZlcyogYW5BbHRlcm5hdGl2ZXMsIE5TUmFuZ2UgYVJhbmdl
KQorOiByYW5nZShhUmFuZ2UpCissIGFsdGVybmF0aXZlcyhhbkFsdGVybmF0aXZlcykKK3sKK30K
KworVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoY29u
c3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKQorOiByYW5nZShhbm90aGVyLnJh
bmdlKQorLCBhbHRlcm5hdGl2ZXMoYW5vdGhlci5hbHRlcm5hdGl2ZXMpCit7Cit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKaW5kZXggMDZmY2E4ZDBlYmZlMWU5ZmJkN2IyYmRiNWFjOTQwODgxMGNiMjQ1Yy4uNjM0MmUy
ODU0NDg5NjJlOGUzMTNhNDg4NTk4MDVhNTg4MTMyMGQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAgLTE0Miw2ICsxNDIs
MTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxT
b29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSBPVkVSUklERTsKICNlbmRpZgorI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQorICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJu
YXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRl
eHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4
dCkgT1ZFUlJJREU7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgdm9pZCByZWdpc3RlclVuZG9PclJl
ZG9TdGVwKFBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+LCBib29sIGlzUmVkbyk7CiAgICAg
V2ViRWRpdG9yQ2xpZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggYzMwMWViNTA4Yzg3YzJhNDA1NTEyOWEwZTk2
ZGIyZmQ2M2JkMmM0MS4uZWMyNTY3MjU4MDIzZGE2ZTBkMmFhYWIyZGY2MmQ3OTliYzUwYjI0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtODg5LDYgKzg4OSwyMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUgogfQog
I2VuZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK3ZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAg
W21fd2ViVmlldyBfc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUk6Ym91bmRpbmdCb3hPZkRpY3Rh
dGVkVGV4dCBmb3JEaWN0YXRpb25Db250ZXh0OmRpY3RhdGlvbkNvbnRleHRdOworfQorCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKQoreworICAg
IFttX3dlYlZpZXcgX2Rpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJXTsKK30KKwordm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KQoreworICAgIFttX3dlYlZpZXcgX3JlbW92ZURpY3RhdGlvbkFsdGVybmF0
aXZlczpkaWN0YXRpb25Db250ZXh0XTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3Nw
ZWxsZWRXb3JkKQogewogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1
cGRhdGVTcGVsbGluZ1BhbmVsV2l0aE1pc3NwZWxsZWRXb3JkOm1pc3NwZWxsZWRXb3JkXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IGE5YjI5MWU0OTlmODAy
OTdjYzc1Njc5ZjM5MGVmNmJkZTA2MWM0YTQuLjc2Yjg5MTY1Y2U2MDI1ZTdjYjhlNWM5NzgyYjk2
M2JhM2RlODA5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpA
QCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAiRE9NRG9jdW1lbnRJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCisjaW1w
b3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKICNpbXBvcnQgIldlYkFyY2hpdmUuaCIK
ICNpbXBvcnQgIldlYkNsaXBWaWV3LmgiCiAjaW1wb3J0ICJXZWJET01PcGVyYXRpb25zSW50ZXJu
YWwuaCIKQEAgLTU4ODgsNiArNTg4OSwyMiBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5l
cyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAg
IH0KIH0KIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorc3RhdGljIHZvaWQgY29s
bGVjdERpY3RhdGlvblRleHRBbHRlcm5hdGl2ZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcs
IFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JiBhbHRlcm5hdGl2ZXMpIHsKKyAgICBO
U1JhbmdlIGVmZmVjdGl2ZVJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgMCk7CisgICAgTlNVSW50ZWdl
ciBsZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CisgICAgZG8geworICAgICAgICBOU0RpY3Rpb25h
cnkgKmF0dHJpYnV0ZXMgPSBbc3RyaW5nIGF0dHJpYnV0ZXNBdEluZGV4OmVmZmVjdGl2ZVJhbmdl
LmxvY2F0aW9uIGVmZmVjdGl2ZVJhbmdlOiZlZmZlY3RpdmVSYW5nZV07CisgICAgICAgIGlmICgh
YXR0cmlidXRlcykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBOU1RleHRBbHRlcm5hdGl2
ZXMgKnRleHRBbHRlcm5hdGl2ZXMgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNUZXh0QWx0
ZXJuYXRpdmVzQXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmICh0ZXh0QWx0ZXJuYXRpdmVzKQor
ICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uo
dGV4dEFsdGVybmF0aXZlcywgZWZmZWN0aXZlUmFuZ2UpKTsKKyAgICAgICAgZWZmZWN0aXZlUmFu
Z2UubG9jYXRpb24gPSBOU01heFJhbmdlKGVmZmVjdGl2ZVJhbmdlKTsKKyAgICB9IHdoaWxlIChl
ZmZlY3RpdmVSYW5nZS5sb2NhdGlvbiA8IGxlbmd0aCk7Cit9CisjZW5kaWYKKwogLSAodm9pZClp
bnNlcnRUZXh0OihpZClzdHJpbmcKIHsKICAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtz
dHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07CkBAIC01OTA0
LDcgKzU5MjEsMTQgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVk
U3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICBOU1JhbmdlIHJlcGxh
Y2VtZW50UmFuZ2UgPSB7IE5TTm90Rm91bmQsIDAgfTsKICAgICBib29sIGlzRnJvbUlucHV0TWV0
aG9kID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7
CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBWZWN0b3I8VGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXM7CisjZW5kaWYKKwogICAgIGlm
IChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
KyAgICAgICAgY29sbGVjdERpY3RhdGlvblRleHRBbHRlcm5hdGl2ZXMoc3RyaW5nLCBkaWN0YXRp
b25BbHRlcm5hdGl2ZXMpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBXZSBpZ25vcmUgbW9z
dCBhdHRyaWJ1dGVzIGZyb20gdGhlIHN0cmluZywgc28gZm9yIGV4YW1wbGUgaW5zZXJ0aW5nIGZy
b20gQ2hhcmFjdGVyIFBhbGV0dGUgbG9zZXMgZm9udCBhbmQgZ2x5cGggdmFyaWF0aW9uIGRhdGEu
CiAgICAgICAgIC8vIEl0IGRvZXMgbm90IGxvb2sgbGlrZSBhbnkgaW5wdXQgbWV0aG9kcyBldmVy
IHVzZSBpbnNlcnRUZXh0OiB3aXRoIGF0dHJpYnV0ZXMgb3RoZXIgdGhhbiBOU1RleHRJbnB1dFJl
cGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lLgogICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJp
bmddOwpAQCAtNTk0Myw3ICs1OTY3LDEyIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVz
KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAg
aWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIC8v
IEFuIGluc2VydFRleHQ6IG1pZ2h0IGJlIGhhbmRsZWQgYnkgb3RoZXIgcmVzcG9uZGVycyBpbiB0
aGUgY2hhaW4gaWYgd2UgZG9uJ3QgaGFuZGxlIGl0LgogICAgICAgICAvLyBPbmUgZXhhbXBsZSBp
cyBzcGFjZSBiYXIgdGhhdCByZXN1bHRzIGluIHNjcm9sbGluZyBkb3duIHRoZSBwYWdlLgotICAg
ICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50
VGV4dCwgZXZlbnQpOworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICAgICBp
ZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVzLnNpemUoKSkKKyAgICAgICAgICAgIGV2ZW50SGFuZGxl
ZCA9IFtbc2VsZiBfd2ViVmlld10gX2luc2VydERpY3RhdGVkVGV4dDpldmVudFRleHQgYWx0ZXJu
YXRpdmVzOmRpY3RhdGlvbkFsdGVybmF0aXZlcyB0cmlnZ2VyaW5nRXZlbnQ6ZXZlbnRdOworICAg
ICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmluc2VydFRleHQoZXZlbnRUZXh0LCBldmVudCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+
Y29uZmlybUNvbXBvc2l0aW9uKGV2ZW50VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KaW5kZXggYzQxOGIwMzkxYTE4MDE1NzI5NzBmOGIxOTQ3ZTQwZTdkYzg2NGMzMy4uZmEx
MzNkMThhMDc4MGQ0NzUyOTAwNzI4YjFhNjk1MjlhNDdjMjViZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiV2ViVmlld0ludGVy
bmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3RGF0YS5oIgogCisjaW1wb3J0ICJEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkRPTUNTU1N0eWxlRGVjbGFyYXRpb25JbnRl
cm5hbC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01SYW5nZUlu
dGVybmFsLmgiCkBAIC02MzM0LDYgKzYzMzUsNTUgQEAgc3RhdGljIHZvaWQgZ2xpYkNvbnRleHRJ
dGVyYXRpb25DYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZpdHkK
IH0KICNlbmRpZgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCistIChCT09MKV9p
bnNlcnREaWN0YXRlZFRleHQ6KGNvbnN0IFN0cmluZyYpdGV4dCBhbHRlcm5hdGl2ZXM6KGNvbnN0
IFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JilhbHRlcm5hdGl2ZXMgdHJpZ2dlcmlu
Z0V2ZW50OihFdmVudCopdHJpZ2dlcmluZ0V2ZW50Cit7CisgICAgQVNTRVJUKCFhbHRlcm5hdGl2
ZXMuaXNFbXB0eSgpKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVG
cmFtZV07CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBF
ZGl0b3IqIGVkaXRvciA9IGNvcmVGcmFtZS0+ZWRpdG9yKCk7CisKKyAgICBWZWN0b3I8RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4gZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnM7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFsdGVybmF0aXZlV2l0aFJh
bmdlID0gYWx0ZXJuYXRpdmVzW2ldOworICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
ID0gX3ByaXZhdGUtPm1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5hZGRBbHRlcm5h
dGl2ZXMoYWx0ZXJuYXRpdmVXaXRoUmFuZ2UuYWx0ZXJuYXRpdmVzKTsKKyAgICAgICAgaWYgKGRp
Y3RhdGlvbkNvbnRleHQpCisgICAgICAgICAgICBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
cy5hcHBlbmQoRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbihhbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5yYW5nZS5sb2NhdGlvbiwgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UucmFuZ2UubGVuZ3RoLCBkaWN0
YXRpb25Db250ZXh0KSk7CisgICAgfQorCisgICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVkaXRvci0+aW5zZXJ0VGV4dCh0ZXh0
LCB0cmlnZ2VyaW5nRXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGVkaXRvci0+aW5z
ZXJ0RGljdGF0ZWRUZXh0KHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCB0cmln
Z2VyaW5nRXZlbnQpOworfQorCistICh2b2lkKV9zaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSToo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jilib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0IGZvckRp
Y3RhdGlvbkNvbnRleHQ6KHVpbnQ2NF90KWRpY3RhdGlvbkNvbnRleHQKK3sKKyAgICBfcHJpdmF0
ZS0+bV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPnNob3dBbHRlcm5hdGl2ZXMoc2Vs
ZiwgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCk7Cit9CisKKy0g
KHZvaWQpX2Rpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJCit7CisgICAgX3ByaXZhdGUtPm1f
ZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5kaXNtaXNzQWx0ZXJuYXRpdmVzKCk7Cit9
CisKKy0gKHZvaWQpX3JlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlczoodWludDY0X3QpZGljdGF0
aW9uQ29udGV4dAoreworICAgIF9wcml2YXRlLT5tX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlci0+cmVtb3ZlQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpOworfQorCistICh2b2lk
KV9oYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlOihOU1N0cmluZyopYWx0ZXJuYXRp
dmUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSk7Cit9Cisj
ZW5kaWYKKwogLSAoTlNQb2ludClfY29udmVydFBvaW50RnJvbVJvb3RWaWV3OihOU1BvaW50KXBv
aW50CiB7CiAgICAgcmV0dXJuIE5TTWFrZVBvaW50KHBvaW50LngsIFtzZWxmIGJvdW5kc10uc2l6
ZS5oZWlnaHQgLSBwb2ludC55KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEu
aAppbmRleCBlYTJiZmNmNjA3NGU5YTUxMWMzYzNlYWUyZGI0ZmY1ZTVlYzNjNGY2Li4yYzgzM2Yw
ZThhZmI5YmVmZTI4YWIzZDFhYjJmNGRjMThlNGY5YmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3RGF0YS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIldlYlR5cGVz
SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgi
CisjaW1wb3J0IDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvTGF5ZXJGbHVzaFNjaGVkdWxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9MYXll
ckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5n
Lmg+CkBAIC01OCw2ICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEBjbGFzcyBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlcjsKICNlbmRpZgogCitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI7CisKIGV4dGVybiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZzsKIGV4dGVy
biBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsKIApAQCAtMjAwLDUgKzIwMyw5IEBAIHBy
aXZhdGU6CiAgICAgaW50IHZhbGlkYXRpb25NZXNzYWdlVGltZXJNYWduaWZpY2F0aW9uOwogCiAg
ICAgZmxvYXQgY3VzdG9tRGV2aWNlU2NhbGVGYWN0b3I7CisKKyNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKKyAgICBPd25QdHI8RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyPiBt
X2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsKKyNlbmRpZgogfQogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXggMGI4MTE3YTA5NzA2ZDViNmVj
NGU2NDU3YzMzOThlNDc2MjZjNThiYS4uMjM0NjgyZTVmMDNmNTE0MGMyNGRmODQ1OTJiYTAxYTg1
ZTZmMDFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIldlYlZpZXdEYXRhLmgiCiAKKyNpbXBvcnQgIkRpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgog
I2ltcG9ydCAiV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVPYmpDRXh0cmFzLmg+CkBAIC0xMDAsNiArMTAxLDEwIEBAIExheWVyRmx1c2hDb250cm9s
bGVyOjpMYXllckZsdXNoQ29udHJvbGxlcihXZWJWaWV3KiB3ZWJWaWV3KQogCiAgICAgcGx1Z2lu
RGF0YWJhc2VDbGllbnRDb3VudCsrOwogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMp
CisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHNlbGY7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVy
bmFsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4
IDAyY2M1NTAxMDZiMDQ0ZmJjMTc3YzlmNTlhMWY4M2Y1OTBkZTUwYjAuLmQ5OGU5MTE1MDUzZWJh
OWNmMWQzYzI0MjliYmVlMDFkNTExMGE5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaApAQCAtMzQsMTMgKzM0LDE3IEBACiAjaW1wb3J0ICJXZWJUeXBl
c0ludGVybmFsLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cworI2ltcG9ydCAiVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVLZXlib2FyZFVJTW9kZS5o
PgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAg
Y2xhc3MgSGlzdG9yeUl0ZW07CiAgICAgY2xhc3MgS1VSTDsKQEAgLTk1LDYgKzk5LDE0IEBAIFdl
YkNvcmU6OkZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpOwog
LSAodm9pZClfc2NoZWR1bGVHbGliQ29udGV4dEl0ZXJhdGlvbnM7CiAjZW5kaWYKIAorI2lmIFVT
RShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorLSAoQk9PTClfaW5zZXJ0RGljdGF0ZWRUZXh0Oihj
b25zdCBTdHJpbmcmKXRleHQgYWx0ZXJuYXRpdmVzOihjb25zdCBWZWN0b3I8VGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlPiYpYWx0ZXJuYXRpdmVzIHRyaWdnZXJpbmdFdmVudDooV2ViQ29yZTo6RXZl
bnQqKXRyaWdnZXJpbmdFdmVudDsKKy0gKHZvaWQpX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKWJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQgZm9y
RGljdGF0aW9uQ29udGV4dDoodWludDY0X3QpZGljdGF0aW9uQ29udGV4dDsKKy0gKHZvaWQpX2Rp
c21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOworLSAodm9pZClfcmVtb3ZlRGljdGF0aW9uQWx0
ZXJuYXRpdmVzOih1aW50NjRfdClkaWN0YXRpb25Db250ZXh0OworLSAodm9pZClfaGFuZGxlQWNj
ZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZTooTlNTdHJpbmcqKWFsdGVybmF0aXZlOworI2VuZGlm
CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCmluZGV4IDUwNTQ2NmM2YjAzZTU3YWE3Yjg5YjA0MDFmNzZiYTE2Nzky
NzM4NjguLjY4N2VjYmVjMjMyNDg4ZDA5NTE5YzllMWM2YzMyZGI2YzhlYTNmODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlRGV0YWlscy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRHJhZ1Nlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZUNob29zZXIuaD4KQEAgLTYzOSw2ICs2NDAsMjQgQEAgYm9vbCBB
cmd1bWVudENvZGVyPEtVUkw+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBLVVJM
JiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgQXJndW1lbnRDb2RlcjxEaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYWx0ZXJuYXRpdmVzTG9jYXRp
b24pCit7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KGFsdGVybmF0aXZlc0xvY2F0aW9uLnJh
bmdlU3RhcnQpOworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChhbHRlcm5hdGl2ZXNMb2NhdGlv
bi5yYW5nZUxlbmd0aCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KGFsdGVybmF0aXZlc0xv
Y2F0aW9uLmRpY3RhdGlvbkNvbnRleHQpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mIGFsdGVybmF0aXZlc0xvY2F0aW9uKQorewor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGFsdGVybmF0aXZlc0xvY2F0aW9uLnJhbmdl
U3RhcnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVV
SW50NjQoYWx0ZXJuYXRpdmVzTG9jYXRpb24ucmFuZ2VMZW5ndGgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoYWx0ZXJuYXRpdmVzTG9jYXRp
b24uZGljdGF0aW9uQ29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogI2lmIFBMQVRGT1JNKFFUKQogCiB2b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRQ
b2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRmxvYXRQb2lu
dDNEJiBmbG9hdFBvaW50M0QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgKaW5kZXggNmY5NzAwY2M1MDNjYTk3ZWU4YjdhYmYyNGVkZWFlNzMzODBiZDM2
ZC4uMjEzZjEyZGYxOGRjNDBkYzNkMjdkYTJjZTA4NTg0OTRiZjc0NTRiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtNTAsNiArNTAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNs
YXNzIFJlc291cmNlUmVzcG9uc2U7CiAgICAgc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOwor
ICAgIHN0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOwogICAgIHN0cnVjdCBEcmFn
U2Vzc2lvbjsKICAgICBzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKICAgICBzdHJ1Y3QgR3Jh
bW1hckRldGFpbDsKQEAgLTIyOCw2ICsyMjksMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpLVVJMPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OktVUkwmKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4geworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpEaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mKTsKK307CisK
ICNpZiBQTEFURk9STShRVCkKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6RmxvYXRQb2ludDNEPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggOGFmNzhjN2JiNWNhNjQz
ZDllM2UyNGNjMzg3MmEzZDA0MzhlMTc2NS4uYTg4MjViMTYxMzE4YWIxMmI0OTczMDhjZjc5ZDli
MGQxNjczOTdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3JyZWN0aW9u
UGFuZWwuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
CiBAY2xhc3MgV0tFZGl0b3JVbmRvVGFyZ2V0T2JqQzsKQEAgLTM1LDYgKzM2LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsK
IGNsYXNzIEZpbmRJbmRpY2F0b3JXaW5kb3c7CiAKIGNsYXNzIFBhZ2VDbGllbnRJbXBsIDogcHVi
bGljIFBhZ2VDbGllbnQgewpAQCAtMTI4LDEyICsxMzAsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0
eWxlKTsKIAogICAgIHZpcnR1YWwgV0tWaWV3KiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dr
VmlldzsgfQorICAgIAorICAgIHZpcnR1YWwgdWludDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRp
dmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgdmlydHVhbCB2
b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCk7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KTsKIAogICAgIFdLVmlldyogbV93a1ZpZXc7CiAgICAgUmV0YWluUHRyPFdLRWRpdG9y
VW5kb1RhcmdldE9iakM+IG1fdW5kb1RhcmdldDsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCiAgICAgQ29ycmVjdGlvblBhbmVsIG1fY29ycmVjdGlvblBhbmVsOwogI2Vu
ZGlmCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgT3duUHRyPERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlcj4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7
CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQppbmRleCAxNTRiNDU1YjZh
MzdjZjQ5MWFmYzNmZTcwYmE4MTQ3MTQxMzc1ZWNjLi40MGE1ZDY1NDJlZjgwNDI3ODk2MWY3ZTU1
NmY3YWRmYzgxNjZlY2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtMjYsNyArMjYsMTEgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKIAorI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorI2VuZGlm
CiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisjaW1wb3J0ICJEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKICNpbXBvcnQg
IkZpbmRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKQEAg
LTEyMiw2ICsxMjYsOSBAQCBQYXNzT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBQYWdlQ2xpZW50SW1w
bDo6Y3JlYXRlKFdLVmlldyogd2tWaWV3KQogUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBs
KFdLVmlldyogd2tWaWV3KQogICAgIDogbV93a1ZpZXcod2tWaWV3KQogICAgICwgbV91bmRvVGFy
Z2V0KEFkb3B0TlMsIFtbV0tFZGl0b3JVbmRvVGFyZ2V0T2JqQyBhbGxvY10gaW5pdF0pCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgLCBtX2RpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlcihhZG9wdFB0cihuZXcgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKSkK
KyNlbmRpZgogewogfQogCkBAIC0yMTMsNiArMjIwLDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
cHJvY2Vzc0RpZENyYXNoKCkKIHZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQogewog
ICAgIFttX3drVmlldyBfcGFnZUNsb3NlZF07CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmNsZWFyKCk7CisjZW5k
aWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKQEAgLTUy
OCw1ICs1MzgsMzcgQEAgYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5
U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykKIHsKICAgICByZXR1cm4gW21f
d2tWaWV3IF9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmlu
ZyhzZWxlY3RvclN0cmluZyldOwogfQorICAgIAordWludDY0X3QgUGFnZUNsaWVudEltcGw6OmFk
ZERpY3RhdGlvbkFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVz
PiYgYWx0ZXJuYXRpdmVzKQoreworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAg
IHJldHVybiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+YWRkQWx0ZXJuYXRpdmVz
KGFsdGVybmF0aXZlcyk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCkKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBpZiAoIWlz
Vmlld1Zpc2libGUoKSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5zaG93QWx0ZXJuYXRpdmVzKG1fd2tW
aWV3LCBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0KTsKKyNlbmRp
ZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVV
SSgpCit7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgbV9kaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXItPmRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKKyNlbmRpZgorfQor
Cit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0
X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
KyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+cmVtb3ZlQWx0ZXJuYXRpdmVz
KGRpY3RhdGlvbkNvbnRleHQpOworI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IDQxODI1MWEy
Yjk2NWVmMmMwNjEwMWQ2MjljOTJjZjM3MjE2ZTU4YWIuLjIyMDM5Y2RhYTdlNzdlNjM0OWVjYzk0
ZTZmMmZiOGVmNThhMmZiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0KQEAgLTI2LDYgKzI2LDEyIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQg
IldLVmlldy5oIgogCisjaW1wb3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKKyNpZiBV
U0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5h
dGl2ZXMuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU0F0dHJpYnV0ZWRTdHJpbmcuaD4KKyNlbmRpZgor
CiAjaW1wb3J0ICJBdHRyaWJ1dGVkU3RyaW5nLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgi
CiAjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgpAQCAtMTE1Miw2ICsxMTU4LDIyIEBA
IHN0YXRpYyBjb25zdCBzaG9ydCBrSU9ISURFdmVudFR5cGVTY3JvbGwgPSA2OwogICAgIFtzZWxm
IGluc2VydFRleHQ6c3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6TlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCldOwogfQogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitzdGF0aWMgdm9p
ZCBjb2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0
cmluZywgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGFsdGVybmF0aXZlcykgewor
ICAgIE5TUmFuZ2UgZWZmZWN0aXZlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAgICBOU1VJ
bnRlZ2VyIGxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKKyAgICBkbyB7CisgICAgICAgIE5TRGlj
dGlvbmFyeSAqYXR0cmlidXRlcyA9IFtzdHJpbmcgYXR0cmlidXRlc0F0SW5kZXg6ZWZmZWN0aXZl
UmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6JmVmZmVjdGl2ZVJhbmdlXTsKKyAgICAgICAg
aWYgKCFhdHRyaWJ1dGVzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIE5TVGV4dEFsdGVy
bmF0aXZlcyAqdGV4dEFsdGVybmF0aXZlcyA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1Rl
eHRBbHRlcm5hdGl2ZXNBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKHRleHRBbHRlcm5hdGl2
ZXMpCisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZSh0ZXh0QWx0ZXJuYXRpdmVzLCBlZmZlY3RpdmVSYW5nZSkpOworICAgICAgICBlZmZlY3Rp
dmVSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZWZmZWN0aXZlUmFuZ2UpOworICAgIH0gd2hp
bGUgKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uIDwgbGVuZ3RoKTsKK30KKyNlbmRpZgorCiAtICh2
b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxh
Y2VtZW50UmFuZ2UKIHsKICAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNL
aW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07CkBAIC0xMTY4LDcgKzExOTAs
MTIgQEAgc3RhdGljIGNvbnN0IHNob3J0IGtJT0hJREV2ZW50VHlwZVNjcm9sbCA9IDY7CiAgICAg
TlNTdHJpbmcgKnRleHQ7CiAgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IF9kYXRhLT5fcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbjsKIAorICAgIFZlY3RvcjxUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2U+IGRpY3RhdGlvbkFsdGVybmF0aXZlczsKKwogICAgIGlmIChpc0F0dHJp
YnV0ZWRTdHJpbmcpIHsKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICAgICAg
Y29sbGVjdERpY3RhdGlvblRleHRBbHRlcm5hdGl2ZXMoc3RyaW5nLCBkaWN0YXRpb25BbHRlcm5h
dGl2ZXMpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBXZSBpZ25vcmUgbW9zdCBhdHRyaWJ1
dGVzIGZyb20gdGhlIHN0cmluZywgc28gZm9yIGV4YW1wbGUgaW5zZXJ0aW5nIGZyb20gQ2hhcmFj
dGVyIFBhbGV0dGUgbG9zZXMgZm9udCBhbmQgZ2x5cGggdmFyaWF0aW9uIGRhdGEuCiAgICAgICAg
IHRleHQgPSBbc3RyaW5nIHN0cmluZ107CiAgICAgfSBlbHNlCkBAIC0xMTg4LDcgKzEyMTUsMTEg
QEAgc3RhdGljIGNvbnN0IHNob3J0IGtJT0hJREV2ZW50VHlwZVNjcm9sbCA9IDY7CiAKICAgICBT
dHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKICAgICBldmVudFRleHQucmVwbGFjZShOU0JhY2tUYWJD
aGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsgLy8gc2FtZSB0aGluZyBpcyBkb25lIGluIEtleUV2
ZW50TWFjLm1tIGluIFdlYkNvcmUKLSAgICBib29sIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFn
ZS0+aW5zZXJ0VGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4
UmFuZ2UocmVwbGFjZW1lbnRSYW5nZSkpOworICAgIGJvb2wgZXZlbnRIYW5kbGVkOworICAgIGlm
IChkaWN0YXRpb25BbHRlcm5hdGl2ZXMuc2l6ZSgpKQorICAgICAgICBldmVudEhhbmRsZWQgPSBf
ZGF0YS0+X3BhZ2UtPmluc2VydERpY3RhdGVkVGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFu
Z2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1lbnRSYW5nZSksIGRpY3RhdGlvbkFsdGVy
bmF0aXZlcyk7CisgICAgZWxzZQorICAgICAgICBldmVudEhhbmRsZWQgPSBfZGF0YS0+X3BhZ2Ut
Pmluc2VydFRleHQoZXZlbnRUZXh0LCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9uLCBOU01heFJh
bmdlKHJlcGxhY2VtZW50UmFuZ2UpKTsKIAogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBw
YXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgfD0gZXZlbnRIYW5k
bGVkOwpAQCAtMjg1NSw2ICsyODg2LDEzIEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFdpdGhVbmlx
dWVGaWxlbmFtZUZvclBhdGgoTlNTdHJpbmcgKnBhdGgpCiAgICAgX2RhdGEtPl9wYWdlLT5oYW5k
bGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKIH0KIAorLSAodm9pZCloYW5kbGVBY2Nl
cHRlZERpY3RhdGlvbkFsdGVybmF0aXZlOihOU1N0cmluZyAqKWFsdGVybmF0aXZlCit7CisjaWYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MSU9OKQorICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5h
dGl2ZShhbHRlcm5hdGl2ZSk7CisjZW5kaWYKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24g
V0tWaWV3IChQcml2YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlld0ludGVybmFsLmgKaW5kZXggYWQ0NmQwYWFhYmRkNTRkMmI4NWUxMjFkOWM5ODgyMWQz
MjE5NzQxNS4uOWUzN2MxMGZiYmNmNjkzNzNiODIwODZlNWY4ZTllMzUwMDZmNDQ0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCkBA
IC05Niw1ICs5Niw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAtIChOU0ludGVnZXIpc3BlbGxD
aGVja2VyRG9jdW1lbnRUYWc7CiAtICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDoo
TlNTdHJpbmcqKXJlc3VsdDsKKy0gKHZvaWQpaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5h
dGl2ZTooTlNTdHJpbmcqKWFsdGVybmF0aXZlOwogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAppbmRleCA0OTk5MDFhZDM2YTA5ODY3NWI2NzQ3Mjc1MjIxMjIyOTJkMGIw
OTkyLi4zY2MxYWJjNDE4NjVmN2E0MmY2NDM4YzJkMmVhOWI2NjU0NjNjODhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKIAogT0JKQ19DTEFTUyBXS1ZpZXc7CitPQkpD
X0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0xOTIsNiArMTkzLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5k
ZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxlKSA9IDA7CiAgICAgCiAg
ICAgdmlydHVhbCBXS1ZpZXcqIHdrVmlldygpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFs
IHVpbnQ2NF90IGFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0
QWx0ZXJuYXRpdmVzPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVy
bmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRU
ZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
c21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgPSAwOwog
I2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFt
ZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
aW5kZXggMjk2NmE3ODIyOGI2YjY2ZjUwYWFhNWJmZjgyMGFmNDAzOTM4MTBjNC4uNTBjOTVlNzE5
OTExZjg1ZmFiZDM5ZjQ5ZWM0MTQ1MTEyOWViMjQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTM3MjEsNiArMzcyMSwzMiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQog
ICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUNvcnJlY3Rp
b25QYW5lbFJlc3VsdChyZXN1bHQpLCBtX3BhZ2VJRCwgMCk7CiAjZW5kaWYKIH0KKwordm9pZCBX
ZWJQYWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3Ry
aW5nJiBhbHRlcm5hdGl2ZSkKK3sKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCisgICAgaWYgKCFpc0Nsb3NlZCgpKQor
ICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVk
RGljdGF0aW9uQWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpLCBtX3BhZ2VJRCwgMCk7CisjZW5kaWYK
K30KKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQordm9pZCBXZWJQYWdlUHJveHk6
OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91
bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAg
ICBtX3BhZ2VDbGllbnQtPnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGJvdW5kaW5nQm94T2ZE
aWN0YXRlZFRleHQsIGRpY3RhdGlvbkNvbnRleHQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKQoreworICAgIG1fcGFnZUNsaWVudC0+ZGlz
bWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorewor
ICAgIAorfQorI2VuZGlmCisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDBj
YWUyZjcwNWY1OGMwNDE5MWUyN2VhYWU4OTViYWM3ODM5ZjY0NWYuLmMxYTUxNDIwYzY1OTExNDZl
N2ZiYzY0NmE0NzhjZWVhMDNlYjcyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5o
IgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIldlYlVJQ2xp
ZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJh
Z1Nlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KQEAgLTEwNiw2
ICsxMDcsNyBAQCBjbGFzcyBRUXVpY2tOZXR3b3JrUmVwbHk7CiAjZWxzZQogY2xhc3MgV0tWaWV3
OwogI2VuZGlmCitzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHVEspCkBAIC0zNDUsNiArMzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29u
ZmlybUNvbXBvc2l0aW9uKCk7CiAgICAgdm9pZCBjYW5jZWxDb21wb3NpdGlvbigpOwogICAgIGJv
b2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CisgICAgYm9vbCBpbnNlcnRE
aWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIGNvbnN0IFZlY3RvcjxUZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2U+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIHZvaWQgZ2V0
TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2
b2lkIGdldFNlbGVjdGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3Ro
KTsKICAgICB2b2lkIGdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgbG9j
YXRpb24sIHVpbnQ2NF90IGxlbmd0aCwgQXR0cmlidXRlZFN0cmluZyYpOwpAQCAtNjEzLDYgKzYx
Niw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIGhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBoYW5kbGVB
Y2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUpOwog
I2VuZGlmCiAKICAgICBzdGF0aWMgdm9pZCBzZXREZWJ1Z1BhaW50RmxhZ3MoV0tQYWdlRGVidWdQ
YWludEZsYWdzIGZsYWdzKSB7IHNfZGVidWdQYWludEZsYWdzID0gZmxhZ3M7IH0KQEAgLTg3Miw2
ICs4NzYsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29u
KGludDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCk7CiAgICAgdm9pZCByZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKICNlbmRpZiAvLyAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCisgICAgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3Rh
dGlvbkNvbnRleHQpOworICAgIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKTsK
KyAgICB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KTsKKyNlbmRpZgogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgIHZvaWQgY2xl
YXJMb2FkRGVwZW5kZW50Q2FsbGJhY2tzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA0YzM1YzRkYWZhNGUzZDk1YzA5ZDM2
MWFmZWExNjlkNDE1MmE2ZDNlLi5kMzBjMTlmZjE2ZGIwNWU5MzQ3ZDJjZWQ1MTE4ZDUyNDljZGZj
NjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KQEAgLTI3Niw2ICsyNzYsMTIgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICAgICBSZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBT
dHJpbmcgcmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyk7CiAjZW5kaWYK
IAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIFNob3dEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJKFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorICAgIERpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2
ZVVJKCkKKyAgICBSZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAjIFdpbmRvd3MgNyBH
ZXN0dXJlIE1lc3NhZ2VzCiAgICAgU2V0R2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdChib29s
IGxpbWl0UmVhY2hlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkZTE0
YWM5MWMwZWNkMjAzYzA1OGRkNTQxYjAwNzA3NmFiN2U3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcl9oCisjZGVmaW5lIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCitPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsKK09CSkNfQ0xBU1MgV0tWaWV3
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xs
ZXI7CisKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciB7CitwdWJsaWM6Cisg
ICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKCkgeyB9CisgICAgLy8gUmV0dXJucyBh
IGRpY3RhdGlvbiBjb250ZXh0IElELgorICAgIHVpbnQ2NF90IGFkZEFsdGVybmF0aXZlcyhjb25z
dCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYpOworICAgIHZvaWQgY2xlYXIoKTsKKyAg
ICB2b2lkIHNob3dBbHRlcm5hdGl2ZXMoV0tWaWV3KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
OworICAgIHZvaWQgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAgIHZvaWQgcmVtb3ZlQWx0ZXJu
YXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworCitwcml2YXRlOgorICAgIHZvaWQg
aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmluZyogYWNjZXB0ZWRBbHRlcm5hdGl2ZSwg
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0QWx0ZXJuYXRpdmVzKik7CisgICAgCisg
ICAgY2xhc3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIoKSB7IH0KKyAgICAgICAgdWludDY0X3QgYWRk
QWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAg
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgTlNUZXh0QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2
ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworICAgICAg
ICB2b2lkIHJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWludDY0X3QgZGlj
dGF0aW9uQ29udGV4dCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZhbGlkQ29u
dGV4dCA9IDA7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90
LCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiA+IEhhc2hNYXBUeXBlOworICAgICAgICBI
YXNoTWFwVHlwZSBtX2FsdGVybmF0aXZlc09iamVjdE1hcDsKKyAgICB9OworCisgICAgRGljdGF0
aW9uQ29udGV4dENvbnRyb2xsZXIgbV9jb250ZXh0Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8
V0tWaWV3PiBtX3ZpZXc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCisj
ZW5kaWYgLy8gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUxOTUzNTg3ZDVmZDFlYzAxNjBkZjIxMzgwNGUyZjJh
ZmIzNmVkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsMTE1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXIuaCIKKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9y
dCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+CisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJu
YXRpdmVzLmg+CisjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VpbnQ2NF90IERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFkZEFsdGVybmF0
aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYgYWx0ZXJuYXRpdmVzKQor
eworICAgIHVpbnQ2NF90IGNvbnRleHQgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihhbHRl
cm5hdGl2ZXMuZ2V0KCkpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGludmFs
aWRDb250ZXh0OworICAgIHN0ZDo6cGFpcjxIYXNoTWFwVHlwZTo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmFkZChjb250ZXh0LCBhbHRlcm5hdGl2ZXMp
OworICAgIGlmIChyZXN1bHQuZmlyc3QgPT0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybiBpbnZhbGlkQ29udGV4dDsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBjb250ZXh0OworfQorCitOU1RleHRBbHRlcm5hdGl2ZXMqIERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0ZvckRp
Y3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBIYXNoTWFw
VHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZmluZChk
aWN0YXRpb25Db250ZXh0KTsKKyAgICBpZiAoaXRyID09IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gaXRyLT5zZWNvbmQuZ2V0
KCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25D
b250ZXh0Q29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCh1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFw
LnJlbW92ZShkaWN0YXRpb25Db250ZXh0KTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjpjbGVhcigpCit7CisgICAg
bV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuY2xlYXIoKTsKK30KKwordWludDY0X3QgRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5T
VGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0
Q29udHJvbGxlci5hZGRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKK30KKwordm9pZCBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAgICByZXR1cm4gbV9jb250
ZXh0Q29udHJvbGxlci5jbGVhcigpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlcjo6c2hvd0FsdGVybmF0aXZlcyhXS1ZpZXcqIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nLCB1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KQoreworICAgIGRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fdmlldyA9IHZpZXc7CisgICAgTlNUZXh0QWx0ZXJuYXRp
dmVzKiBhbHRlcm5hdGl2ZXMgPSBtX2NvbnRleHRDb250cm9sbGVyLmFsdGVybmF0aXZlc0ZvckRp
Y3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgaWYgKCFhbHRlcm5hdGl2ZXMp
CisgICAgICAgIHJldHVybjsKKyAgICBOU1NwZWxsQ2hlY2tlciogc3BlbGxDaGVja2VyID0gW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgW3NwZWxsQ2hlY2tlciBzaG93
Q29ycmVjdGlvbkluZGljYXRvck9mVHlwZTpOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3Nl
cyBwcmltYXJ5U3RyaW5nOmFsdGVybmF0aXZlcy5wcmltYXJ5U3RyaW5nIGFsdGVybmF0aXZlU3Ry
aW5nczphbHRlcm5hdGl2ZXMuYWx0ZXJuYXRpdmVTdHJpbmdzIGZvclN0cmluZ0luUmVjdDpib3Vu
ZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcgdmlldzptX3ZpZXcuZ2V0KCkgY29tcGxldGlvbkhhbmRs
ZXI6XihOU1N0cmluZyogYWNjZXB0ZWRTdHJpbmcpIHsKKyAgICAgICAgaWYgKGFjY2VwdGVkU3Ry
aW5nKQorICAgICAgICAgICAgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShhY2NlcHRlZFN0cmlu
ZywgZGljdGF0aW9uQ29udGV4dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICB9XTsKK30KKwordm9pZCBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUo
TlNTdHJpbmcqIGFjY2VwdGVkQWx0ZXJuYXRpdmUsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQs
IE5TVGV4dEFsdGVybmF0aXZlcyogYWx0ZXJuYXRpdmVzKQoreworICAgIFthbHRlcm5hdGl2ZXMg
bm90ZVNlbGVjdGVkQWx0ZXJuYXRpdmVTdHJpbmc6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07CisgICAg
bV9jb250ZXh0Q29udHJvbGxlci5yZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0
KGRpY3RhdGlvbkNvbnRleHQpOworICAgIFttX3ZpZXcuZ2V0KCkgaGFuZGxlQWNjZXB0ZWREaWN0
YXRpb25BbHRlcm5hdGl2ZTphY2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICBtX3ZpZXcuY2xlYXIo
KTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRl
cm5hdGl2ZXMoKQoreworICAgIGlmICghbV92aWV3KQorICAgICAgICByZXR1cm47CisgICAgW1tO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uSW5kaWNh
dG9yRm9yVmlldzptX3ZpZXcuZ2V0KCldOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
Cit7CisgICAgbV9jb250ZXh0Q29udHJvbGxlci5yZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRp
b25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpOworfQorfQorI2VuZGlmIC8vIFVTRShESUNUQVRJ
T05fQUxURVJOQVRJVkVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjgwMDIzMzExNzhiYWQz
OTE0Mzg1Zjk1NDg1OTkxMmRkYmQ2OTZjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlX2gKKyNk
ZWZpbmUgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorT0JKQ19DTEFTUyBOU1RleHRBbHRl
cm5hdGl2ZXM7CisKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UgeworICAgIFRleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZShOU1RleHRBbHRlcm5hdGl2ZXMqIGFuQWx0ZXJuYXRpdmVzLCBO
U1JhbmdlIGFSYW5nZSk7CisgICAgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKGNvbnN0IFRleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZSYgYW5vdGhlcik7CisgICAgTlNSYW5nZSByYW5nZTsKKyAgICBS
ZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiBhbHRlcm5hdGl2ZXM7Cit9OworCisjZWxzZQor
c3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSB7IH07CisjZW5kaWYKKworI2VuZGlmIC8v
IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkw
NjE1NDJkYTlkZWIwZTE5YzVlYjFhODc3ZDQ0NDI4Zjk4N2JlY2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5t
bQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMuaD4KKworVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoTlNUZXh0QWx0ZXJu
YXRpdmVzKiBhbkFsdGVybmF0aXZlcywgTlNSYW5nZSBhUmFuZ2UpCis6IHJhbmdlKGFSYW5nZSkK
KywgYWx0ZXJuYXRpdmVzKGFuQWx0ZXJuYXRpdmVzKQoreworfQorCitUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShjb25zdCBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UmIGFub3RoZXIpCis6IHJhbmdlKGFub3RoZXIucmFuZ2UpCissIGFsdGVybmF0aXZl
cyhhbm90aGVyLmFsdGVybmF0aXZlcykKK3sKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQppbmRleCAzNTg0NzE4MmUxNDBiN2Q4
NGQwOTgzNDZiNjhiNzNlYjFhMDg2NGYwLi5jYWRjOTQ0NzczZWRjYzUyZDM1OGRiMzgxOWJlOGZi
ZTNmMWZmOGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQ
cm94eU1hYy5tbQpAQCAtMzUsOSArMzUsMTEgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKICNp
bXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKKyNp
bXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXIu
aCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5
LmgiCisjaW1wb3J0IDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KICNp
bXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkBAIC0xOTgs
NiArMjAwLDM1IEBAIGJvb2wgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0CiAgICAgcmV0dXJuIGhhbmRsZWQ7
CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5OjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VFbmQsIGNvbnN0IFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JiBkaWN0
YXRpb25BbHRlcm5hdGl2ZXMpCit7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisg
ICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBp
bnNlcnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVu
ZCk7CisgICAgCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaWN0YXRpb25BbHRl
cm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlJiBhbHRlcm5hdGl2ZVdpdGhSYW5nZSA9IGRpY3RhdGlvbkFsdGVybmF0aXZlc1tpXTsK
KyAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IG1fcGFnZUNsaWVudC0+YWRkRGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlV2l0aFJhbmdlLmFsdGVybmF0aXZlcyk7Cisg
ICAgICAgIGlmIChkaWN0YXRpb25Db250ZXh0KQorICAgICAgICAgICAgZGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbnMuYXBwZW5kKERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24oYWx0ZXJu
YXRpdmVXaXRoUmFuZ2UucmFuZ2UubG9jYXRpb24sIGFsdGVybmF0aXZlV2l0aFJhbmdlLnJhbmdl
Lmxlbmd0aCwgZGljdGF0aW9uQ29udGV4dCkpOworICAgIH0KKworICAgIGlmIChkaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBpbnNlcnRUZXh0
KHRleHQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CisgICAg
CisgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKKyAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpJbnNlcnREaWN0YXRlZFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kLCBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucyks
IE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnREaWN0YXRlZFRleHQ6OlJlcGx5KGhhbmRsZWQsIG1f
ZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgcmV0dXJuIGhhbmRsZWQ7CisjZWxzZQorICAg
IHJldHVybiBpbnNlcnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1l
bnRSYW5nZUVuZCk7CisjZW5kaWYKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJh
bmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKIHsKICAgICBsb2NhdGlv
biA9IE5TTm90Rm91bmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMTc5Yzk2MWY0N2RhNzkzZGY0MThlMDc1ZTM4N2IzM2JhYTNi
NTZiZS4uYzJlMDA2NGJmMThhMjgyMjgyNmM3MDgwM2U1Y2Y3YzEwYmE2ZTFjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODgz
LDYgKzg4Myw5IEBACiAJCUNEQ0E4NUM5MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRENBODVDNzEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci5oICovOyB9OwogCQlDRENBODVENTEzMkFDMkIzMDBFOTYxREYgLyogSU9LaXQuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDQTg1RDQxMzJBQzJCMzAwRTk2MURGIC8qIElPS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJQ0RD
QTg1RUUxMzJBRDcwMTAwRTk2MURGIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVERTEz
MkFEMDUzMDBFOTYxREYgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbSAqLzsgfTsK
KwkJQ0U2MjVCNkUxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENF
NjI1QjZDMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIu
bW0gKi87IH07CisJCUNFNjI1QjZGMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENFNjI1QjZEMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0VEMkI3ODIxNTFBNUU0NjAwM0FCQ0VGIC8qIFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENFQTY5RDNCMTUxQTQxQzQwMEY3NDNERSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UubW0gKi87IH07CiAJCUQzQjk0ODQ2MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1l
bnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNC
OTQ4NDIxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi87IH07CiAJCUQzQjk0
ODQ3MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBX
ZWJQb3B1cE1lbnUuaCAqLzsgfTsKIAkJRDNCOTQ4NDgxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNl
YXJjaFBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNw
cCAqLzsgfTsKQEAgLTE5MzcsNiArMTk0MCwxMCBAQAogCQlDRENBODVDNzEzMkFCQTRFMDBFOTYx
REYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQ0E4NUQ0MTMyQUMyQjMwMEU5NjFERiAvKiBJT0tpdC5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IElPS2l0LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJQ0RDQTg1REUxMzJBRDA1MzAwRTk2MURGIC8qIFdlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDRTYyNUI2QzE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRTYyNUI2RDE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUE2OUQzQjE1
MUE0MUM0MDBGNzQzREUgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUE2OUQzQzE1MUE0MUM0MDBGNzQzREUg
LyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5NDg0MjExRkY0QjY1MDAwMzJCMzkgLyog
V2ViUG9wdXBNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQzMTFG
RjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQz
Qjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU2VhcmNoUG9wdXBNZW51LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MzIsNiArMzQzOSwxMCBAQAogCQkJCTFBNjQy
OTJDMTJERTVGOTgwMENBQUUyQyAvKiBCYWNraW5nU3RvcmVNYWMubW0gKi8sCiAJCQkJQjg3OEI2
MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovLAogCQkJCUI4NzhCNjE0
MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gKi8sCisJCQkJQ0U2MjVCNkQx
NTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovLAor
CQkJCUNFNjI1QjZDMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIubW0gKi8sCisJCQkJQ0VBNjlEM0MxNTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZS5oICovLAorCQkJCUNFQTY5RDNCMTUxQTQxQzQwMEY3NDNERSAvKiBUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8sCiAJCQkJMUFBNDE3RUQxMkMwMEQ4NzAwMkJFNjdC
IC8qIFRleHRDaGVja2VyTWFjLm1tICovLAogCQkJCTFBRjA1RDg1MTQ2ODgzNDgwMDhCMUU4MSAv
KiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmggKi8sCiAJCQkJMUFGMDVEODQx
NDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0g
Ki8sCkBAIC00MTc4LDYgKzQxODksNyBAQAogCQkJCTM3NjA4ODIzMTUwNDE0RjcwMEZDODJDNyAv
KiBXS1JlbmRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5NDg0MDQxNTBDMzUwNjAw
RTUyQ0U5IC8qIFdlYlJlbmRlckxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQwOTE1
MEM0Qjk3MDBFNTJDRTkgLyogV0tSZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U2
MjVCNkYxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC00NjUxLDYgKzQ2NjMsNyBAQAogCQkJCUMwMUEyNjAxMTI2NjJG
MjEwMEM5RUQ1NSAvKiBTaGFyZWFibGVCaXRtYXBDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTI0QkYzQTEyMDg5NkE2MDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5TWFjLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDRUQyQjc4MjE1MUE1RTQ2MDAzQUJDRUYgLyogVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNDE3RUYxMkMwMEQ4NzAw
MkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGNTAxMjIx
MjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRjUwMUI0MTIzRUY2MDIwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlck1hYy5tbSBpbiBTb3Vy
Y2VzICovLApAQCAtNDkyMSw2ICs0OTM0LDcgQEAKIAkJCQkzNzYwODgyMjE1MDQxNEY3MDBGQzgy
QzcgLyogV0tSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5NDg0MDMxNTBD
MzUwNjAwRTUyQ0U5IC8qIFdlYlJlbmRlckxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3
OTQ4NDA4MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUNFNjI1QjZFMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDc4ZWE4
ZGJmZWUxNGZjNzdmMDY2NjUyMDhlNmY1OWUxYjA1OTAxMzIuLmJiNDg1YWMyZGExNThmM2RjODUy
MWJhNzc5M2RkYzQ3MDhmYTAxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQ4LDYgKzE0
OCwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSBPVkVSUklERTsKICNlbmRpZgorI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0
ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRl
ZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29u
dGV4dCkgT1ZFUlJJREU7CisjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFNob3dVbmljb2RlTWVudSgpIE9WRVJSSURFOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JD
bGllbnRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJFZGl0b3JDbGllbnRNYWMubW0KaW5kZXggNTIzY2JkZjcyMDYzYjRkMWQ3OTRjODFhYzUw
ZWYxNjA0YjFlMjJiZi4uZTY1ZWJlMGVjMzJkMjkyODEzOTc4YmZmMGM3YTU4OTM4YjUyZjkwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRWRpdG9yQ2xpZW50TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQpAQCAtMjYyLDQgKzI2MiwyMSBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0
b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUgogfQogI2VuZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9O
X0FMVEVSTkFUSVZFUykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJu
YXRpdmVVSShjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2
NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGJvdW5kaW5nQm94T2ZEaWN0YXRl
ZFRleHQsIGRpY3RhdGlvbkNvbnRleHQpKTsKK30KKyAgICAKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkpOwor
fQorCit2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhkaWN0YXRpb25Db250ZXh0
KSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNmI4MjQ2M2NjNmFmMzJjNjI0
MDNkYmU1NGQyMWMwYmZmN2JjZGZkYy4uZGFkZDBhYTQzMGQyYjkxNDM5MjMyYzE3NWVhNTE0NzQ4
NzEzYjQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtMjk5MCw3ICsyOTkwLDggQEAgYm9vbCBXZWJQYWdlOjpjYW5IYW5kbGVSZXF1ZXN0
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICByZXR1cm4gcGxh
dGZvcm1DYW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3QpOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgUExBVEZPUk0oTUFDKQor
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIHZvaWQgV2ViUGFnZTo6aGFu
ZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewogICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOwpAQCAtMjk5OCw2ICsyOTk5LDE3IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogICAgICAgICByZXR1cm47CiAgICAg
ZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKIH0K
KworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCit2b2lkIFdlYlBhZ2U6OmhhbmRsZUFj
Y2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSkKK3sK
KyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUt
PmVkaXRvcigpLT5oYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGFsdGVybmF0aXZl
KTsKK30KKyNlbmRpZgorI2VuZGlmCiAjZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpzaW11bGF0ZU1v
dXNlRG93bihpbnQgYnV0dG9uLCBXZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlvbiwgaW50IGNsaWNr
Q291bnQsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUgdGltZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDQ3NGI1NjU5OGQ1ZmIx
YTcxMjI0ZjA0ZjcwMDU0N2Y0MDdiZjIxMzkuLjAzZDc0ODllNjMwMWEzMTdkYWJhM2VlMTQwYzQ1
YjZhYzI0MTA3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJVbmRvU3RlcC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgpAQCAtMzk5LDcgKzQwMCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChjb25zdCBXZWJLaXQ6
OldlYk1vdXNlRXZlbnQmLCBib29sJiByZXN1bHQpOwogICAgIHZvaWQgYWNjZXB0c0ZpcnN0TW91
c2UoaW50IGV2ZW50TnVtYmVyLCBjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmLCBib29sJiBy
ZXN1bHQpOwogICAgIGJvb2wgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNv
bnN0IFN0cmluZyYpOwotCisgICAgdm9pZCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VFbmQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMsIGJvb2wmIGhhbmRsZWQsIEVk
aXRvclN0YXRlJiBuZXdTdGF0ZSk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBjb25m
aXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZyk7CiAgICAgdm9p
ZCBzZXRDb21wb3NpdGlvbihjb25zdCBXVEY6OlN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcsIGNv
bnN0IFdURjo6VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5l
cywgdWludDY0X3QgY3Vyc29yUG9zaXRpb24pOwpAQCAtNDgxLDkgKzQ4MiwxMyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHVubWFya0FsbE1pc3NwZWxsaW5ncygpOwogICAgIHZvaWQgdW5tYXJrQWxs
QmFkR3JhbW1hcigpOwotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCisjaWYgUExBVEZPUk0oTUFDKQorI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKICAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChj
b25zdCBTdHJpbmcmKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQorICAgIHZvaWQg
aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmKTsKKyNlbmRp
ZgorI2VuZGlmCiAjZW5kaWYKIAogICAgIC8vIEZvciB0ZXN0aW5nIHB1cnBvc2UuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CmluZGV4IDg0YTFlMDViYzZlYTBjYTE4MGZlMDZlNDhiYTQ2NmU5MzVlODc3N2YuLmQ5YWMwNWZj
ZjhkOGY1MGE5ODk0ZmZjNmE5OGE1ZTQzNjkxOTE1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yNDIsNiAr
MjQyLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAgICAgRXhlY3V0ZUtleXByZXNzQ29tbWFu
ZHMoVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gc2F2ZWRDb21tYW5kcykgLT4gKGJv
b2wgaGFuZGxlZCwgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKICAgICBTaG91bGREZWxh
eVdpbmRvd09yZGVyaW5nRXZlbnQoV2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50KSAtPiAoYm9v
bCByZXN1bHQpCiAgICAgQWNjZXB0c0ZpcnN0TW91c2UoaW50IGV2ZW50TnVtYmVyLCBXZWJLaXQ6
OldlYk1vdXNlRXZlbnQgZXZlbnQpIC0+IChib29sIHJlc3VsdCkKKyAgICBJbnNlcnREaWN0YXRl
ZFRleHQoV1RGOjpTdHJpbmcgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpEaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpIC0+IChib29sIGhh
bmRsZWQsIFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAjZW5kaWYKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgLy8gRklYTUU6IFVuaWZ5IHdpdGggTWFjIGNvdW50ZXJwYXJ0cy4KQEAgLTI1
OCw3ICsyNTksMTIgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAgICAgRmluZFpvb21hYmxlQXJl
YUZvclBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50KQogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBQTEFURk9S
TShNQUMpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIEhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChTdHJpbmcgcmVzdWx0KQorI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xJT04pCisgICAgSGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShTdHJp
bmcgYWx0ZXJuYXRpdmUpCisjZW5kaWYKKyNlbmRpZgogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggZGU4
YWY0NTkwZDdmYmM1OGUxZWY4OTNmMjEwMjA2NDkwNDdjZmQzMC4uZDgyZDBhODlkNzhmNDllZWU1
ZjRmZDgwZDcwNzFkYjcwMGQ2Y2RmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMjg2LDYgKzI4NiwyMSBAQCB2b2lk
IFdlYlBhZ2U6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNl
bWVudFJhbmdlU3RhcnQsIHVpbgogICAgIG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsKIH0KIAor
dm9pZCBXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50
NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBu
ZXdTdGF0ZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICAKKyAgICBpZiAocmVwbGFjZW1lbnRSYW5nZVN0
YXJ0ICE9IE5TTm90Rm91bmQpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJh
bmdlID0gY29udmVydFRvUmFuZ2UoZnJhbWUsIE5TTWFrZVJhbmdlKHJlcGxhY2VtZW50UmFuZ2VT
dGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCAtIHJlcGxhY2VtZW50UmFuZ2VTdGFydCkpOworICAg
ICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZSkKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwg
U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIWZyYW1lLT5lZGl0
b3IoKS0+aGFzQ29tcG9zaXRpb24oKSk7CisgICAgaGFuZGxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+
aW5zZXJ0RGljdGF0ZWRUZXh0KHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCBt
X2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkKTsKKyAgICBuZXdTdGF0ZSA9IGVkaXRvclN0
YXRlKCk7Cit9CisKIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0
aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQogewogICAgIGxvY2F0aW9uID0gTlNOb3RGb3VuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134518</attachid>
            <date>2012-03-29 00:36:54 -0700</date>
            <delta_ts>2012-03-29 10:34:37 -0700</delta_ts>
            <desc>Patch (v2)</desc>
            <filename>bug-82503-20120329003653.patch</filename>
            <type>text/plain</type>
            <size>201845</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWIyZWFhYjQxNmEyYjNl
ZWVkNmJmNzUxMTcxNDFkYzRlNTU5N2QxNi4uNDIyMmI1M2U4ZmM0YTQ2Njc2MThiMmNlMTIxMWNl
MDQ2YWM4ZTk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxMi0wMy0yOSAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJu
YXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIE9TWCBzcGVjaWZpYyBwYXRjaCB0aGF0
IGFsbG93cyBXZWJLaXQgdG8gdXRpbGl6ZSBBcHBLaXQgVUkgdG8gZGlzcGxheSBhbHRlcm5hdGl2
ZQorICAgICAgICBkaWN0YXRpb24gcmVzdWx0cyBmb3IgYSBnaXZlbiB0ZXh0LiBUbyBhY2hpZXZl
IHRoaXMsIHRoaXMgcmVsYXRpdmVseSBsYXJnZSBwYXRjaCBpbnRyb2R1Y2VkCisgICAgICAgIGZv
bGxvd2luZyBtYWpvciBjaGFuZ2VzOgorCisgICAgICAgIDEuIE1vZGlmaWVkIFRleHRFdmVudCB0
byBob2xkIGRpY3RhdGlvbiByZWxhdGVkIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIHRleHQu
CisgICAgICAgIDIuIEludHJvZHVjZWQgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyB0byBtYXJrIHRleHQgZm9yIHdoaWNoIGRpY3RhdGlvbgorICAgICAgICAgICAgc3lzdGVt
IHByb3ZpZGVkIGFsdGVybmF0aXZlcy4KKyAgICAgICAgMy4gSW50cm9kdWNlZCBEaWN0YXRpb25D
b21tYW5kIHdoaWNoIHdpbGwgYWRkIERpY3RhdGlvbkFsdGVybmF0aXZlIG1hcmtlcnMgdG8gdGV4
dAorICAgICAgICAgICBpbnNlcnRlZCBieSB0aGUgY29tbWFuZC4KKyAgICAgICAgNC4gQWRkZWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KCkgdG8gRWRpdG9yLgorICAgICAgICA1LiBJbnRyb2R1Y2VkIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciB3aGljaCBzZXJ2ZXMgc2ltaWxhciByb2xlIGFz
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuCisgICAgICAgIDYuIEFkZGVkIG5lY2Vzc2Fy
eSBpbnRlcmZhY2UgdG8gRWRpdG9yQ2xpZW50IHNpbWlsYXIgdG8gdGhvc2UgYWRkZWQgZm9yIGNv
cnJlY3Rpb24gcGFuZWwgVUkgb24gT1NYLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
RG9jdW1lbnRNYXJrZXIpOiBDcmVhdGUgbWFya2VyIHVzaW5nIHN1cHBsaWVkIERvY3VtZW50TWFy
a2VyRGV0YWlscyBvYmplY3QuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnRNYXJrZXIuaDogQWRkZWQgRGljdGF0aW9uQWx0ZXJuYXRpdmUgbWFya2VyIHR5cGUuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vyczo6QWxsTWFya2Vycyk6
CisgICAgICAgIChEb2N1bWVudE1hcmtlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oOgorICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKToKKyAgICAg
ICAgKiBkb20vVGV4dEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6Y3Jl
YXRlRm9yRGljdGF0aW9uKTogQ3JlYXRlIFRleHRFdmVudCBnZW5lcmF0ZWQgYnkgZGljdGF0aW9u
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OlRleHRF
dmVudCk6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAoVGV4dEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6aXNEaWN0YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEV2ZW50OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIGRvbS9U
ZXh0RXZlbnRJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlc3BvbmRUb0NhcmV0QXRFbmRPZldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJu
YXRpdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VUZXh0SW5SYW5nZSk6CisgICAgICAgICogZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IEFkZGVkLiBUaGlzIGNsYXNzIHNlcnZlcyB0
byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBJdCBjb250YWlucyBzb21lIGZ1bmN0aW9ucyBzaGFy
ZWQgYnkgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciBhbmQKKyAgICAgICAgICBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuIDIpIEluIHNpdHVhdGlvbiB3aGVyZSBFZGl0b3IgaW50
ZXJhY3Qgd2l0aAorICAgICAgICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgYW5kIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciBpbiBzYW1lIGZhc2hpb24sIAorICAgICAgICAg
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgc2VydmVzIGFzIGEgcHJveHkgZm9yIHRob3NlIHR3
byBjbGFzc2VzLCBzbyB0aGF0IEVkaXRvcgorICAgICAgICAgIG9ubHkgbmVlZCB0byBpbnRlcmFj
dHMgd2l0aCBvbmUgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRU
ZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSk6IFByb3ZpZGUgYW4gaW50ZXJmYWNlCisgICAgICAgICAg
IHRvIGFkZCBtYXJrZXJzIGFsb25nIHdpdGggdGV4dC4gSXQncyBjdXJyZW50bHkgdXNlZCBieSBE
aWN0YXRpb25Db21tYW5kLCBidXQgY291bGQKKyAgICAgICAgICAgYmUgdXNlZnVsIGZvciBvdGhl
ciBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNEaWN0YXRpb25Db21tYW5kKToK
KyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpEaWN0YXRpb25NYXJr
ZXJEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c3RvcFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
ZGlzbWlzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJl
bW92ZUFsdGVybmF0aXZlc0Zvck1hcmtlcik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDogQWRkZWQuIFNpbWlsYXIgdG8gU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlciwKKyAgICAgICAgICB0aGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBsb2dpYyBy
ZWdhcmRpbmcgd2hlbiB0byBzaG93IG9yIGRpc21pc3MgYWx0ZXJuYXRpdmUgZGljdGF0aW9uCisg
ICAgICAgICAgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEaWN0YXRpb25N
YXJrZXJEZXRhaWxzKTogQSBzdWJjbGFzcyBvZiBEb2N1bWVudE1hcmtlckRldGFpbHMgdXNlZCBi
eSBEaWN0YXRpb25BbHRlcm5hdGl2ZQorICAgICAgICAgIHR5cGUgbWFya2VyLgorICAgICAgICAo
V2ViQ29yZTo6RGljdGF0aW9uTWFya2VyRGV0YWlsczo6b3JpZ2luYWxUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6OmRpY3RhdGlvbkNvbnRleHQpOgorICAg
ICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJSW5mbzo6RGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAoRGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24uaDogQWRkZWQuIEl0IGNvbnRhaW5zIHRoZSByYW5nZSBpbiB3aGljaCB0aGUKKyAgICAg
ICAgICBpbnB1dCB0ZXh0IGhhcyBhbHRlcm5hdGl2ZSBkaWN0YXRpb24gcmVzdWx0LCBhbmQgYW4g
aW50ZWdlciB0aGF0IGlkZW50aWZ5IGRpY3RhdGlvbiBjb250ZXh0LgorICAgICAgICAoRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6RGljdGF0aW9uQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyk6CisgICAgICAg
IChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6Y29sbGVjdERpY3RhdGlvbk1hcmtl
cnNJblJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuaDogIFNpbWls
YXIgdG8gVHlwaW5nQ29tbWFuZCwgYnV0IGFsbG93cyB1cyB0bworICAgICAgICAgIHBhc3MgYWRk
aXRpb25hbCBkaWN0YXRpb24gcmVsYXRlZCBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSB0ZXh0
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEaWN0YXRpb25Db21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmlzRGljdGF0aW9uQ29tbWFuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q29tcG9uZW50
c09uQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRF
ZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRE
aWN0YXRlZFRleHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFZGl0b3Ip
OgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6IEFsbG93IHBh
c3NpbmcgbWFya2VycyAKKyAgICAgICAgICBhbG9uZyB3aXRoIHRleHQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpjcmVhdGUpOgorICAgICAgICAoSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6CisgICAg
ICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRUZXh0Q29tbWFuZDo6SW5zZXJ0VGV4dENvbW1hbmQpOiBBbGxvdyBwYXNzaW5nIG1hcmtl
cnMgCisgICAgICAgICAgYWxvbmcgd2l0aCB0ZXh0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKEluc2VydFRleHRD
b21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hv
dyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBs
eUNvcnJlY3Rpb25QYW5lbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQpOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAgICAoU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzaG91bGRTdGFydFRpbWVyRm9yKToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKiBlZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQXBwZW5kTmV3TGlu
ZUZlZWRUb1NlbGVjdGlvbik6IE1vdmVkIHRoaXMgZnVuY3Rpb24gZnJvbSBUeXBpbmdDb21tYW5k
CisgICAgICAgICAgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBEaWN0YXRpb25Db21tYW5kLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6Cisg
ICAgICAgIChFbXB0eUVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRv
ckNsaWVudDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXMpOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcnMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRleHRNYXJrZXJMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoSW5saW5lVGV4dEJveCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFy
a2VyVHlwZXNGcm9tKToKKwogMjAxMi0wMy0yOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBXaW5kb3dzIGJ1aWxkIGFmdGVyIHIxMTI0ODIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGI3MzFiZDlkNTk0YTMwNjAzYWQ2Y2Y0ZWY4YjhkNjI2YzUzMzMxNGMuLjVmMzNmODY0
M2QxZTAzMWYyYzIwYzI1OTAyZGUwZjU4ODVlNmQ2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTItMDMtMjkgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlk
ZSBVSSB0byBzaG93IGFsdGVybmF0aXZlIHN0cmluZ3Mgb2YgZGljdGF0ZWQgdGV4dC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTAzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VlIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBmb3IgZGV0YWlscy4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDEyLTAzLTIyICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxy
YWt1Y29ARnJlZUJTRC5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBVbnJldmlld2VkIGJ1aWxkIGZp
eCBhZnRlciByMTExNzc4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGIwZTFhYjk2MzA2ZGZlZjQ2NGQ3
Y2MwNWMzOGJhODcyYmVmOGJiODQuLmFmNzQ2ZmQ0MGE4MDUxYzFhMDllNTI5MDIxMTRkMmFiMjVj
OWQ0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMi0wMy0yOSAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJu
YXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTZWUgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGZvciBk
ZXRhaWxzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLmg6IEFkZGVkLiBUaGlzIGNsYXNzIHNlcnZlcyB0d28gcHVycG9zZXM6CisgICAg
ICAgICAgMSkgUmV0YWluIHRoZSBkaWN0YXRpb24gYWx0ZXJuYXRpdmUgb2JqZWN0cyBwcm92aWRl
ZCBieSBBcHBLaXQsIGFuZCBwcm92aWRlIGFuCisgICAgICAgICAgICAgaW50ZWdlciB0byBvYmpl
Y3QgbWFwcGluZyBmb3IgV2ViQ29yZS4KKyAgICAgICAgICAyKSBDb250cm9sIGRpY3RhdGlvbiBh
bHRlcm5hdGl2ZSBVSS4KKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6
CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcik6CisgICAgICAgIChEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcik6
CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRl
eHRDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcik6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAg
ICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENv
bnRyb2xsZXI6OmFkZEFsdGVybmF0aXZlcyk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JE
aWN0YXRpb25Db250ZXh0KToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3Rh
dGlvbkNvbnRleHQpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpE
aWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAoRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI6OnNob3dBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjpoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKToKKyAgICAgICAg
KERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlcyk6Cisg
ICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZl
cyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg6
IEFkZGVkLiBBIHNpbXBsZSBzdHJ1Y3QgdGhhdCBoZWxwcyB0bworICAgICAgICAgIHBhc3MgYXJv
dW5kIGEgY291cGxlIG9mIHBpZWNlcyBvZiBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLm1tOiBBZGRlZC4KKyAgICAgICAgKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2
ZVVJKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0
aXZlVUkpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5h
dGl2ZXMpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChjb2xs
ZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGlu
c2VydFRleHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtX
ZWJWaWV3IF9pbnNlcnREaWN0YXRlZFRleHQ6YWx0ZXJuYXRpdmVzOnRyaWdnZXJpbmdFdmVudDpd
KToKKyAgICAgICAgKC1bV2ViVmlldyBfc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUk6V2ViQ29y
ZTo6Zm9yRGljdGF0aW9uQ29udGV4dDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlzbWlzc0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUldKToKKyAgICAgICAgKC1bV2ViVmlldyBfcmVtb3ZlRGljdGF0
aW9uQWx0ZXJuYXRpdmVzOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9oYW5kbGVBY2NlcHRlZERp
Y3RhdGlvbkFsdGVybmF0aXZlOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEuaDoK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLm1tOgorICAgICAgICAoLVtXZWJWaWV3UHJp
dmF0ZSBpbml0XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorCiAyMDEyLTAzLTI4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZSBjYWxs
YmFjaywgc2luY2Ugbm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3MjY4MjFkMDk3NDVmYjgzOTA3YmIxNTQwYjZk
OWM5NjkxNDY4MzAxLi5lMTI4NWQxMjBlYjVlYTIwZWYwODk2ZmQxY2M5MTE2MDJiMTE2MTA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTItMDMtMjkgIEppYSBQdSAgPGpwdUBhcHBs
ZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBVSSB0byBzaG93IGFsdGVybmF0aXZlIHN0cmluZ3Mg
b2YgZGljdGF0ZWQgdGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgyNTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBTZWUgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGZvciBkZXRhaWxz
LgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAg
IChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJ
UEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVV
SSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzRGljdGF0aW9uQWx0
ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZW1vdmVEaWN0
YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bToKKyAgICAgICAgKGNvbGxlY3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKToKKyAgICAgICAg
KC1bV0tWaWV3IGluc2VydFRleHQ6cmVwbGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tW
aWV3IGhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6XSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAoUGFnZUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJQ
YWdlUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIu
aDogQWRkZWQuIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBS
ZXRhaW4gdGhlIGRpY3RhdGlvbiBhbHRlcm5hdGl2ZSBvYmplY3RzIHByb3ZpZGVkIGJ5IEFwcEtp
dCwgYW5kIHByb3ZpZGUgYW4KKyAgICAgICAgICAgICBpbnRlZ2VyIHRvIG9iamVjdCBtYXBwaW5n
IGZvciBXZWJDb3JlLgorICAgICAgICAgIDIpIENvbnRyb2wgZGljdGF0aW9uIGFsdGVybmF0aXZl
IFVJLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKERpY3RhdGlvbkNv
bnRleHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENv
bnRyb2xsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xs
ZXI6OmFkZEFsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0Zv
ckRpY3RhdGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2
ZXNGb3JEaWN0YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmFkZEFsdGVybmF0
aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OnNob3dBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViS2l0
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRlcm5hdGl2ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFs
dGVybmF0aXZlcyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UuaDogQWRkZWQuIEEgc2ltcGxlIHN0cnVjdCB0aGF0IGhlbHBzIHRvCisgICAgICAgICAg
cGFzcyBhcm91bmQgYSBjb3VwbGUgb2YgcGllY2VzIG9mIGluZm9ybWF0aW9uLgorICAgICAgICAo
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZS5tbTogQWRkZWQuCisgICAgICAgIChUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSk6CisgICAgICAgICogVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
aW5zZXJ0RGljdGF0ZWRUZXh0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVV
SSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFs
dGVybmF0aXZlVUkpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlbW92ZURp
Y3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFu
ZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0
RGljdGF0ZWRUZXh0KToKKyAgICAgICAgKFdlYktpdCk6CisKIDIwMTItMDMtMjggIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSBjcmFzaCBhbmQg
YW4gYXNzZXJ0aW9uIHdoZW4gcmVjb3ZlcmluZyBmcm9tIGEgd2ViIHByb2Nlc3MgY3Jhc2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KaW5kZXggMGM0MjZmN2UwYzE3ZjYzMjkyNzhmZjFiZGRkZDVhZjM3ODQ1
YzcyOS4uODRhYjAwNTMzMDgzNGQ1ZGUxMmVkNzkxM2NmZjk2ZjRiYzBlZTlkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KQEAgLTcxMCw2ICs3MTAsOSBAQCBfX1pON1dlYkNvcmUyN2FwcGxpY2F0aW9u
SXNNaWNyb3NvZnRNeURheUV2CiBfX1pON1dlYkNvcmUyN2NvbnRleHRNZW51SXRlbVRhZ1Nob3dG
b250c0V2CiBfX1pON1dlYkNvcmUyN2NvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZUV2CiBfX1pO
N1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlc0V2CitfX1pON1dlYkNvcmUyOERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25DMUVSS1MwXworX19aTjdXZWJDb3JlMjhEaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uQzFFeXl5CitfX1pON1dlYkNvcmUyOERpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb25DMUV2CiBfX1pON1dlYkNvcmUyOGNvbnRleHRNZW51SXRlbVRhZ0NhcGl0
YWxpemVFdgogX19aTjdXZWJDb3JlMjhjb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzRXYKIF9f
Wk43V2ViQ29yZTI4Y29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rc0V2CkBAIC04NjgsNiArODcx
LDcgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjE3Y2FuY2VsQ29tcG9zaXRpb25FdgogX19aTjdXZWJD
b3JlNkVkaXRvcjE3aW5zZXJ0T3JkZXJlZExpc3RFdgogX19aTjdXZWJDb3JlNkVkaXRvcjE4Y29u
ZmlybUNvbXBvc2l0aW9uRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjE4Y29u
ZmlybUNvbXBvc2l0aW9uRXYKK19fWk43V2ViQ29yZTZFZGl0b3IxOGluc2VydERpY3RhdGVkVGV4
dEVSS04zV1RGNlN0cmluZ0VSS05TMV82VmVjdG9ySU5TXzI4RGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbkVMbTBFRUVQTlNfNUV2ZW50RQogX19aTjdXZWJDb3JlNkVkaXRvcjE5Y291bnRNYXRj
aGVzRm9yVGV4dEVSS04zV1RGNlN0cmluZ0VQTlNfNVJhbmdlRWpqYgogX19aTjdXZWJDb3JlNkVk
aXRvcjE5ZGVsZXRlV2l0aERpcmVjdGlvbkVOU18xOFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRl
eHRHcmFudWxhcml0eUViYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5aW5zZXJ0VW5vcmRlcmVkTGlz
dEV2CkBAIC04OTAsNiArODk0LDcgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjMwZGVsZXRlU2VsZWN0
aW9uV2l0aFNtYXJ0RGVsZXRlRWIKIF9fWk43V2ViQ29yZTZFZGl0b3IzMHBhc3RlQXNQbGFpblRl
eHRCeXBhc3NpbmdESFRNTEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzJndWVzc2VzRm9yVW5ncmFt
bWF0aWNhbFNlbGVjdGlvbkV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzNpbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbE9yZGVyZWRFdgorX19aTjdXZWJDb3JlNkVkaXRvcjM0aGFuZGxlQWNjZXB0ZWRE
aWN0YXRpb25BbHRlcm5hdGl2ZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3Iz
NHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNkVkaXRv
cjM1aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWRFdgogX19aTjdXZWJDb3JlNkVk
aXRvcjM1c2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2VFYgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI4MWRjZmI2
OWZlMDMwMDJhZGQ0M2FhOTE1NGY1M2M5MmVjNTVmY2QuLjcyYzgxZjMyZDA2YWFiYWY5NTg2MjJh
NWFhYTZmMjYwZDQzNDI4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU3MzAsNiArNTczMCwxNCBAQAogCQlDRTU0RkQzODEw
MTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAv
KiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUNFQTM5NDlDMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNo
U2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5j
cHAgKi87IH07CiAJCUNFQTM5NDlEMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENF
QTM5NDlCMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCAqLzsgfTsK
KwkJQ0VCODIzMTQxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMTIxNTIzREVG
NzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQuY3BwICovOyB9OworCQlDRUI4MjMxNTE1MjNE
RUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMTMxNTIzREVGNzAwMzk2MUMwIC8qIERpY3Rh
dGlvbkNvbW1hbmQuaCAqLzsgfTsKKwkJQ0VCODIzMUIxNTIzREYzNDAwMzk2MUMwIC8qIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMxNzE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJQ0VCODIzMUMxNTIzREYzNDAwMzk2
MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMTgxNTIzREYzNDAwMzk2MUMwIC8q
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovOyB9OworCQlDRUI4MjMxRDE1MjNE
RjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMxOTE1MjNERjM0MDAz
OTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAgKi87IH07CisJCUNFQjgy
MzFFMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMxQTE1MjNE
RjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oICovOyB9OworCQlD
RUI4MjMyMTE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMxRjE1
MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi87IH07CisJ
CUNFQjgyMzIyMTUyM0RGNTIwMDM5NjFDMCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMyMDE1
MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oICovOyB9OwogCQlD
RUNDRkMzQjE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUNDRkMzQTE0MTk3M0Q1
MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi87IH07CiAJCUNFRjQxOENFMTE3
OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyog
Vmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjExNzk2NzhDMDA5RDExMkMg
LyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
MjgxNCw2ICsxMjgyMiwxNCBAQAogCQlDRTVDQjFCMzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRT
ZW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRTZW5kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8q
IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY0hhc2hTZXROb2RlTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMxMjE1MjNERUY3MDAzOTYx
QzAgLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaWN0YXRpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0VCODIzMTMxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMxNzE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNFQjgyMzE4MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNFQjgyMzE5MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4
MjMxQTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQjgyMzFGMTUyM0RGNTIwMDM5
NjFDMCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMyMDE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNFQ0NGQzNBMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFRjQxOENDMTE3OTY3OEMwMDlEMTEyQyAvKiBW
aWV3cG9ydEFyZ3VtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWaWV3cG9ydEFyZ3VtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNF
RjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3cG9ydEFyZ3VtZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY1NjYsNiArMTY1ODIsOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFRDUwMURDOTBCMjQ5RjM5MDBBRTE4RDkgLyogbWFjICov
LAorCQkJCUNFQjgyMzFGMTUyM0RGNTIwMDM5NjFDMCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcCAqLywKKwkJCQlDRUI4MjMyMDE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5oICovLAogCQkJCTkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBl
bmROb2RlQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFw
cGVuZE5vZGVDb21tYW5kLmggKi8sCiAJCQkJOUI0MTcwNjMxMjU2NjJCMzAwNkIyOEZDIC8qIEFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgKi8sCkBAIC0xNjU4Niw2ICsxNjYwNCwxMiBAQAog
CQkJCTkzMzA5RDkwMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
LmggKi8sCiAJCQkJOTMzMDlEOTEwOTlFNjQ5MTAwNTZFNTgxIC8qIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDkyMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmggKi8sCisJCQkJQ0VCODIzMTcxNTIzREYzNDAwMzk2MUMwIC8qIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQ0VCODIzMTgxNTIzREYzNDAw
Mzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovLAorCQkJCUNFQjgy
MzE5MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCAq
LywKKwkJCQlDRUI4MjMxQTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbi5oICovLAorCQkJCUNFQjgyMzEyMTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25D
b21tYW5kLmNwcCAqLywKKwkJCQlDRUI4MjMxMzE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9u
Q29tbWFuZC5oICovLAogCQkJCTkzMzA5RDkzMDk5RTY0OTEwMDU2RTU4MSAvKiBFZGl0QWN0aW9u
LmggKi8sCiAJCQkJOTMzMDlEOTQwOTlFNjQ5MTAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmNwcCAq
LywKIAkJCQk5MzMwOUQ5NTA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdENvbW1hbmQuaCAqLywKQEAg
LTIxODQ1LDYgKzIxODY5LDcgQEAKIAkJCQk1OTMwOUExMzExRjRBRTZBMDAyNTA2MDMgLyogRGV2
aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUE4RjFENjEx
QTY5NTEzMDAxQUMzNEEgLyogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1OUE4NUVBNDExOUQ2OEVDMDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0VCODIzMUUxNTIzREYzNDAwMzk2MUMwIC8qIERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5
MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg5ODc4NTUzMTIyQ0EwNjQwMDNBQUJEQSAvKiBEaXJlY3RvcnlFbnRyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODkzQzQ4MDExMjQ4QkQzQTAwMkIzRDg2IC8qIERpcmVjdG9yeUVudHJ5U3luYy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDY1MCwxMSArMjQ2NzUsMTMgQEAKIAkJCQlGRDUzNzM1MzEz
N0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTMyQjlD
MTUxN0MwQjIwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFOTNGNDUxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQkNFOTNGNTExNTE3RERDRDAwOENDRjc0IC8qIFJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMx
N0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGODlB
NDIxNTE4RkRFQTAwRTU0N0I1IC8qIFRpbGVkQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkI3OEFEMkUxNTFCRjVFNjAwRkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcxRTYyM0QxMTUxRjcyQTYwMDM2RTJGNCAvKiBTVkdBbmltYXRlZEludGVnZXJPcHRp
b25hbEludGVnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFQjgyMzE1MTUyM0RFRjcwMDM5NjFD
MCAvKiBEaWN0YXRpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRUI4MjMxQzE1MjNE
RjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDRUI4MjMxRTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0VCODIzMjIxNTIzREY1MjAwMzk2MUMw
IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjc2NDUs
NiArMjc2NzIsMTAgQEAKIAkJCQlCQ0U5M0Y1MzE1MTdFMEIwMDA4Q0NGNzQgLyogUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDODVGMjNGMTUxOTE4
NzMwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzFFNjIzRDAxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFs
SW50ZWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRUI4MjMxNDE1MjNERUY3MDAzOTYxQzAg
LyogRGljdGF0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRUI4MjMxQjE1MjNE
RjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUNFQjgyMzFEMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFQjgyMzIxMTUyM0RGNTIwMDM5
NjFDMCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5jcHAKaW5kZXggYjRmOTk5NGRiNGVmNmFlY2ZkOGM1
Njc5MzBiODE3Nzg4ZWViZDYxYS4uNTNkNDNlNGVhYjU2MDZhNmNjNjVjNzhiM2Y3ZmVhM2IzMzQx
Y2YwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuY3BwCkBAIC0xMjMsNiArMTIz
LDE0IEBAIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjCiB7CiB9CiAKK0RvY3VtZW50TWFya2VyOjpE
b2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIFBhc3NSZWZQdHI8RG9jdW1lbnRNYXJrZXJEZXRhaWxzPiBkZXRhaWxz
KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQor
ICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICwgbV9kZXRhaWxzKGRldGFpbHMpCit7
Cit9CisKIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQgZGVsdGEpCiB7CiAg
ICAgbV9zdGFydE9mZnNldCArPSBkZWx0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgK
aW5kZXggNDFlZDg0ODM2NDBkY2U1Zjk5MWZjNzM2YWMzM2JkN2U1NmU5NjI0NS4uYzFlNzM4ZDQz
Njk1MWQ2ZTcxNDQ4YTAwZjAwOTk1NmNkZTRiNzdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyLmgKQEAgLTYzLDcgKzYzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gcmFuZ2UgdGhh
dCBiZWFycyB0aGlzIG1hcmtlci4gSW4gc29tZSBwbGF0Zm9ybXMsIGlmIHRoZSB1c2VyIGxhdGVy
IGluc2VydHMgdGhlIHNhbWUgb3JpZ2luYWwKICAgICAgICAgLy8gd29yZCBhZ2FpbiBhdCB0aGlz
IHBvc2l0aW9uLCBpdCB3aWxsIG5vdCBiZSBhdXRvY29ycmVjdGVkIGFnYWluLiBUaGUgZGVzY3Jp
cHRpb24gb2YgdGhpcwogICAgICAgICAvLyBtYXJrZXIgaXMgdGhlIG9yaWdpbmFsIHdvcmQgYmVm
b3JlIGF1dG9jb3JyZWN0aW9uIHdhcyBhcHBsaWVkLgotICAgICAgICBEZWxldGVkQXV0b2NvcnJl
Y3Rpb24gPSAxIDw8IDgKKyAgICAgICAgRGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gMSA8PCA4LAor
ICAgICAgICAvLyBUaGlzIG1hcmtlciBpbmRpY2F0ZXMgdGhhdCB0aGUgcmFuZ2Ugb2YgdGV4dCBz
cGFubmVkIGJ5IHRoZSBtYXJrZXIgaXMgZW50ZXJlZCBieSB2b2ljZSBkaWN0YXRpb24sCisgICAg
ICAgIC8vIGFuZCBpdCBoYXMgYWx0ZXJuYXRpdmUgdGV4dC4KKyAgICAgICAgRGljdGF0aW9uQWx0
ZXJuYXRpdmVzID0gMSA8PCA5CiAgICAgfTsKIAogICAgIGNsYXNzIE1hcmtlclR5cGVzIHsKQEAg
LTg1LDcgKzg4LDcgQEAgcHVibGljOgogICAgIGNsYXNzIEFsbE1hcmtlcnMgOiBwdWJsaWMgTWFy
a2VyVHlwZXMgewogICAgIHB1YmxpYzoKICAgICAgICAgQWxsTWFya2VycygpCi0gICAgICAgICAg
ICA6IE1hcmtlclR5cGVzKFNwZWxsaW5nIHwgR3JhbW1hciB8IFRleHRNYXRjaCB8IFJlcGxhY2Vt
ZW50IHwgQ29ycmVjdGlvbkluZGljYXRvciB8IFJlamVjdGVkQ29ycmVjdGlvbiB8IEF1dG9jb3Jy
ZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRGVsZXRlZEF1dG9jb3JyZWN0aW9uKQor
ICAgICAgICAgICAgOiBNYXJrZXJUeXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2gg
fCBSZXBsYWNlbWVudCB8IENvcnJlY3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24g
fCBBdXRvY29ycmVjdGVkIHwgU3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29y
cmVjdGlvbiB8IERpY3RhdGlvbkFsdGVybmF0aXZlcykKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgfTsKQEAgLTk0LDYgKzk3LDcgQEAgcHVibGljOgogICAgIERvY3VtZW50TWFya2VyKE1hcmtl
clR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogICAgIERv
Y3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIERvY3VtZW50TWFya2Vy
KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0aXZlTWF0
Y2gpOworICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIFBhc3NSZWZQdHI8RG9jdW1lbnRNYXJrZXJEZXRhaWxzPik7
CiAKICAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBlMDY3
MmQwZDNkMWZkOGRiN2FlYTRiZDkxZDM2ZjRjNjdlMmFkYWNkLi40YmMyMTBjZTUwMjY5ZTg5YWE2
N2JhNWUwOWE2NmMyYzc3NTY4NDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
dGFjaCgpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOworICAgIHZvaWQgYWRkTWFya2VyKE5v
ZGUqLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOwogICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2Vy
KFJhbmdlKiwgYm9vbCBhY3RpdmVNYXRjaCk7CiAKICAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUq
IHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2Rl
LCBpbnQgZGVsdGEpOwpAQCAtODAsOCArODEsNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKLQog
ICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxpc3Q7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTWFya2VyTGlzdCo+IE1hcmtlck1hcDsK
ICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAppbmRleCAxZGZmYjAxNGVlZDVmNmIzMTA0NTM3OTcz
MGQ4NjM1ZjkxNmYxZGY3Li5hMWQyNTdmYjExZjUwZTU4ZjZiNzJlYWQ3NDJlZjdlMmEwNzYzNGUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcApAQCAtNTcsNiArNTcsMTEgQEAgUGFzc1JlZlB0
cjxUZXh0RXZlbnQ+IFRleHRFdmVudDo6Y3JlYXRlRm9yRHJvcChQYXNzUmVmUHRyPEFic3RyYWN0
Vmlldz4gdmlldywgY28KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCh2aWV3LCBk
YXRhLCBUZXh0RXZlbnRJbnB1dERyb3ApKTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IFRl
eHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3
LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEsIGRpY3RhdGlvbkFsdGVybmF0aXZlcykpOworfQorCiBU
ZXh0RXZlbnQ6OlRleHRFdmVudCgpCiAgICAgOiBtX2lucHV0VHlwZShUZXh0RXZlbnRJbnB1dEtl
eWJvYXJkKQogICAgICwgbV9zaG91bGRTbWFydFJlcGxhY2UoZmFsc2UpCkBAIC04NSw2ICs5MCwx
NiBAQCBUZXh0RXZlbnQ6OlRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywg
Y29uc3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUAogewogfQogCitUZXh0RXZlbnQ6OlRleHRFdmVu
dChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25z
dCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0
aXZlcykKKyAgICA6IFVJRXZlbnQoZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50LCB0cnVlLCB0
cnVlLCB2aWV3LCAwKQorICAgICwgbV9pbnB1dFR5cGUoVGV4dEV2ZW50SW5wdXREaWN0YXRpb24p
CisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fc2hvdWxkU21hcnRSZXBsYWNlKGZhbHNlKQor
ICAgICwgbV9zaG91bGRNYXRjaFN0eWxlKGZhbHNlKQorICAgICwgbV9kaWN0YXRpb25BbHRlcm5h
dGl2ZXMoZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworfQorCiBUZXh0RXZlbnQ6On5UZXh0RXZl
bnQoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCmluZGV4IDliMDg3N2FkNGZlY2IyMWFkZmQ3
NDhjYTMxZDNjYzg3NmNmODJhMDkuLjFiY2RkNDUwODNjYTg2MTMzZjMxM2IzN2EwOWU1NGYyYWQw
Mzg1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYg
VGV4dEV2ZW50X2gKICNkZWZpbmUgVGV4dEV2ZW50X2gKIAorI2luY2x1ZGUgIkRpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUZXh0RXZlbnRJbnB1dFR5cGUuaCIKICNp
bmNsdWRlICJVSUV2ZW50LmgiCiAKQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvclBsYWluVGV4
dFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEs
IGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dEV2ZW50PiBjcmVhdGVGb3JGcmFnbWVudFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2
aWV3LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRhdGEsIGJvb2wgc2hvdWxkU21hcnRS
ZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckRyb3AoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcs
IGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVu
dD4gY3JlYXRlRm9yRGljdGF0aW9uKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgU3Ry
aW5nJiBkYXRhLCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CiAKICAgICAgICAgdmlydHVhbCB+VGV4dEV2ZW50KCk7CiAg
ICAgCkBAIC01NiwxMCArNTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IGlzQmFja1RhYigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0
QmFja1RhYjsgfQogICAgICAgICBib29sIGlzUGFzdGUoKSBjb25zdCB7IHJldHVybiBtX2lucHV0
VHlwZSA9PSBUZXh0RXZlbnRJbnB1dFBhc3RlOyB9CiAgICAgICAgIGJvb2wgaXNEcm9wKCkgY29u
c3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXREcm9wOyB9CisgICAgICAg
IGJvb2wgaXNEaWN0YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBUZXh0RXZl
bnRJbnB1dERpY3RhdGlvbjsgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRTbWFydFJlcGxhY2U7IH0KICAgICAgICAgYm9vbCBzaG91
bGRNYXRjaFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYXRjaFN0eWxlOyB9CiAgICAg
ICAgIERvY3VtZW50RnJhZ21lbnQqIHBhc3RpbmdGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFzdGluZ0ZyYWdtZW50LmdldCgpOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3QgeyByZXR1
cm4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZXM7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFRl
eHRFdmVudCgpOwpAQCAtNjcsNiArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwg
VGV4dEV2ZW50SW5wdXRUeXBlID0gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CiAgICAgICAgIFRl
eHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwKICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxk
U21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOworICAgICAgICBUZXh0RXZlbnQo
UGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3Rv
cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsK
IAogICAgICAgICBUZXh0RXZlbnRJbnB1dFR5cGUgbV9pbnB1dFR5cGU7CiAgICAgICAgIFN0cmlu
ZyBtX2RhdGE7CkBAIC03NCw2ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fcGFzdGluZ0ZyYWdtZW50OwogICAgICAgICBib29s
IG1fc2hvdWxkU21hcnRSZXBsYWNlOwogICAgICAgICBib29sIG1fc2hvdWxkTWF0Y2hTdHlsZTsK
KyAgICAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaAppbmRleCA5OGJmMzQzMmQ4YjQ2OTM3ODJlYWJm
Y2MzODBhYWZlZWRhMDBhMmVlLi44YmUyMzNjNGJmZjBiYTVmNWYyZjk2ZDUwMzBkMTg4YjVjNTZi
YTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50SW5wdXRUeXBlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudElucHV0VHlwZS5oCkBAIC0zNSw2ICsz
NSw3IEBAIGVudW0gVGV4dEV2ZW50SW5wdXRUeXBlIHsKICAgICBUZXh0RXZlbnRJbnB1dEJhY2tU
YWIsCiAgICAgVGV4dEV2ZW50SW5wdXRQYXN0ZSwKICAgICBUZXh0RXZlbnRJbnB1dERyb3AsCisg
ICAgVGV4dEV2ZW50SW5wdXREaWN0YXRpb24sCiAgICAgVGV4dEV2ZW50SW5wdXRPdGhlciwKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0YTU2NjQ2MTgzYzQ1NWM0ZjRiMjAyOTZhMDE5ZWMwZjI4
MWExZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5j
bHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lKiBmcmFtZSwgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlciogc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciwgRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyKiBkaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpCis6
IG1fZnJhbWUoZnJhbWUpCissIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihzcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyKQorLCBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cihkaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpCit7Cit9CisKK3ZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRp
b25zIG9wdGlvbnMpCit7CisgICAgcmVzcG9uZFRvQ2FyZXRBdEVuZE9mV29yZChvbGRTZWxlY3Rp
b24sIG9wdGlvbnMpOworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb0NhcmV0QXRFbmRPZldvcmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
LCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQoreworICAgIFZp
c2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkpOworICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVu
dFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBW
aXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0
KCk7CisgICAgLy8gQ3JlYXRpbmcgYSBWaXNpYmxlIHBvc2l0aW9uIHRyaWdnZXJzIGEgbGF5b3V0
IGFuZCB0aGVyZSBpcyBubworICAgIC8vIGd1YXJhbnRlZSB0aGF0IHRoZSBzZWxlY3Rpb24gaXMg
c3RpbGwgdmFsaWQuCisgICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0g
ZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAg
aWYgKHNlbGVjdGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVw
RXF1aXZhbGVudCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5v
ZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50
TWFya2VyKj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zv
cihub2RlKTsKKyAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICAK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAg
Y29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICgh
bWFya2VyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZElnbm9yZU90aGVyTWFya2VycyA9IGZhbHNlOworICAgICAgICBtX3NwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXItPnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBvc2l0
aW9uLCAmc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKTsKKyAgICAgICAgCisgICAgICAgIC8vIElu
IHNvbWUgc2l0dWF0aW9uLCBoYW5kbGluZyBhIG1hcmtlciB3b3VsZCBwcmhpYml0IHRoZSBwcm9w
ZXIgaGFuZGxpbmcgb2Ygb3RoZXIgbWFya2Vycy4KKyAgICAgICAgLy8gU28gaWYgc2hvdWxkSWdu
b3JlT3RoZXJNYXJrZXJzIGlzIHNldCB0byB0cnVlLCB3ZSBicmVhayB0aGUgbG9vcC4KKyAgICAg
ICAgaWYgKHNob3VsZElnbm9yZU90aGVyTWFya2VycykKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZyYW1lU2VsZWN0aW9uOjpEaWN0YXRpb25U
cmlnZ2VyZWQpKSB7CisgICAgICAgICAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci0+cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoKm1hcmtlciwgcG9zaXRpb24sICZzaG91bGRJ
Z25vcmVPdGhlck1hcmtlcnMpOworICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZU90aGVyTWFy
a2VycykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNzQWx0ZXJuYXRpdmVUZXh0VUkoKQor
eworICAgIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci0+ZGlzbWlzcyhSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgbV9kaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXItPmRpc21pc3MoKTsKK30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdG9wUGVuZGluZ0FsdGVybmF0aXZlcyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uICZvbGRTZWxlY3Rpb24pCit7CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAgICBtX2RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci0+c3RvcFBlbmRpbmdBbHRlcm5hdGl2ZSgpOworfQorICAg
IAorRmxvYXRSZWN0IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KGNvbnN0IFNjcm9sbFZpZXcq
IHZpZXcsIGNvbnN0IFJhbmdlKiByYW5nZSkKK3sKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CisgICAg
cmFuZ2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7
CisgICAgc2l6ZV90IHNpemUgPSB0ZXh0UXVhZHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUodGV4dFF1YWRz
W2ldLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
SW50UmVjdChib3VuZGluZ1JlY3QpKTsKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZVRl
eHRJblJhbmdlKGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgUmFuZ2UqIHJhbmdlLCBGcmFtZSogZnJh
bWUsIGJvb2wgZm9yU3BlbGxpbmdDb3JyZWN0aW9uKQoreworICAgIGlmICghcmFuZ2UgfHwgIWZy
YW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSByYW5nZS0+Y2xvbmVSYW5nZShlYyk7Cisg
ICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJh
bmdlLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKHJhbmdlLT5lbmRQ
b3NpdGlvbigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0ICdyYW5n
ZScsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KKyAgICAvLyBIb3dldmVy
LCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgJ3JhbmdlJyBp
cyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSBy
ZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgJ3Jhbmdl
JworICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmlu
ZyBwYXJhZ3JhcGguIFdlIHVzZSByZXBsYWNlbWVudFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAg
ICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQs
IHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9t
IHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mICdyYW5nZScu
CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jh
bmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5k
b2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSByYW5nZS0+c3Rh
cnRQb3NpdGlvbigpOworICAgIHJlcGxhY2VtZW50U3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFu
Z2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2Rl
KCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv
LyBUYWtlIG5vdGUgb2YgdGhlIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSByYW5nZSB0byBiZSByZXBs
YWNlZCwgc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9v
ayBwbGFjZS4KKyAgICBpbnQgcmVwbGFjZW1lbnRTdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyZXBsYWNlbWVudFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhB
c1JhbmdlLmdldCgpKTsKKworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxl
ciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91
bmQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlLT5jbG9uZVJh
bmdlKGVjKTsKKyAgICBpZiAoZm9yU3BlbGxpbmdDb3JyZWN0aW9uKQorICAgICAgICBhcHBseUNv
bW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2Vk
LCBuZXdUZXh0KSk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFuZ2UsIG5ld1RleHQpOworICAg
ICAgICBpZiAoZnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKHJhbmdlLCBGcmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkIHwgRnJh
bWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nIHwgRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5
bGUpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCksIGZyYWdtZW50LCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpQcmV2ZW50TmVzdGluZywgRWRpdEFjdGlvblBhc3RlKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHJlcGxhY2VtZW50U3Rh
cnRPZmZzZXRJblBhcmFncmFwaCwgIG5ld1RleHQubGVuZ3RoKCkpOworCisgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KKyAgICBTdHJpbmcgdGV4dEFmdGVyUmVw
bGFjZW1lbnQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CisgICAgaWYgKHRl
eHRBZnRlclJlcGxhY2VtZW50ICE9IG5ld1RleHQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiByZXBsYWNlbWVudFJhbmdlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ODcyYzA0ZGQ5
YWYwZTQxOTdjNzNhZGI0MzRhZjdmNzc0NzhmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gKKyNkZWZpbmUgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcl9oCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7CitjbGFzcyBS
YW5nZTsKK2NsYXNzIEZyYW1lOworY2xhc3MgU2Nyb2xsVmlldzsKK2NsYXNzIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI7CisKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIoRnJhbWUqLCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKiwgRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyKik7CisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246
OlNldFNlbGVjdGlvbk9wdGlvbnMpOworICAgIHZvaWQgZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJ
KCk7CisgICAgdm9pZCBzdG9wUGVuZGluZ0FsdGVybmF0aXZlcyhjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24pOworcHJpdmF0ZToKKyAgICB2b2lkIHJlc3BvbmRUb0NhcmV0QXRF
bmRPZldvcmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVj
dGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgCisgICAgRnJhbWUqIG1fZnJhbWU7Cisg
ICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciogbV9zcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOworICAgIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciogbV9kaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXI7Cit9OworCitGbG9hdFJlY3QgcmFuZ2VCb3VuZGluZ0JveElu
Um9vdFZpZXcoY29uc3QgU2Nyb2xsVmlldyosIGNvbnN0IFJhbmdlKik7CisKKy8vIFVwb24gc3Vj
Y2VzcywgcmV0dXJuIHZhbHVlIGNvbnRhaW5zIHRoZSByYW5nZSBvZiBuZXdUZXh0LiBPdGhlcndp
c2UsIGl0IHJldHVybnMgbnVsbC4KK1Bhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VUZXh0SW5SYW5n
ZShjb25zdCBTdHJpbmcmIG5ld1RleHQsIFJhbmdlKiwgRnJhbWUqLCBib29sIGZvclNwZWxsaW5n
Q29ycmVjdGlvbik7Cit9CisKKyNlbmRpZiAvLyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5k
ZXggODMwZWFjZjZmZWVkNmZlNGViM2QwNjQzZWQwMzFkOWQ3NDI0OTBkZS4uMjQyNDY3NzA2ZjMw
NWE3MDhhMmM0ZmY3OWE1NDBmMzQ2Nzg3YjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTQ2MSw2ICs0NjEsMTIgQEAgdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0VGV4dEludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4g
bm9kZSwgdW5zaWduZWQgb2YKICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgdGV4dCkpOwogfQogCit2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRUZXh0V2l0aE1hcmtlcnNJbnRvTm9kZShQ
YXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQoreworICAgIGlmICghdGV4
dC5pc0VtcHR5KCkpCisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIHRleHQsIG1hcmtlcnMpKTsKK30K
Kwogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NSZWZQ
dHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUo
bm9kZSwgb2Zmc2V0LCBjb3VudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5oCmluZGV4IGY3ZDE3NDk0Mzk0MGI1ZTljNTdmMjUzYTA0NmYyZjg0NTE4
ZmM5YzAuLmIwNzk3NzliZTVlMGQ4NzJkOWNkODA4OThhZjg1MThkY2ZkYjc3NzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKQEAgLTMzLDYgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKIGNs
YXNzIEVkaXRpbmdTdHlsZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgU3R5bGVkRWxlbWVu
dDsKQEAgLTgyLDYgKzgzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzQ3JlYXRl
TGlua0NvbW1hbmQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRGljdGF0aW9uQ29tbWFuZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9u
SW5kaWNhdG9yKGJvb2wpOwpAQCAtMTExLDYgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihib29sIHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50
ID0gZmFsc2UpOwogICAgIHZvaWQgaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgdm9pZCBpbnNlcnRU
ZXh0SW50b05vZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJp
bmcmIHRleHQpOworICAgIHZvaWQgaW5zZXJ0VGV4dFdpdGhNYXJrZXJzSW50b05vZGUoUGFzc1Jl
ZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZl
Y3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOwogICAgIHZvaWQgbWVyZ2VJZGVudGljYWxF
bGVtZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2
b2lkIHJlYmFsYW5jZVdoaXRlc3BhY2UoKTsKICAgICB2b2lkIHJlYmFsYW5jZVdoaXRlc3BhY2VB
dChjb25zdCBQb3NpdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMjM1M2Rm
NWVlMGVmNTBhMWFhYmFjYjhkMzUwM2Y2ZWU1OWRkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
CitEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzKGNvbnN0IFN0
cmluZyYgb3JpZ2luYWxUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorICAgIDogbV9k
aWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpCisgICAgLCBtX29yaWdpbmFsVGV4dChv
cmlnaW5hbFRleHQpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGljdGF0aW9uTWFya2VyRGV0YWlscz4g
RGljdGF0aW9uTWFya2VyRGV0YWlsczo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0
LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RGljdGF0aW9uTWFya2VyRGV0YWlscyhvcmlnaW5hbFRleHQsIGRpY3RhdGlvbkNvbnRleHQpKTsK
K30KKyAgICAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKworRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoRnJhbWUq
IGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fdGltZXIodGhpcywgJkRpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6dGltZXJGaXJlZCkKKyAgICAsIG1faXNVSUFjdGl2
ZShmYWxzZSkKK3sKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNv
bnN0IFBvc2l0aW9uJiBlbmRPZldvcmQsIGJvb2wqIHNob3VsZElnbm9yZU90aGVyTWFya2VycykK
K3sKKyAgICBpZiAobWFya2VyLnR5cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0
ZXJuYXRpdmVzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Piht
YXJrZXIuZW5kT2Zmc2V0KCkpICE9IGVuZE9mV29yZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZC5jb250YWluZXJO
b2RlKCk7CisgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIu
ZW5kT2Zmc2V0KCkpOworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFu
Z2UuZ2V0KCkpOworCisgICAgY29uc3QgRGljdGF0aW9uTWFya2VyRGV0YWlscyogbWFya2VyRGV0
YWlscyA9IHN0YXRpY19jYXN0PGNvbnN0IERpY3RhdGlvbk1hcmtlckRldGFpbHMqPihtYXJrZXIu
ZGV0YWlscygpKTsKKyAgICBpZiAoIW1hcmtlckRldGFpbHMpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGV0YWlscy0+b3JpZ2luYWxUZXh0KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2FsdGVybmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRleHQg
PSB3b3JkUmFuZ2U7CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5mby5kaWN0YXRpb25Db250ZXh0ID0g
bWFya2VyRGV0YWlscy0+ZGljdGF0aW9uQ29udGV4dCgpOworICAgIGNvbnN0IGRvdWJsZSBkaWN0
YXRpb25BbHRlcm5hdGl2ZVVJRGVsYXkgPSAwLjM7CisgICAgbV90aW1lci5zdGFydE9uZVNob3Qo
ZGljdGF0aW9uQWx0ZXJuYXRpdmVVSURlbGF5KTsKKyAgICAqc2hvdWxkSWdub3JlT3RoZXJNYXJr
ZXJzID0gdHJ1ZTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnN0
b3BUaW1lcigpCit7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5m
by5yYW5nZU9mRGljdGF0ZWRUZXh0LmNsZWFyKCk7CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5mby5k
aWN0YXRpb25Db250ZXh0ID0gMDsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI6OmRpc21pc3MoKQoreworICAgIGlmICghbV9pc1VJQWN0aXZlKQorICAgICAgICByZXR1
cm47CisgICAgbV9pc1VJQWN0aXZlID0gZmFsc2U7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAg
ICBjbGllbnQoKS0+ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKTsKK30KKwordm9pZCBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUoKQor
eworICAgIHN0b3BUaW1lcigpOworICAgIGRpc21pc3MoKTsKK30KKwordm9pZCBEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnRpbWVyRmlyZWQoVGltZXI8RGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyPiopCit7CisgICAgaWYgKCFtX2FsdGVybmF0aXZlVUlJbmZvLnJhbmdlT2ZE
aWN0YXRlZFRleHQgfHwgIW1fYWx0ZXJuYXRpdmVVSUluZm8uZGljdGF0aW9uQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdC
b3hJblJvb3RWaWV3KG1fZnJhbWUtPnZpZXcoKSwgbV9hbHRlcm5hdGl2ZVVJSW5mby5yYW5nZU9m
RGljdGF0ZWRUZXh0LmdldCgpKTsKKyAgICBtX2lzVUlBY3RpdmUgPSB0cnVlOworICAgIGlmICgh
Ym91bmRpbmdCb3guaXNFbXB0eSgpICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+c2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdCb3gsIG1fYWx0ZXJuYXRpdmVVSUluZm8u
ZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK0VkaXRvckNsaWVudCogRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBt
X2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKwordm9pZCBEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoY29uc3QgU3Ry
aW5nJiBhbHRlcm5hdGl2ZSkKK3sKKyAgICBSYW5nZSogcmFuZ2VUb1JlcGxhY2UgPSBtX2FsdGVy
bmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRleHQuZ2V0KCk7CisgICAgaWYgKCFyYW5nZVRv
UmVwbGFjZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJhbmdlVG9SZXBsYWNlLT5vd25lckRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNVSUFjdGl2ZSA9IGZhbHNlOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHJlcGxhY2VUZXh0SW5SYW5nZShh
bHRlcm5hdGl2ZSwgcmFuZ2VUb1JlcGxhY2UsIG1fZnJhbWUsIGZhbHNlKTsKKyAgICBpZiAocmVw
bGFjZW1lbnRSYW5nZSkgeworICAgICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtl
ckNvbnRyb2xsZXIgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7CisgICAgICAgIG1hcmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihyZXBs
YWNlbWVudFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CisgICAgfQorICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8ucmFuZ2VPZkRpY3RhdGVkVGV4dC5j
bGVhcigpOworICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8uZGljdGF0aW9uQ29udGV4dCA9IDA7Cit9
CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2
ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlcikKK3sKKyAgICBpZiAoIWNs
aWVudCgpIHx8ICFtYXJrZXIgfHwgbWFya2VyLT50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRGljdGF0
aW9uTWFya2VyRGV0YWlscyogbWFya2VyRGV0YWlscyA9IHN0YXRpY19jYXN0PGNvbnN0IERpY3Rh
dGlvbk1hcmtlckRldGFpbHMqPihtYXJrZXItPmRldGFpbHMoKSk7CisgICAgY2xpZW50KCktPnJl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhtYXJrZXJEZXRhaWxzLT5kaWN0YXRpb25Db250ZXh0
KCkpOworfQorI2VuZGlmIC8vIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOTY2MzkwOWY0NGU4NmExN2U0OWE1NWUyNGMyYzk1NTFmOWVl
NDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXJfaAorI2RlZmluZSBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXJfaAor
CisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyNkZWZpbmUg
VU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSA7CisjZWxzZQorI2RlZmluZSBVTkxFU1NfRU5B
QkxFRChmdW5jdGlvbkJvZHkpIGZ1bmN0aW9uQm9keQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3MgRnJhbWU7CisKK2NsYXNzIERpY3Rh
dGlvbk1hcmtlckRldGFpbHMgOiBwdWJsaWMgRG9jdW1lbnRNYXJrZXJEZXRhaWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaWN0YXRpb25NYXJrZXJEZXRhaWxzPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOwor
ICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5h
bFRleHQ7IH0KKyAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9kaWN0YXRpb25Db250ZXh0OyB9Citwcml2YXRlOgorICAgIERpY3RhdGlvbk1hcmtlckRldGFp
bHMoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
OworICAgIHVpbnQ2NF90IG1fZGljdGF0aW9uQ29udGV4dDsKKyAgICBTdHJpbmcgbV9vcmlnaW5h
bFRleHQ7Cit9OworCitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisKKyAgICB2b2lk
IHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiwgY29uc3Qg
UG9zaXRpb24mIGVuZE9mV29yZCwgYm9vbCogc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKSBVTkxF
U1NfRU5BQkxFRCh7VU5VU0VEX1BBUkFNKGVuZE9mV29yZCk7IFVOVVNFRF9QQVJBTShzaG91bGRJ
Z25vcmVPdGhlck1hcmtlcnMpO30pCisKKyAgICB2b2lkIGRpc21pc3MoKSBVTkxFU1NfRU5BQkxF
RCh7IH0pCisgICAgdm9pZCBzdG9wUGVuZGluZ0FsdGVybmF0aXZlKCkgVU5MRVNTX0VOQUJMRUQo
eyB9KQorICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFs
dGVybmF0aXZlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShhbHRlcm5hdGl2ZSk7IH0p
CisgICAgdm9pZCByZW1vdmVBbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJr
ZXIqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMp
Citwcml2YXRlOgorICAgIHN0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZVVJSW5mbyB7IAorICAg
ICAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZVVJSW5mbygpIDogZGljdGF0aW9uQ29udGV4dCgwKSB7
IH0KKyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZU9mRGljdGF0ZWRUZXh0OworICAgICAgICB1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0OworICAgIH07CisKKyAgICBFZGl0b3JDbGllbnQqIGNs
aWVudCgpOworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI+Kik7CisgICAgdm9pZCBzdG9wVGltZXIoKTsKKworICAgIEZyYW1lKiBtX2ZyYW1l
OworICAgIFRpbWVyPERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4gbV90aW1lcjsKKyAg
ICBEaWN0YXRpb25BbHRlcm5hdGl2ZVVJSW5mbyBtX2FsdGVybmF0aXZlVUlJbmZvOworICAgIGJv
b2wgbV9pc1VJQWN0aXZlOworI2VuZGlmCit9OworCisjdW5kZWYgVU5MRVNTX0VOQUJMRUQKKwor
fQorCisjZW5kaWYgLy8gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBkMThkMmRjYTdiMDVhNWY4NmNjZjZmNmYyNWFiZTUyODYwMzdjZjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24uY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb246OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24odWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgY29udGV4dCkKKzog
cmFuZ2VTdGFydChzdGFydCkKKywgcmFuZ2VMZW5ndGgobGVuZ3RoKQorLCBkaWN0YXRpb25Db250
ZXh0KGNvbnRleHQpCit7IH0KKyAgICAKK0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb246OkRp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24oKQorOiByYW5nZVN0YXJ0KDApCissIHJhbmdlTGVu
Z3RoKDApCissIGRpY3RhdGlvbkNvbnRleHQoMCkKK3sgfQorCitEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKGNvbnN0IERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24mIGFub3RoZXIpCis6IHJhbmdlU3RhcnQoYW5vdGhlci5yYW5nZVN0
YXJ0KQorLCByYW5nZUxlbmd0aChhbm90aGVyLnJhbmdlTGVuZ3RoKQorLCBkaWN0YXRpb25Db250
ZXh0KGFub3RoZXIuZGljdGF0aW9uQ29udGV4dCkKK3sgfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMzYmE2MDE1YWU3NTJjM2RiNTg0NmZmM2I1ZWUzZmFlZmRjZDYzMDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24uaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uX2gKKyNkZWZp
bmUgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKKy8vIFNvbWUgcGxh
dGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3RpbmcgYWx0ZXJuYXRpdmUgZGljdGF0aW9uIHRl
eHQuCisjZGVmaW5lIFdURl9VU0VfRElDVEFUSU9OX0FMVEVSTkFUSVZFUyAxCisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04p
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uIHsKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKHVpbnQ2NF90IHN0YXJ0LCB1
aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IGNvbnRleHQpOworICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24oKTsKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKGNvbnN0IERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mIGFub3RoZXIpOworICAgIHVpbnQ2NF90IHJhbmdl
U3RhcnQ7CisgICAgdWludDY0X3QgcmFuZ2VMZW5ndGg7CisgICAgdWludDY0X3QgZGljdGF0aW9u
Q29udGV4dDsKK307CisKK30KKworI2VuZGlmIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2RhZmI1ZTVmMmU3YzAyMWI3ZTBlZTY1Y2FkOGRmMmQxZTBmOWU4MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKQEAg
LTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkNvbW1hbmQuaCIK
KworI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAiRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5oIgorI2luY2x1ZGUgIkluc2VydFRleHRDb21t
YW5kLmgiCisjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0RpY3RhdGlvbkNvbW1hbmQ6OkRpY3RhdGlvbkNvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uPiYgYWx0ZXJuYXRpdmVzKQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1l
bnQpCisgICAgLCBtX3RleHRUb0luc2VydCh0ZXh0KQorICAgICwgbV9hbHRlcm5hdGl2ZXMoYWx0
ZXJuYXRpdmVzKQoreworfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBhbHRlcm5hdGl2ZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbkZvckluc2VydGlvbikKK3sKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKworICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7
CisgICAgYm9vbCBjaGFuZ2VTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uICE9IHNlbGVjdGlv
bkZvckluc2VydGlvbjsKKworICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4dDsKKyAgICBpZiAoTm9k
ZSogc3RhcnROb2RlID0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9k
ZSgpKSB7CisgICAgICAgIGlmIChzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgewor
ICAgICAgICAgICAgLy8gU2VuZCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gVGhlIGV2ZW50IGhh
bmRsZXIgd2lsbCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKKyAgICAgICAg
ICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2dCwg
ZWMpOworICAgICAgICAgICAgbmV3VGV4dCA9IGV2dC0+dGV4dCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgUmVmUHRyPERpY3RhdGlvbkNvbW1hbmQ+IGNtZDsKKyAgICBpZiAobmV3VGV4dCA9
PSB0ZXh0KQorICAgICAgICBjbWQgPSBEaWN0YXRpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQs
IG5ld1RleHQsIGFsdGVybmF0aXZlcyk7CisgICAgZWxzZQorICAgICAgICAvLyBJZiB0aGUgdGV4
dCB3YXMgbW9kaWZpZWQgYmVmb3JlIGluc2VydGlvbiwgdGhlIGxvY2F0aW9uIG9mIGRpY3RhdGlv
biBhbHRlcm5hdGl2ZXMKKyAgICAgICAgLy8gd2lsbCBub3QgYmUgdmFsaWQgYW55bW9yZS4gV2Ug
d2lsbCBqdXN0IGRyb3AgdGhlIGFsdGVybmF0aXZlcy4KKyAgICAgICAgY21kID0gRGljdGF0aW9u
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBuZXdUZXh0LCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbj4oKSk7CisKKyAgICBpZiAoY2hhbmdlU2VsZWN0aW9uKSB7CisgICAgICAg
IGNtZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKKyAgICAg
ICAgY21kLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKKyAgICB9
CisgICAgYXBwbHlDb21tYW5kKGNtZCk7CisgICAgaWYgKGNoYW5nZVNlbGVjdGlvbikgeworICAg
ICAgICBjbWQtPnNldEVuZGluZ1NlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKTsKKyAgICAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbik7CisgICAg
fQorfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQoreworICAgIHVuc2lnbmVk
IG9mZnNldCA9IDA7CisgICAgc2l6ZV90IG5ld2xpbmU7CisgICAgd2hpbGUgKChuZXdsaW5lID0g
bV90ZXh0VG9JbnNlcnQuZmluZCgnXG4nLCBvZmZzZXQpKSAhPSBub3RGb3VuZCkgeworICAgICAg
ICBpZiAobmV3bGluZSAhPSBvZmZzZXQpCisgICAgICAgICAgICBpbnNlcnRUZXh0UnVuV2l0aG91
dE5ld2xpbmVzKG9mZnNldCwgbmV3bGluZSAtIG9mZnNldCk7CisgICAgICAgIGluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpOworICAgICAgICBvZmZzZXQgPSBuZXdsaW5lICsgMTsKKyAgICB9Cisg
ICAgaWYgKCFvZmZzZXQpCisgICAgICAgIGluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoMCwg
bV90ZXh0VG9JbnNlcnQubGVuZ3RoKCkpOworICAgIGVsc2UgeworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBtX3RleHRUb0luc2VydC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCAhPSBv
ZmZzZXQpCisgICAgICAgICAgICBpbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKG9mZnNldCwg
bGVuZ3RoIC0gb2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29tbWFuZDo6aW5z
ZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhzaXplX3QgbGluZVN0YXJ0LCBzaXplX3QgbGluZUxl
bmd0aCkKK3sKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGRvY3VtZW50TWFya2VyczsKKyAg
ICBjb2xsZWN0RGljdGF0aW9uTWFya2Vyc0luUmFuZ2UobGluZVN0YXJ0LCBsaW5lTGVuZ3RoLCBk
b2N1bWVudE1hcmtlcnMpOworICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4gY29tbWFuZCA9
IEluc2VydFRleHRDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV90ZXh0VG9JbnNlcnQuc3Vi
c3RyaW5nKGxpbmVTdGFydCwgbGluZUxlbmd0aCksIGRvY3VtZW50TWFya2Vycyk7CisgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoY29tbWFuZCwgZW5kaW5nU2VsZWN0aW9uKCkpOworfQorCit2
b2lkIERpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCit7CisgICAg
aWYgKCFjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKK30KKwordm9pZCBE
aWN0YXRpb25Db21tYW5kOjpjb2xsZWN0RGljdGF0aW9uTWFya2Vyc0luUmFuZ2Uoc2l6ZV90IHJh
bmdlU3RhcnQsIHNpemVfdCByYW5nZUxlbmd0aCwgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFy
a2VycykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWx0ZXJuYXRpdmVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mIGFs
dGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZXNbaV07CisgICAgICAgIGlmIChhbHRlcm5hdGl2ZS5y
YW5nZVN0YXJ0ID49IHJhbmdlU3RhcnQgJiYgKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBhbHRl
cm5hdGl2ZS5yYW5nZUxlbmd0aCkgPD0gcmFuZ2VTdGFydCArIHJhbmdlTGVuZ3RoKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBtYXJrZXJTdGFydE9mZnNldCA9IGFsdGVybmF0aXZlLnJhbmdlU3Rh
cnQgLSByYW5nZVN0YXJ0OworICAgICAgICAgICAgdW5zaWduZWQgbWFya2VyRW5kT2Zmc2V0ID0g
bWFya2VyU3RhcnRPZmZzZXQgKyBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aDsKKyAgICAgICAgICAg
IG1hcmtlcnMuYXBwZW5kKERvY3VtZW50TWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZXMsIG1hcmtlclN0YXJ0T2Zmc2V0LCBtYXJrZXJFbmRPZmZzZXQsIERpY3RhdGlv
bk1hcmtlckRldGFpbHM6OmNyZWF0ZShtX3RleHRUb0luc2VydC5zdWJzdHJpbmcoYWx0ZXJuYXRp
dmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgpLCBhbHRlcm5hdGl2ZS5kaWN0
YXRpb25Db250ZXh0KSkpOworICAgICAgICAgICAgbWFya2Vycy5hcHBlbmQoRG9jdW1lbnRNYXJr
ZXIoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24sIG1hcmtlclN0YXJ0T2Zm
c2V0LCBtYXJrZXJFbmRPZmZzZXQpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTFmMGEzOWJj
ZjhlYTFjYmVjZWQxYWY1YTI0Zjg3NWY2ZjVhMzdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmgKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpY3Rh
dGlvbkNvbW1hbmRfaAorI2RlZmluZSBEaWN0YXRpb25Db21tYW5kX2gKKworI2luY2x1ZGUgIkNv
bXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50TWFya2VyOwor
CitjbGFzcyBEaWN0YXRpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRUZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGFsdGVybmF0
aXZlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHZpcnR1YWwgYm9vbCBpc0RpY3Rh
dGlvbkNvbW1hbmQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Citwcml2YXRlOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERpY3RhdGlvbkNvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24+JiBhbHRlcm5hdGl2ZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IERpY3RhdGlvbkNvbW1hbmQoZG9jdW1lbnQsIHRleHQsIGFsdGVybmF0aXZlcykpOworICAgIH0K
KworICAgIERpY3RhdGlvbkNvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgYWx0ZXJuYXRpdmVzKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOworCisgICAgdm9pZCBpbnNlcnRUZXh0
UnVuV2l0aG91dE5ld2xpbmVzKHNpemVfdCBsaW5lU3RhcnQsIHNpemVfdCBsaW5lTGVuZ3RoKTsK
KyAgICB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOworICAgIHZvaWQgY29sbGVjdERp
Y3RhdGlvbk1hcmtlcnNJblJhbmdlKHNpemVfdCByYW5nZVN0YXJ0LCBzaXplX3QgcmFuZ2VMZW5n
dGgsIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOworCisgICAgU3RyaW5nIG1fdGV4
dFRvSW5zZXJ0OworICAgIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBtX2Fs
dGVybmF0aXZlczsKK307Cit9CisKKyNlbmRpZiAvLyBEaWN0YXRpb25Db21tYW5kX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA3MmUyMWZhMjRhNTg1NTkxNGZjYjhlNDgzYzkyZjRl
Mzc2YWJlYWI5Li4xMmM2ZmJjNzA2MzEzZDAxMmRhZjkzN2EyM2QwNGQ5M2VkMDIzZmU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFwcGx5
U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgi
CkBAIC00MSw2ICs0Miw4IEBACiAjaW5jbHVkZSAiQ3JlYXRlTGlua0NvbW1hbmQuaCIKICNpbmNs
dWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkRpY3RhdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRp
dGluZ1RleHQuaCIKQEAgLTQ3NiwxMyArNDc5LDEzIEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTaG93
RGVsZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIHJldHVybiBj
bGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShlbGVtZW50KTsK
IH0KIAotdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQordm9pZCBFZGl0b3I6Om5vdGlmeUNvbXBvbmVudHNP
bkNoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmIChj
bGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9m
cmFtZSk7CiAgICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwogICAgIG1fZGVs
ZXRlQnV0dG9uQ29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24pOwotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
b2xkU2VsZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKIH0KIAogdm9pZCBFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRp
bmdTZWxlY3Rpb24pCkBAIC03ODQsOCArNzg3LDEwIEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRp
dGluZyhQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBjbWQpCiAKICAgICBtX3NwZWxs
aW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogCisgICAg
CiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9u
IGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgotICAg
IGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7
CisgICAgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IGNtZC0+
aXNEaWN0YXRpb25Db21tYW5kKCkgPyBGcmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVk
IDogMDsKKyAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBvcHRp
b25zKTsKIAogICAgIGlmICghY21kLT5wcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpKQogICAgICAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXJUeXBpbmdTdHlsZSgpOwpAQCAtODExLDcgKzgxNiw3
IEBAIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmRD
b21wb3NpdGlvbj4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50
cyhjbWQtPnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpLCBjbWQtPmVuZGluZ1Jvb3RFZGl0
YWJsZUVsZW1lbnQoKSk7CiAgICAgCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24o
Y21kLT5zdGFydGluZ1NlbGVjdGlvbigpKTsKLSAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1h
bmQobmV3U2VsZWN0aW9uLCB0cnVlLCB0cnVlKTsKKyAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNv
bW1hbmQobmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNl
bGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSk7CiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVz
cG9uZFRvVW5hcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogICAgIAogICAgIG1fbGFzdEVkaXRD
b21tYW5kID0gMDsKQEAgLTgyNyw3ICs4MzIsNyBAQCB2b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRp
dGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IGNtZCkKICAgICBkaXNwYXRj
aEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSwgY21kLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgIAogICAgIFZp
c2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwotICAg
IGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIHRydWUsIHRydWUpOwor
ICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0
aW9uOjpDbG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlKTsKICAg
ICAKICAgICBtX2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgICAgaWYgKGNsaWVudCgpKQpAQCAtODQ1
LDYgKzg1MCw4IEBAIEVkaXRvcjo6RWRpdG9yKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fa2lsbFJp
bmcoYWRvcHRQdHIobmV3IEtpbGxSaW5nKSkKICAgICAsIG1fc3BlbGxDaGVja2VyKGFkb3B0UHRy
KG5ldyBTcGVsbENoZWNrZXIoZnJhbWUpKSkKICAgICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IoYWRv
cHRQdHIobmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1f
ZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcihhZG9wdFB0cihuZXcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihmcmFtZSwgbV9zcGVs
bGluZ0NvcnJlY3Rvci5nZXQoKSwgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuZ2V0
KCkpKSkKICAgICAsIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZChmYWxzZSkKICAg
ICAsIG1fZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcihFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJ
c0RpdikKIHsKQEAgLTg3Miw2ICs4NzksMTEgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JD
b25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIG1fZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCAwLCBUZXh0RXZl
bnRJbnB1dENvbXBvc2l0aW9uKTsKIH0KIAorYm9vbCBFZGl0b3I6Omluc2VydERpY3RhdGVkVGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQor
eworICAgIHJldHVybiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlRGljdGF0aW9uSW5w
dXRFdmVudCh0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIHRyaWdnZXJpbmdFdmVudCk7Cit9
CisKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgVGV4dEV2ZW50KiB0cmlnZ2Vy
aW5nRXZlbnQpCiB7CiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpAQCAtOTA2LDEyICs5MTgsMTYg
QEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4g
ZG9jdW1lbnQgPSBzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQoKTsKIAogICAgICAgICAgICAgLy8g
SW5zZXJ0IHRoZSB0ZXh0Ci0gICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpPcHRpb25zIG9wdGlv
bnMgPSAwOwotICAgICAgICAgICAgaWYgKHNlbGVjdEluc2VydGVkVGV4dCkKLSAgICAgICAgICAg
ICAgICBvcHRpb25zIHw9IFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dDsKLSAgICAg
ICAgICAgIGlmIChhdXRvY29ycmVjdGlvbldhc0FwcGxpZWQpCi0gICAgICAgICAgICAgICAgb3B0
aW9ucyB8PSBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsKLSAg
ICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQuZ2V0KCksIHRleHQs
IHNlbGVjdGlvbiwgb3B0aW9ucywgdHJpZ2dlcmluZ0V2ZW50ICYmIHRyaWdnZXJpbmdFdmVudC0+
aXNDb21wb3NpdGlvbigpID8gVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uQ29uZmlybSA6
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbk5vbmUpOworICAgICAgICAgICAgaWYgKHRy
aWdnZXJpbmdFdmVudC0+aXNEaWN0YXRpb24oKSkKKyAgICAgICAgICAgICAgICBEaWN0YXRpb25D
b21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQt
PmRpY3RhdGlvbkFsdGVybmF0aXZlcygpLCBzZWxlY3Rpb24pOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKKyAg
ICAgICAgICAgICAgICBpZiAoc2VsZWN0SW5zZXJ0ZWRUZXh0KQorICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zIHw9IFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dDsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkKQorICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zIHw9IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
OworICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQuZ2V0
KCksIHRleHQsIHNlbGVjdGlvbiwgb3B0aW9ucywgdHJpZ2dlcmluZ0V2ZW50ICYmIHRyaWdnZXJp
bmdFdmVudC0+aXNDb21wb3NpdGlvbigpID8gVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9u
Q29uZmlybSA6IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbk5vbmUpOworICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAvLyBSZXZlYWwgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCiAgICAg
ICAgICAgICBpZiAoRnJhbWUqIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCkBAIC0y
MjI1LDcgKzIyNDEsMTIgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIFJlZlB0cjxSYW5nZT4gd29yZFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1aXZh
bGVudCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgZG9jdW1lbnQt
Pm1hcmtlcnMoKS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24sIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIC8vIFdoZW4gd2UgcmVt
b3ZlIGRpY3RhdGlvbiBtYXJrZXJzLCB3ZSBhbHNvIG5lZWQgdG8gdGVsbCBjbGllbnQgdG8gcmVt
b3ZlIGFueSBkaWN0YXRpb24gYWx0ZXJuYXRpdmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtl
ci4gCisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uTWFya2VycyA9IGRvY3Vt
ZW50LT5tYXJrZXJzKCktPm1hcmtlcnNJblJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkaWN0YXRpb25NYXJrZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX2RpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlci0+cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGRpY3RhdGlvbk1h
cmtlcnNbaV0pOworCisgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2Vycyh3b3Jk
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpD
b3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24gfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBkb2N1
bWVudC0+bWFya2VycygpLT5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFu
Z2Uod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCkBA
IC0yMzY2LDEwICsyMzg3LDE0IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
PmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb3JyZWN0aW9uKTsKIH0KIAordm9pZCBFZGl0
b3I6OmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRl
cm5hdGl2ZSkKK3sKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+aGFuZGxl
QWNjZXB0ZWRBbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSk7Cit9CiAKLXZvaWQgRWRpdG9yOjpkaXNt
aXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCkKK3ZvaWQgRWRpdG9yOjpkaXNtaXNzQWx0ZXJu
YXRpdmVUZXh0VUkoKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmRpc21pc3MoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIG1fYWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci0+ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKCk7CiB9CiAKIGJvb2wgRWRp
dG9yOjppbnNpZGVWaXNpYmxlQXJlYShjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CkBA
IC0yNTEwLDcgKzI1MzUsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Om5leHRWaXNpYmxl
UmFuZ2UoUmFuZ2UqIGN1cnJlbnRSYW5nZSwgY29uc3QgU3RyaW5nJiB0YQogICAgIHJldHVybiBm
aXJzdFZpc2libGVSYW5nZSh0YXJnZXQsIG9wdGlvbnMpOwogfQogCi12b2lkIEVkaXRvcjo6Y2hh
bmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKQordm9pZCBFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBu
ZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMp
CiB7CiAgICAgLy8gSWYgdGhlIG5ldyBzZWxlY3Rpb24gaXMgb3JwaGFuZWQsIHRoZW4gZG9uJ3Qg
dXBkYXRlIHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKG5ld1NlbGVjdGlvbi5zdGFydCgpLmlzT3Jw
aGFuKCkgfHwgbmV3U2VsZWN0aW9uLmVuZCgpLmlzT3JwaGFuKCkpCkBAIC0yNTIxLDE0ICsyNTQ2
LDggQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGIKICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBj
YW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4g
cHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81
NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMg
Zm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCiAgICAgYm9vbCBzZWxlY3Rp
b25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBv
c2l0aW9uIHx8IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9u
cyBvcHRpb25zID0gMDsKLSAgICAgICAgaWYgKGNsb3NlVHlwaW5nKQotICAgICAgICAgICAgb3B0
aW9ucyB8PSBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmc7Ci0gICAgICAgIGlmIChjbGVhclR5
cGluZ1N0eWxlKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJU
eXBpbmdTdHlsZTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
KQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
biwgb3B0aW9ucyk7Ci0gICAgfQogCiAgICAgLy8gU29tZSBlZGl0aW5nIG9wZXJhdGlvbnMgY2hh
bmdlIHRoZSBzZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91dCBhZmZlY3RpbmcgaXRzIHBvc2l0aW9u
IHdpdGhpbiB0aGUgRE9NLgogICAgIC8vIEZvciBleGFtcGxlIHdoZW4geW91IHByZXNzIHJldHVy
biBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2FyZXQgaXMgbWFya2VkIGJ5IF4pOgpAQCAtMjYxNSw3
ICsyNjM0LDggQEAgdm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50
KiBlKQogCiB2b2lkIEVkaXRvcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlKQog
ewotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBkaXNtaXNzQWx0
ZXJuYXRpdmVUZXh0VUkoKTsKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+
ZGlzbWlzcygpOwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnRleHRGaWVs
ZERpZEVuZEVkaXRpbmcoZSk7CiB9CkBAIC0yODg1LDcgKzI5MDUsNyBAQCB2b2lkIEVkaXRvcjo6
c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcpCiAKIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9s
ZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykK
IHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnN0b3BQZW5kaW5nQWx0
ZXJuYXRpdmVzKG9sZFNlbGVjdGlvbik7CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9u
cyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsKICAgICBib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKQEAgLTI5MzUsNyArMjk1NSw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhCiAgICAg
aWYgKCFpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Okdy
YW1tYXIpOwogCi0gICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwor
ICAgIG5vdGlmeUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRp
b25zKTsKIH0KIAogc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAzYzI1NDRhNzE2Y2FmZDhkOGQzNGE5ZjMyMGFiYTU5
ODUxZmI3YTZmLi5hNGExNTZlMjAwZTZmNTdmYmU5NzdkYWY1Mjc5MDk1NjRhNmIwYjdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNsaXBi
b2FyZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAj
aW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgpAQCAt
NDYsOSArNDcsMTEgQEAgdHlwZWRlZiBpbnQgTlNXcml0aW5nRGlyZWN0aW9uOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI7CiBjbGFzcyBD
bGlwYm9hcmQ7CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXI7CitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7CiBjbGFz
cyBFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBFZGl0
b3JDbGllbnQ7CkBAIC0xMzIsOCArMTM1LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkU2hv
d0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkRGVs
ZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQ
cm9wZXJ0eVNldCosIFJhbmdlKik7Ci0gICAgCi0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisKICAgICB2b2lk
IHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdT
ZWxlY3Rpb24pOwogCiAgICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKGludCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKQEAgLTIwMyw2ICsyMDUsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQpOwogICAgIGJvb2wgaW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgdGV4dCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIFRleHRFdmVudCogdHJp
Z2dlcmluZ0V2ZW50KTsKKyAgICBib29sIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcm
LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFs
dGVybmF0aXZlcywgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCk7CiAgICAgYm9vbCBpbnNlcnRMaW5l
QnJlYWsoKTsKICAgICBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOwogICAgIApAQCAt
MzIyLDcgKzMyNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoKTsKICAgICAvLyBJZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJl
Y3Rpb24gcGFuZWwsIGNvcnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0
IG1lYW5zIHRoYXQgdXNlciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KICAgICB2b2lkIGhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwotICAgIHZv
aWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOworICAgIHZvaWQgaGFuZGxlQWNj
ZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlKTsKKyAg
ICB2b2lkIGRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSgpOwogCiAgICAgdm9pZCBwYXN0ZUFzRnJh
Z21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJv
b2wgbWF0Y2hTdHlsZSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYs
IGJvb2wgc21hcnRSZXBsYWNlKTsKQEAgLTQwMiw2ICs0MDYsOCBAQCBwcml2YXRlOgogICAgIE93
blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKICAgICBPd25QdHI8U3BlbGxDaGVja2VyPiBtX3Nw
ZWxsQ2hlY2tlcjsKICAgICBPd25QdHI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9z
cGVsbGluZ0NvcnJlY3RvcjsKKyAgICBPd25QdHI8RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsKKyAgICBPd25QdHI8QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOwogICAgIFZp
c2libGVTZWxlY3Rpb24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hp
Z2hsaWdodGVkOwogICAgIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvciBtX2RlZmF1bHRQYXJhZ3Jh
cGhTZXBhcmF0b3I7CkBAIC00MjMsNyArNDI5LDggQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRy
PFJhbmdlPiBsYXN0VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKICAg
ICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwgY29uc3QgU3RyaW5n
JiwgRmluZE9wdGlvbnMpOwogCi0gICAgdm9pZCBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nLCBi
b29sIGNsZWFyVHlwaW5nU3R5bGUpOworICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21t
YW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246
OlNldFNlbGVjdGlvbk9wdGlvbnMpOworICAgIHZvaWQgbm90aWZ5Q29tcG9uZW50c09uQ2hhbmdl
ZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2Vs
ZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKIAogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oCmluZGV4IGI0ZDkyZTMzYjI0Nzc1ZDdhMzNhNmRjZmRjZjQ3NWI5ZjY3YjRjNDMuLjE1
MmIyMDRlN2QzYjY5MGJlNzE3NGM2MDliOTkxMDAxZTUyM2Q5NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIENsZWFyVHlwaW5nU3R5bGUgPSAxIDw8IDIsCiAgICAgICAgIFNwZWxsQ29ycmVjdGlvblRy
aWdnZXJlZCA9IDEgPDwgMywKICAgICAgICAgRG9Ob3RTZXRGb2N1cyA9IDEgPDwgNCwKKyAgICAg
ICAgRGljdGF0aW9uVHJpZ2dlcmVkID0gMSA8PCA1CiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2ln
bmVkIFNldFNlbGVjdGlvbk9wdGlvbnM7IC8vIFVuaW9uIG9mIHZhbHVlcyBpbiBTZXRTZWxlY3Rp
b25PcHRpb24gYW5kIEVVc2VyVHJpZ2dlcmVkCiAgICAgc3RhdGljIGlubGluZSBFVXNlclRyaWdn
ZXJlZCBzZWxlY3Rpb25PcHRpb25zVG9Vc2VyVHJpZ2dlcmVkKFNldFNlbGVjdGlvbk9wdGlvbnMg
b3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQuY3BwCmluZGV4IGUwOTY1ZTBmNjU1ZjY3MDZiNzA0Y2Y1OGZiODRlOGU2ZDI3
ZTk4MTYuLjZkYjQ3YzlmZTJhNGQ0ODg0MTMxYzEzZjVlYzhhZmE0NWUwMDA0NjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNw
cApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgpAQCAtNDUsNiArNDYsMjIgQEAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2kKICAgICBB
U1NFUlQoIW1fdGV4dC5pc0VtcHR5KCkpOwogfQogCitJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
OjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cj4mIG1hcmtlcnMpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKQor
ICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX3RleHQo
dGV4dCkKK3sKKyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPD0gbV9u
b2RlLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFtX3RleHQuaXNFbXB0eSgpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKKyAgICAgICAgbV9tYXJrZXJz
LmFwcGVuZChEb2N1bWVudE1hcmtlcihtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSArIG9mZnNldCwgbWFya2VyLmVuZE9mZnNldCgpICsgb2Zmc2V0LCBtYXJrZXIuZGV0YWlscygp
KSk7CisgICAgfQorfQorICAgIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0Fw
cGx5KCkKIHsKICAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCkBAIC01OSw2
ICs3NiwxMCBAQCB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgbV9ub2RlLT5pbnNlcnREYXRhKG1fb2Zmc2V0LCBtX3Rl
eHQsIGVjKTsKIAorICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VyQ29udHJvbGxl
ciA9IGRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bWFya2Vycy5zaXplKCk7ICsraSkKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci0+YWRkTWFya2Vy
KG1fbm9kZS5nZXQoKSwgbV9tYXJrZXJzW2ldKTsKKwogICAgIGlmIChBWE9iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCktPm5vZGVUZXh0Q2hhbmdlTm90aWZpY2F0aW9uKG1fbm9kZS0+cmVuZGVyZXIoKSwgQVhPYmpl
Y3RDYWNoZTo6QVhUZXh0SW5zZXJ0ZWQsIG1fb2Zmc2V0LCBtX3RleHQpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAppbmRleCBm
Njg1NDcyMWJhMWExYjViOTM1NzhmNzljYTc4OTUyNmMxODYzMWUzLi41MjJlMWUyYWQ3Njg3NGQ3
OTg3YzZjM2E4ZTNhMmMwMDlhNjllOThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50TWFya2VyOwogY2xhc3MgVGV4dDsKIAog
Y2xhc3MgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFu
ZCB7CkBAIC0zOSw4ICs0MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQsIHRleHQpKTsKICAgICB9
CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kPiBjcmVh
dGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChub2RlLCBv
ZmZzZXQsIHRleHQsIG1hcmtlcnMpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSW5zZXJ0SW50
b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFBhc3NS
ZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOwogCiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJ
REU7CkBAIC01Miw2ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFRleHQ+IG1fbm9kZTsK
ICAgICB1bnNpZ25lZCBtX29mZnNldDsKICAgICBTdHJpbmcgbV90ZXh0OworICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcj4gbV9tYXJrZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAppbmRleCAzOWZh
MmE4OTdmYjZjMmE3YTc1YzdhZjVkMzY4MjlhMDVjNDM2NjAyLi45M2U5YjEzMjdlNDI3ZmU3MDgw
MzdiNmE1ZmMxMmRiOTdmMDcwYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkluc2VydFRleHRD
b21tYW5kLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFy
a2VyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCiAj
aW5jbHVkZSAiRWRpdG9yLmgiCkBAIC00Niw2ICs0NywxNSBAQCBJbnNlcnRUZXh0Q29tbWFuZDo6
SW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQs
IGJvbwogewogfQogCitJbnNlcnRUZXh0Q29tbWFuZDo6SW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1h
cmtlcj4mIG1hcmtlcnMpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKKyAg
ICAsIG1fdGV4dCh0ZXh0KQorICAgICwgbV9zZWxlY3RJbnNlcnRlZFRleHQoZmFsc2UpCisgICAg
LCBtX3JlYmFsYW5jZVR5cGUoUmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMp
CisgICAgLCBtX21hcmtlcnMobWFya2VycykKK3sKK30KKwogUG9zaXRpb24gSW5zZXJ0VGV4dENv
bW1hbmQ6OnBvc2l0aW9uSW5zaWRlVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHApCiB7CiAgICAg
UG9zaXRpb24gcG9zID0gcDsKQEAgLTE2NSw3ICsxNzUsMTAgQEAgdm9pZCBJbnNlcnRUZXh0Q29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IHN0YXJ0UG9z
aXRpb24uY29udGFpbmVyVGV4dCgpOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBvZmZzZXQgPSBz
dGFydFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogCi0gICAgICAgIGluc2VydFRl
eHRJbnRvTm9kZSh0ZXh0Tm9kZSwgb2Zmc2V0LCBtX3RleHQpOworICAgICAgICBpZiAobV9tYXJr
ZXJzLnNpemUoKSkKKyAgICAgICAgICAgIGluc2VydFRleHRXaXRoTWFya2Vyc0ludG9Ob2RlKHRl
eHROb2RlLCBvZmZzZXQsIG1fdGV4dCwgbV9tYXJrZXJzKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAgICAg
ICAgIGVuZFBvc2l0aW9uID0gUG9zaXRpb24odGV4dE5vZGUsIG9mZnNldCArIG1fdGV4dC5sZW5n
dGgoKSk7CiAKICAgICAgICAgaWYgKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VMZWFkaW5n
QW5kVHJhaWxpbmdXaGl0ZXNwYWNlcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5oCmluZGV4IDFhZGJhNDRhZTI3NzA1YjYwMWFhMmQxYWI0MjVhZjY1NDc1ODQ5
YmQuLjRjZDBmZTAwNTE3NjExNGFjMDI0Yzk5YTUyOGNmZDJiNmIwYzk4YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKQEAgLTMwLDYgKzMwLDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKKwogY2xhc3MgSW5z
ZXJ0VGV4dENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgog
ICAgIGVudW0gUmViYWxhbmNlVHlwZSB7CkBAIC00Myw5ICs0NSwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQsIHRleHQs
IHNlbGVjdEluc2VydGVkVGV4dCwgcmViYWxhbmNlVHlwZSkpOwogICAgIH0KIAorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc2VydFRleHRDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtl
cnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydFRleHRDb21tYW5k
KGRvY3VtZW50LCB0ZXh0LCBtYXJrZXJzKSk7CisgICAgfQorCiBwcml2YXRlOgogCiAgICAgSW5z
ZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0
SW5zZXJ0ZWRUZXh0LCBSZWJhbGFuY2VUeXBlKTsKKyAgICBJbnNlcnRUZXh0Q29tbWFuZChEb2N1
bWVudCosIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYg
bWFya2Vycyk7CiAKICAgICB2b2lkIGRlbGV0ZUNoYXJhY3RlcigpOwogCkBAIC02MSw2ICs2OSw3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKICAgICBib29sIG1fc2VsZWN0SW5zZXJ0
ZWRUZXh0OwogICAgIFJlYmFsYW5jZVR5cGUgbV9yZWJhbGFuY2VUeXBlOworICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcj4gbV9tYXJrZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHAKaW5kZXggNGZmZGM3Zjk1NmMwOTc3NjNkMmIzZTRhMTIwODdkNmYwNDc0NzFj
YS4uM2I5NGY4Mzc4Mzg0ZWJhNmRkZDUwYmE5NDc4NjNmMjA1MGFmYmNjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC0yNywyMCArMjcsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKICNpbmNs
dWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5o
IgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiaHRtbGVk
aXRpbmcuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTUsNyArMTU2LDcgQEAgYm9vbCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRy
PFJhbmdlPiBtaXMKIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBh
c3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
KQogewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJh
bmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByYW5nZUJv
dW5kaW5nQm94SW5Sb290VmlldyhtX2ZyYW1lLT52aWV3KCksIHJhbmdlVG9SZXBsYWNlLmdldCgp
KTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9S
ZXBsYWNlLmdldCgpKTsKQEAgLTE5OSw0MyArMjAwLDkgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3Vt
ZW4KICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJh
bmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoZWMpCisg
ICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gcmVwbGFjZVRleHRJblJhbmdlKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpLCBtX2ZyYW1lLCB0cnVlKTsKKyAgICBpZiAoIXJl
cGxhY2VtZW50UmFuZ2UpCiAgICAgICAgIHJldHVybjsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQ
YXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3Np
dGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJh
bmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0g
ICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVl
IG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJl
Zm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAotICAgIC8vIHJlbGF0aXZlIHRvIHRo
ZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3Jy
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUu
IEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUg
YSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0
byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCi0gICAgUmVmUHRyPFJh
bmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVj
KS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQ
b3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0
aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBs
YWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVj
dGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29r
IHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jh
bmdlLmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBv
ZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQu
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5k
KFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3
VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKLQotICAgIC8vIENoZWNr
IHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CiAgICAgc2l6ZV90IHNp
emUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewpAQCAtMjk4LDcgKzI2NSw3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJl
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gdHJ1ZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
ID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KG1fZnJh
bWUtPnZpZXcoKSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgp
KTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbGll
bnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBl
LCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOwog
ICAgIH0KQEAgLTMxNiw3ICsyODMsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZQogICAgICAg
ICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CiAgICAgICAgIHN1
Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0
Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsK
KyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmFuZ2VCb3VuZGluZ0JveEluUm9vdFZp
ZXcobV9mcmFtZS0+dmlldygpLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQuZ2V0KCkpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKICAgICB9CkBAIC0zNjAsNzEgKzMyNywy
NyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcgogYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogewogICAgIHJl
dHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpy
b290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0Ci17Ci0gICAgRnJh
bWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAg
ICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVj
dDsKLSAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVh
ZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0gICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmll
dyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOwotfSAgICAgICAgCit9ICAgICAgCiAKLXZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFy
a2VyJiBtYXJrZXIsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQb3NpdGlvbiwgYm9vbCogc2hv
dWxkSWdub3JlT3RoZXJNYXJrZXJzKQogewotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNl
bGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4g
dXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1
c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHBy
ZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAg
ICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24g
cGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBv
c2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlv
bi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgaWYg
KCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24g
c2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgCi0gICAg
Ly8gQ3JlYXRpbmcgYSBWaXNpYmxlIHBvc2l0aW9uIHRyaWdnZXJzIGEgbGF5b3V0IGFuZCB0aGVy
ZSBpcyBubwotICAgIC8vIGd1YXJhbnRlZSB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgc3RpbGwgdmFs
aWQuCi0gICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uLmlzTnVsbCgpKQorICAgIE5vZGUqIG5vZGUg
PSBlbmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgUmVmUHRyPFJhbmdlPiB3
b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtl
ci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIFN0cmluZyBj
dXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAgIGlmICghY3VycmVu
dFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRp
b25PZldvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5k
UG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9y
VHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAg
aW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZl
Y3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPm1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZmZzZXQpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5v
ZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5n
dGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7Ci0gICAgICAgIGlmIChtYXJr
ZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCi0gICAgICAgICAgICBzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxs
aW5nU3VnZ2VzdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKLSAg
ICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOworICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICBp
ZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCisgICAgICAgIHN0
YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3Bl
bGxpbmdTdWdnZXN0aW9ucyk7CisgICAgZWxzZSB7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbigpOworICAgICAgICBz
dGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJl
dmVyc2lvbik7CiAgICAgfQorICAgICpzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMgPSB0cnVlOwog
fQogCiB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRF
ZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAppbmRleCBkZmQw
NjA4YjIzN2YyMDU2OWJjYjE1MjFmZDU4ZDM0NGFmYWRjZWM3Li5iMmE2MmRhYWYxZmY2Y2EwYzRl
MTkyNjViMTljNTNhNTc1ZmI4NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApAQCAtODEsNyArODEsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKSBVTkxFU1NfRU5BQkxFRCh7
fSkKIAogICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
KSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gU3RyaW5nKCk7
IH0pCiAgICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5n
ZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudCk7IH0pCiAKICAgICB2b2lkIGFw
cGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+JikgVU5MRVNTX0VOQUJMRUQoe30pCkBAIC05MSw3ICs5MCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFN
KGNvcnJlY3Rpb24pOyB9KQogICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9z
aXRlRWRpdENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAgICAgdm9pZCByZXNwb25kVG9V
bmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qKSBVTkxFU1NfRU5BQkxFRCh7
IH0pCi0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2Vs
ZWN0aW9uKTsgfSkKIAogICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
b2xkU2VsZWN0aW9uKTsgfSkKICAgICB2b2lkIGFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKQEAgLTExNCwxNiArMTEyLDIw
IEBAIHB1YmxpYzoKICAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2Vk
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVT
RURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxh
Y2VkKTsgcmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKIAorICAgIHZv
aWQgcmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24sIGJvb2wqIHNob3VsZElnbm9yZU90aGVyTWFy
a2VycykgVU5MRVNTX0VOQUJMRUQoe1VOVVNFRF9QQVJBTShlbmRPZldvcmRQb3NpdGlvbik7IFVO
VVNFRF9QQVJBTShzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpO30pCisKICNpZiBVU0UoQVVUT0NP
UlJFQ1RJT05fUEFORUwpCiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwogCi0gICAgYm9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNv
bnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0CisgICAgYm9v
bCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGludCBl
bmRPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKCgobWFya2VyLT50eXBlKCkg
PT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXItPmRlc2NyaXB0aW9uKCku
aXNOdWxsKCkpIAotICAgICAgICAgICAgICAgICB8fCBtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLT5lbmRPZmZzZXQo
KSkgPT0gZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuICgoKG1hcmtlci50eXBlKCkgPT0gRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24oKS5pc051bGwo
KSkKKyAgICAgICAgICAgICAgICAgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCgpKSA9PSBlbmRP
ZmZzZXQpOwogICAgIH0KIAorICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKKwogICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CiAgICAg
VGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7CiAgICAgRmxvYXRSZWN0IHJvb3RWaWV3
UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAppbmRleCA5YWUzOTU1NDFhODNjNWUyNGIwOWZlNGI0NWMwYTlhZmIx
MmZhNzhmLi5iZmZkMjI3MmRjNzdiY2FkYzZiNDlhYjljZjkyOGY2ZjJlM2UyZjgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTQ4LDE4ICs0OCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGlj
IGJvb2wgY2FuQXBwZW5kTmV3TGluZUZlZWQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQotewotICAgIE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Ojpj
cmVhdGUoU3RyaW5nKCJcbiIpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBub2Rl
LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7Ci0gICAgcmV0dXJuIGV2ZW50LT50ZXh0KCkubGVu
Z3RoKCk7Ci19Ci0KIFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9jdW1lbnQgKmRvY3Vt
ZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uc3QgU3RyaW5nICZ0ZXh0VG9JbnNl
cnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBUZXh0Q29t
cG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5k
KGRvY3VtZW50KQogICAgICwgbV9jb21tYW5kVHlwZShjb21tYW5kVHlwZSkKQEAgLTM4Nyw3ICsz
NzUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMo
Y29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhaygpCiB7Ci0gICAgaWYgKCFjYW5BcHBlbmROZXdMaW5lRmVlZChlbmRpbmdT
ZWxlY3Rpb24oKSkpCisgICAgaWYgKCFjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0aW9uKGVu
ZGluZ1NlbGVjdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKQEAg
LTM5Niw3ICszODQsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKIHsKLSAgICBp
ZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkKGVuZGluZ1NlbGVjdGlvbigpKSkKKyAgICBpZiAoIWNh
bkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggODZmNTI5YjZhNDViODYzNGI3N2Y2Zjk0
YTIzOTdlODNlNjdiMzk0ZC4uMjdiNzgwMTQ5ZmM0ZjM5NzcyZDY4NTM1YmM2MDE2NDI2NDI0ZjE3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVj
dGlvbi5oIgogCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgpAQCAtNjA4LDYgKzYwOSwxOCBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpub25Cb3Vu
ZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVj
YXRlZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dU
cmVlUm9vdE5vZGUoKSA6IDA7CiB9CiAKK2Jvb2wgY2FuQXBwZW5kTmV3TGluZUZlZWRUb1NlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7CisgICAgTm9kZSogbm9k
ZSA9IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+
IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZShTdHJpbmcoIlxuIikpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQs
IGVjKTsKKyAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5ndGgoKTsKK30KKwogI2lmbmRlZiBO
REVCVUcKIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggOGM4MTBkYTRkZDE5
N2UzMWNmNmE1ZjZmOGI4Yjg4MjYyOTdiYjdlZi4uYjJjM2NlNGQ5ZjVjOGRiNWJkNGZiNWEyZjNh
MGUyMzYyYTcxYjU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIGEsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGIpCiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KIAorYm9vbCBjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVm
IE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDJiMjZhMDY5OGVm
M2NhZjg1OWIwZjgxYmI1OWUzNmY2NTg1NjBmMWUuLjU0NzY2MGZjYTkyYjVhNjgzOWM5MDhhMDAx
MGQ2MzY1NTNlNzllNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTUy
NSw2ICs1MjUsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIHsgcmV0dXJu
IFN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpIHsgfQogI2VuZGlmCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdmly
dHVhbCB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0UmVjdCYsIHVp
bnQ2NF90KSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2
ZVVJKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMo
dWludDY0X3QpIHsgfTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNv
bnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDRlY2Q1NjU4NGQzM2ZmYzY0OTY2
NzYyZTE2NjU3NWFkNmVjMDA2ZTQuLjJjZmNmMTE5ZWRhY2QwZjFhZjEzNzNmZTI1MTdhZTdkZTJh
ODdjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMjcsNiArMjcsNyBAQAog
I2lmbmRlZiBFZGl0b3JDbGllbnRfaAogI2RlZmluZSBFZGl0b3JDbGllbnRfaAogCisjaW5jbHVk
ZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTE1OCw2ICsxNTksMTIgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nKSA9IDA7CiAjZW5kaWYKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJO
QVRJVkVTKQorICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlv
bkNvbnRleHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0
aXZlVUkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZl
cyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9IDA7CisjZW5kaWYKKwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29u
c3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAppbmRleCBhNzFlODUxNTQ2ZmMyMGFiODdjYTc3MjA1NTYxNzRmYzY2NjJl
ZTdjLi4wYmYxYmRlMGJlMjU5ZTQyY2RiM2NlNmFkMjc4ZmVlZDg0NWFjYTliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMTg4LDYgKzMxODgsMjkgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQq
IHVuZGVybHlpbmdFdmUKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsKICAg
ICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CisKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVEaWN0YXRpb25JbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMs
IEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgRXZlbnRUYXJnZXQqIHRhcmdldDsKKyAgICBpZiAodW5kZXJseWlu
Z0V2ZW50KQorICAgICAgICB0YXJnZXQgPSB1bmRlcmx5aW5nRXZlbnQtPnRhcmdldCgpOworICAg
IGVsc2UKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXROb2RlRm9yRG9jdW1lbnQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCisgICAgICAgIHZp
ZXctPnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKKworICAgIFJlZlB0cjxUZXh0RXZlbnQ+
IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24obV9mcmFtZS0+ZG9tV2luZG93
KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgZXZlbnQtPnNldFVuZGVybHlp
bmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0
YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsKKyAgICByZXR1cm4gZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCk7Cit9CiAgICAgCiBib29sIEV2ZW50SGFuZGxlcjo6aXNLZXlib2FyZE9wdGlv
blRhYihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CmluZGV4IDcwMWZhMmJmOTQ1NTU0OTc0YmQ5ZGY0NmE0NzYxOTM3OTczMDUzNWIuLjgxZThkZDBh
MGNiMjY3NDgwMTAwNGM5Njg3YmQxZTY3NjczZjI2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBFdmVudEhhbmRsZXJfaAogI2RlZmlu
ZSBFdmVudEhhbmRsZXJfaAogCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSAiRHJhZ1N0YXRlLmgiCiAj
aW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKQEAgLTE4Niw2ICsxODcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwogCiAg
ICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1
bmRlcmx5aW5nRXZlbnQgPSAwLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0RXZlbnRJbnB1dEtl
eWJvYXJkKTsKKyAgICBib29sIGhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3Rh
dGlvbkFsdGVybmF0aXZlcywgRXZlbnQqIHVuZGVybHlpbmdFdmVudCk7CiAgICAgdm9pZCBkZWZh
dWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKFRleHRFdmVudCopOwogCiAjaWYgRU5BQkxFKERSQUdf
U1VQUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggZDVjMTc2ZDIxZTJiNjE2YTUwMWVlMTQ0
OWRiMmUwNTZiMmI4ZGE4NS4uMWQ1OWM2ZWRmMDc1Zjk2OWFmZTE3ZjYxNmU1MzEyYmUyNjdmMzEz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTkxNiw3ICs5MTYsNyBAQCB2b2lkIEZyYW1lOjpz
ZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0
Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZWRpdG9yLmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBtX2VkaXRvci5k
aXNtaXNzQWx0ZXJuYXRpdmVUZXh0VUkoKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gUmVz
cGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNW
RyBkb2N1bWVudHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IGY3YmVmNGY5NTg5NThmMmJkNzEyNDU5ODI1N2ZjZDc5Y2Vi
MWZkYzkuLjAzYzk3ZWQ4YjdjMDhiYWFmNzE4MGIwZjVkNmNmMDFhMWFiYTIxMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC0zNTIsMTIgKzM1MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZsb2F0UmVj
dCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJv
dW5kQWxsU2lkZXMpOwogCiAgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZyk7Ci0gICAgICAgIGVudW0gVGV4dENo
ZWNraW5nTGluZVN0eWxlIHsKLSAgICAgICAgICAgIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0
eWxlLAotICAgICAgICAgICAgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZSwKLSAgICAgICAg
ICAgIFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlCisgICAgICAgIGVudW0gVGV4dE1h
cmtlckxpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGUs
CisgICAgICAgICAgICBUZXh0TWFya2VyR3JhbW1hckxpbmVTdHlsZSwKKyAgICAgICAgICAgIFRl
eHRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlLAorICAgICAgICAgICAg
VGV4dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZQogICAgICAgICB9OwotICAg
ICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlKTsKKyAgICAgICAgdm9pZCBkcmF3TGluZUZv
clRleHRNYXJrZXJzKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgVGV4dE1hcmtlckxp
bmVTdHlsZSk7CiAKICAgICAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxlZChib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCmlu
ZGV4IGFjZWQ5NmIyZjRlN2ZmYzM4M2NlZmU3MWRiNzlhNjZhOWFjNjY4MjIuLjY1MWUyZmQ2M2Zm
ZGQ3YWJjZWJlYzVkMjEwNjljZDdmZTljYzBmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQpAQCAt
OTksNyArOTksNyBAQCBzdGF0aWMgTlNDb2xvciogY3JlYXRlUGF0dGVybkNvbG9yKE5TU3RyaW5n
KiBmaXJzdENob2ljZU5hbWUsIE5TU3RyaW5nKiBzZWNvbmRDaAogfQogCiAvLyBXZWJLaXQgb24g
TWFjIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gY29tcG9uZW50LCBzbyBpdCBtdXN0IHVzZSB0aGUg
c3RhbmRhcmQgcGxhdGZvcm0gYXJ0d29yayBmb3IgdW5kZXJsaW5lLgotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHdpZHRoLCBUZXh0TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHdpZAogICAgIGJvb2wgdXNpbmdEb3Q7CiAgICAgTlNDb2xvciAqcGF0dGVy
bkNvbG9yOwogICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdT
cGVsbGluZ0xpbmVTdHlsZToKKyAgICAgICAgY2FzZSBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5
bGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0
dGVybiBjb2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcg
PSBmYWxzZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZAogICAg
ICAgICAgICAgcGF0dGVybkNvbG9yID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1t
YXJMaW5lU3R5bGU6CisgICAgICAgIGNhc2UgVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBwYXR0ZXJuIGNv
bG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFyID0gZmFsc2U7
CkBAIC0xMzEsNyArMTMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWQKICAgICAgICAgfQog
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgICAgICAvLyBUbyBzdXBwb3J0IGNv
cnJlY3Rpb24gcGFuZWwuCi0gICAgICAgIGNhc2UgVGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5l
U3R5bGU6CisgICAgICAgIGNhc2UgVGV4dE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRM
aW5lU3R5bGU6CisgICAgICAgIGNhc2UgVGV4dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZlc0xp
bmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGlu
ZyBwYXR0ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVs
bGluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CmluZGV4IDlkNTY1ODQ5YTUxYmI0ZWNkMjVhNDdjNmY5MjE2ODVhMWY0NGQyZWUuLjRlOTg1ZWJm
NjQ2OWQwMWQzYTA4MGJlMDRmMmJlMWU5ZDgyYzEyMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTk4MywyMiArOTgzLDI0IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRQb2ludCYKICAgICAgICAgY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKIH0KIAotc3RhdGlj
IEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nTGluZVN0eWxlIHRleHRDaGVja2luZ0xpbmVT
dHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkK
K3N0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRNYXJrZXJMaW5lU3R5bGUgdGV4dE1hcmtlckxp
bmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSkKIHsKICAgICBzd2l0Y2ggKG1hcmtlclR5cGUpIHsKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZzoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5n
U3BlbGxpbmdMaW5lU3R5bGU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRN
YXJrZXJTcGVsbGluZ0xpbmVTdHlsZTsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFy
OgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdHcmFtbWFyTGlu
ZVN0eWxlOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0TWFya2VyR3JhbW1h
ckxpbmVTdHlsZTsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9y
OgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdSZXBsYWNlbWVu
dExpbmVTdHlsZTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlckF1
dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU7CisgICAgY2FzZSBEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
OjpUZXh0TWFya2VyRGljdGF0aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0OjpUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZTsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOwogICAgIH0KIH0KIAot
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNz
Q29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIq
IG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1t
YXIpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFy
a2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250
LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBt
YXJrZXJzICg1MzI3ODg3KQogICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKQEAgLTEwNjMsNyArMTA2NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRT
cGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hCiAg
ICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5kZXJsaW5lIHVw
IG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAgICB1bmRlcmxp
bmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5kcmF3TGluZUZvclRleHRD
aGVja2luZyhGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSAr
IHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJU
eXBlKG1hcmtlci0+dHlwZSgpKSk7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dE1hcmtlcnMoRmxv
YXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVP
ZmZzZXQpLCB3aWR0aCwgdGV4dE1hcmtlckxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLT50
eXBlKCkpKTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihH
cmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50
TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKQEAg
LTExMzAsNiArMTEzMiw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtl
cnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50OgorICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzOgogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNTMs
MTYgKzExNTYsMTcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhH
cmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICAvLyBtYXJrZXIg
aW50ZXJzZWN0cyB0aGlzIHJ1bi4gIFBhaW50IGl0LgogICAgICAgICBzd2l0Y2ggKG1hcmtlci0+
dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpTcGVsbGluZzoKLSAg
ICAgICAgICAgICAgICBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKHB0LCBib3hPcmlnaW4s
IG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwYWludFNwZWxs
aW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBm
b250LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERv
Y3VtZW50TWFya2VyOjpHcmFtbWFyOgotICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdy
YW1tYXJNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgcGFpbnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRpb25NYXJrZXIocHQsIGJv
eE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2g6CiAgICAgICAg
ICAgICAgICAgcGFpbnRUZXh0TWF0Y2hNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHls
ZSwgZm9udCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yOgotICAgICAgICAgICAgICAgIHBhaW50U3Bl
bGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwg
ZmFsc2UpOworICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVzOgorICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFy
a2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50OgogICAgICAgICAgICAgICAgIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIobWFy
a2VyLCBzdHlsZSwgZm9udCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAppbmRleCBlNGFjMjI2NzQyNGVlNjdlNWQ4M2ZjOGYzMjlmMWMzYWYzNDY2NTVhLi5jZGVlMTY5
NGU3MWZlMmJmZmRhOWYzYjUzOTM0MWM0NDgwODNjNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgaW50IGRlY29yYXRpb24sIGNvbnN0IFNoYWRvd0RhdGEqKTsK
ICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7Ci0gICAgdm9pZCBwYWlu
dFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQm
LCBib29sIGdyYW1tYXIpOworICAgIHZvaWQgcGFpbnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRpb25N
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1
bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7CiAg
ICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBG
b250Jik7CiAgICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50
TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCBmMmYxMDk4MDQyNDA3NjdkMjUyYTU5Njg1NDdlNjEyMzU2Njk5
NjI5Li5mNjAzNzY0ZmJjYmM2OWY5N2IwMTVkNzg5YzRjYzZjZDNiYmZlNzA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC05Niw2ICs5Niw4IEBAIHN0YXRpYyBib29sIG1h
cmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbjsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJrZXJUeXBlLCAi
RGVsZXRlZEF1dG9jb3JyZWN0aW9uIikpCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1hcmtl
cjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG1hcmtlclR5cGUsICJEaWN0YXRpb25BbHRlcm5hdGl2ZXMiKSkKKyAgICAgICAgcmVzdWx0ID0g
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczsKICAgICBlbHNlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYzhkZTc1NWI2Y2Q2MjZjMTE4NDE1N2JmMGEzMjg1MmNmMTI0MWNm
MS4uMzRmZGE1MDE4ZjFlNTEyOGZiZjZlNzJmM2ZiMzE4OTJjODFiY2QxOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNzAsNiArMzcw
LDEwIEBACiAJCUNEOEVBQzczMTFDQUM5QTMwMDc3NDA3NSAvKiBJT0tpdC5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhFQUM3MjEx
Q0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3b3JrICovOyB9OwogCQlDREE2MkFFMjEyNUY4
N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAv
KiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oICovOyB9OwogCQlDREE2MkFFMzEyNUY4N0MyMDA3
RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE2MkFFMTEyNUY4N0MyMDA3RkQxMTggLyogV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gKi87IH07CisJCUNFN0ZCODFDMTUyMjM1NDEwMEJEMUVB
OSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODE4MTUyMjM1NDAwMEJEMUVBOSAvKiBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0U3RkI4MUQxNTIyMzU0
MTAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODE5MTUyMjM1NDAwMEJE
MUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gKi87IH07CisJCUNFN0ZC
ODFFMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODFBMTUyMjM1NDEw
MEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLzsgfTsKKwkJQ0U3RkI4MUYx
NTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODFCMTUyMjM1NDEwMEJE
MUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi87IH07CiAJCUREN0NERUU3MEEy
M0JBOUUwMDA2OTkyOCAvKiBXZWJUeXBlc0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDdDREVFNjBBMjNCQTlFMDAwNjk5MjggLyogV2Vi
VHlwZXNJbnRlcm5hbC5oICovOyB9OwogCQlERDg5NjgyMDA5QUE4NzI0MDA5N0U3RjAgLyogV2Vi
RWxlbWVudERpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEREODk2ODFFMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFy
eS5oICovOyB9OwogCQlERDg5NjgyMTA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rp
b25hcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
RDg5NjgxRjA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkubW0gKi87IH07
CkBAIC02OTksNiArNzAzLDEwIEBACiAJCUNEOEVBQzcyMTFDQUM5QTMwMDc3NDA3NSAvKiBJT0tp
dC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IElPS2l0LmZyYW1ld29yazsgcGF0aCA9IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8
YWJzb2x1dGU+IjsgfTsKIAkJQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTYyQUUx
MTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTdGQjgxODE1MjIzNTQwMDBCRDFFQTkg
LyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRTdGQjgxOTE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDRTdGQjgxQTE1MjIzNTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTdGQjgx
QjE1MjIzNTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDdDREVFNjBBMjNCQTlFMDAwNjk5
MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJUeXBlc0ludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUREODk2
ODFFMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVsZW1lbnREaWN0aW9u
YXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlERDg5NjgxRjA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnku
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTEyOTQsNiArMTMwMiwxMCBAQAogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJQjgyOTU4RDExMzI3MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25QYW5l
bC5oICovLAogCQkJCUI4Mjk1OEQyMTMyNzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwu
bW0gKi8sCisJCQkJQ0U3RkI4MTgxNTIyMzU0MDAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci5oICovLAorCQkJCUNFN0ZCODE5MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gKi8sCisJCQkJQ0U3RkI4MUExNTIyMzU0MTAw
QkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovLAorCQkJCUNFN0ZCODFCMTUy
MjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8sCiAJCQkJQjY4
MDQ5NzEwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUuaCAqLywKIAkJCQlC
NjgwNDk3MjBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5tbSAqLywKIAkJ
CQlBNURFRkMxMTExRDUzNDRCMDA4ODUyNzMgLyogV2ViQXBwbGljYXRpb25DYWNoZVF1b3RhTWFu
YWdlci5oICovLApAQCAtMTY0Myw2ICsxNjU1LDggQEAKIAkJCQk0MUY0NDg0RjEwMzM4RThDMDAz
MEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMkUyRkU1
MTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMkUyRkU5MTRFNDgyMTUwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb25JbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQ0U3RkI4MUMxNTIyMzU0MTAwQkQxRUE5IC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U3RkI4MUUxNTIyMzU0
MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yMDMwLDYgKzIwNDQsOCBAQAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJW
aWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxRjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAv
KiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMkUyRkU2MTRFNDgx
ODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlDRTdG
QjgxRDE1MjIzNTQxMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3RkI4MUYxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTgxNmE4NzYwODllYjM1NzllMGEyNzJmMjRjMDgzM2M3
OGUyYTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKyNkZWZp
bmUgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUv
RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK09CSkNfQ0xBU1MgTlNUZXh0
QWx0ZXJuYXRpdmVzOworT0JKQ19DTEFTUyBXZWJWaWV3OworCitjbGFzcyBEaWN0YXRpb25Db250
ZXh0Q29udHJvbGxlcjsKKworY2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyIHsK
K3B1YmxpYzoKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoKSB7IH0KKyAgICAv
LyBSZXR1cm5zIGEgZGljdGF0aW9uIGNvbnRleHQgSUQuCisgICAgdWludDY0X3QgYWRkQWx0ZXJu
YXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgdm9pZCBj
bGVhcigpOworICAgIHZvaWQgc2hvd0FsdGVybmF0aXZlcyhXZWJWaWV3KiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90IGRpY3Rh
dGlvbkNvbnRleHQpOworICAgIHZvaWQgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAgIHZvaWQg
cmVtb3ZlQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworCitwcml2YXRl
OgorICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmluZyogYWNjZXB0ZWRB
bHRlcm5hdGl2ZSwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0QWx0ZXJuYXRpdmVz
Kik7CisgICAgCisgICAgY2xhc3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIoKSB7IH0KKyAgICAgICAg
dWludDY0X3QgYWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2
ZXM+Jik7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgTlNUZXh0QWx0ZXJuYXRpdmVz
KiBhbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRl
eHQpOworICAgICAgICB2b2lkIHJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQo
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRf
dCBpbnZhbGlkQ29udGV4dCA9IDA7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiA+IEhhc2hNYXBUeXBl
OworICAgICAgICBIYXNoTWFwVHlwZSBtX2FsdGVybmF0aXZlc09iamVjdE1hcDsKKyAgICB9Owor
CisgICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgbV9jb250ZXh0Q29udHJvbGxlcjsKKyAg
ICBSZXRhaW5QdHI8V2ViVmlldz4gbV92aWV3OworfTsKKyNlbmRpZgorI2VuZGlmIC8vIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzI1ODMzYmM1NDQzZjRlOTExN2ZhNGQ3MWFmYTZlOWY1NGU3Yzdl
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgorCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisKKyNpbXBvcnQgPEFwcEtpdC9OU1NwZWxsQ2hl
Y2tlci5oPgorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorI2ltcG9ydCAi
V2ViVmlld0ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit1aW50NjRf
dCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9s
bGVyOjphZGRBbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4m
IGFsdGVybmF0aXZlcykKK3sKKyAgICB1aW50NjRfdCBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50NjRfdD4oYWx0ZXJuYXRpdmVzLmdldCgpKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBpbnZhbGlkQ29udGV4dDsKKyAgICBzdGQ6OnBhaXI8SGFzaE1hcFR5cGU6Oml0
ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5hZGQoY29udGV4
dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICBpZiAocmVzdWx0LmZpcnN0ID09IG1fYWx0ZXJuYXRpdmVz
T2JqZWN0TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaW52YWxpZENvbnRleHQ7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gY29udGV4dDsKK30KKworTlNUZXh0QWx0ZXJuYXRpdmVzKiBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjph
bHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
Cit7CisgICAgSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1fYWx0ZXJuYXRpdmVz
T2JqZWN0TWFwLmZpbmQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgaWYgKGl0ciA9PSBtX2FsdGVy
bmF0aXZlc09iamVjdE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJu
IGl0ci0+c2Vjb25kLmdldCgpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRp
Y3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX2FsdGVy
bmF0aXZlc09iamVjdE1hcC5yZW1vdmUoZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK3ZvaWQgRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6
Y2xlYXIoKQoreworICAgIG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmNsZWFyKCk7Cit9CisKK3Vp
bnQ2NF90IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKGNv
bnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2ZXMpCit7CisgICAg
cmV0dXJuIG1fY29udGV4dENvbnRyb2xsZXIuYWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlcyk7
Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpjbGVhcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dENvbnRyb2xsZXIuY2xlYXIoKTsKK30KKwordm9pZCBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnNob3dBbHRlcm5hdGl2ZXMoV2ViVmlldyogdmlldywg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgZGlzbWlzc0FsdGVybmF0aXZlcygpOwor
ICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIG1fdmlldyA9IHZpZXc7CisgICAg
TlNUZXh0QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXMgPSBtX2NvbnRleHRDb250cm9sbGVyLmFs
dGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgaWYg
KCFhbHRlcm5hdGl2ZXMpCisgICAgICAgIHJldHVybjsKKyAgICBOU1NwZWxsQ2hlY2tlciogc3Bl
bGxDaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgW3Nw
ZWxsQ2hlY2tlciBzaG93Q29ycmVjdGlvbkluZGljYXRvck9mVHlwZTpOU0NvcnJlY3Rpb25JbmRp
Y2F0b3JUeXBlR3Vlc3NlcyBwcmltYXJ5U3RyaW5nOmFsdGVybmF0aXZlcy5wcmltYXJ5U3RyaW5n
IGFsdGVybmF0aXZlU3RyaW5nczphbHRlcm5hdGl2ZXMuYWx0ZXJuYXRpdmVTdHJpbmdzIGZvclN0
cmluZ0luUmVjdDpbdmlldyBfY29udmVydFJlY3RGcm9tUm9vdFZpZXc6Ym91bmRpbmdCb3hPZkRp
Y3RhdGVkU3RyaW5nXSB2aWV3Om1fdmlldy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TU3Ry
aW5nKiBhY2NlcHRlZFN0cmluZykgeworICAgICAgICBpZiAoYWNjZXB0ZWRTdHJpbmcpCisgICAg
ICAgICAgICBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKGFjY2VwdGVkU3RyaW5nLCBkaWN0YXRp
b25Db250ZXh0LCBhbHRlcm5hdGl2ZXMpOworICAgIH1dOworfQorCit2b2lkIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmluZyog
YWNjZXB0ZWRBbHRlcm5hdGl2ZSwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0QWx0
ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXMpCit7CisgICAgW2FsdGVybmF0aXZlcyBub3RlU2VsZWN0
ZWRBbHRlcm5hdGl2ZVN0cmluZzphY2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICBtX2NvbnRleHRD
b250cm9sbGVyLnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9u
Q29udGV4dCk7CisgICAgW21fdmlldy5nZXQoKSBfaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRl
cm5hdGl2ZTphY2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICBtX3ZpZXcuY2xlYXIoKTsKK30KKwor
dm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRlcm5hdGl2ZXMo
KQoreworICAgIGlmICghbV92aWV3KQorICAgICAgICByZXR1cm47CisgICAgW1tOU1NwZWxsQ2hl
Y2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uSW5kaWNhdG9yRm9yVmll
dzptX3ZpZXcuZ2V0KCldOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6cmVtb3ZlQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAg
bV9jb250ZXh0Q29udHJvbGxlci5yZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0
KGRpY3RhdGlvbkNvbnRleHQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNhZGU2ZDdlZDIyYWZkODYwYjE2ZGJlZGFlN2Q3MDk0ODUxODZjOGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaAorI2RlZmluZSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Vf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCitPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsKKworc3RydWN0IFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZSB7CisgICAgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKE5TVGV4dEFsdGVy
bmF0aXZlcyogYW5BbHRlcm5hdGl2ZXMsIE5TUmFuZ2UgYVJhbmdlKTsKKyAgICBUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UoY29uc3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKTsK
KyAgICBOU1JhbmdlIHJhbmdlOworICAgIFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+IGFs
dGVybmF0aXZlczsKK307CisKKyNlbmRpZgorCisjZW5kaWYgLy8gVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1Rl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGUwNTc4NzEzZjE4
NWJkODVlM2IzZjc4MThkM2MxNjE0ODJmNjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdl
LmgiCisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyNpbXBvcnQgPEFwcEtpdC9O
U1RleHRBbHRlcm5hdGl2ZXMuaD4KKworVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2UoTlNUZXh0QWx0ZXJuYXRpdmVzKiBhbkFsdGVybmF0aXZlcywgTlNS
YW5nZSBhUmFuZ2UpCis6IHJhbmdlKGFSYW5nZSkKKywgYWx0ZXJuYXRpdmVzKGFuQWx0ZXJuYXRp
dmVzKQoreworfQorCitUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdp
dGhSYW5nZShjb25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFub3RoZXIpCis6IHJhbmdl
KGFub3RoZXIucmFuZ2UpCissIGFsdGVybmF0aXZlcyhhbm90aGVyLmFsdGVybmF0aXZlcykKK3sK
K30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaAppbmRleCAwNmZjYThkMGViZmUxZTlmYmQ3YjJiZGI1YWM5NDA4ODEwY2Iy
NDVjLi42MzQyZTI4NTQ0ODk2MmU4ZTMxM2E0ODg1OTgwNWE1ODgxMzIwZDViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAt
MTQyLDYgKzE0MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCisj
aWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdmlydHVhbCB2b2lkIHNob3dEaWN0
YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KSBPVkVSUklERTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lz
dGVyVW5kb09yUmVkb1N0ZXAoUGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4sIGJvb2wgaXNS
ZWRvKTsKICAgICBXZWJFZGl0b3JDbGllbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCBjMzAxZWI1MDhjODdjMmE0
MDU1MTI5YTBlOTZkYjJmZDYzYmQyYzQxLi5lYzI1NjcyNTgwMjNkYTZlMGQyYWFhYjJkZjYyZDc5
OWJjNTBiMjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC04ODksNiArODg5LDIzIEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJl
Y3Rpb25SCiB9CiAjZW5kaWYKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQordm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4
dCkKK3sKKyAgICBbbV93ZWJWaWV3IF9zaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSTpib3VuZGlu
Z0JveE9mRGljdGF0ZWRUZXh0IGZvckRpY3RhdGlvbkNvbnRleHQ6ZGljdGF0aW9uQ29udGV4dF07
Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVV
SSgpCit7CisgICAgW21fd2ViVmlldyBfZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUldOwor
fQorCit2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgW21fd2ViVmlldyBfcmVtb3ZlRGljdGF0
aW9uQWx0ZXJuYXRpdmVzOmRpY3RhdGlvbkNvbnRleHRdOworfQorI2VuZGlmCisKIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0
cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3BlbGxl
ZFdvcmRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggYTli
MjkxZTQ5OWY4MDI5N2NjNzU2NzlmMzkwZWY2YmRlMDYxYzRhNC4uNzZiODkxNjVjZTYwMjVlN2Ni
OGU1Yzk3ODJiOTYzYmEzZGU4MDlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJET01Eb2N1bWVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgogI2ltcG9ydCAiV2Vi
QXJjaGl2ZS5oIgogI2ltcG9ydCAiV2ViQ2xpcFZpZXcuaCIKICNpbXBvcnQgIldlYkRPTU9wZXJh
dGlvbnNJbnRlcm5hbC5oIgpAQCAtNTg4OCw2ICs1ODg5LDIyIEBAIHN0YXRpYyB2b2lkIGV4dHJh
Y3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRp
b25VbmRlCiAgICAgfQogfQogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitzdGF0
aWMgdm9pZCBjb2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyhOU0F0dHJpYnV0ZWRTdHJp
bmcgKnN0cmluZywgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGFsdGVybmF0aXZl
cykgeworICAgIE5TUmFuZ2UgZWZmZWN0aXZlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAg
ICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKKyAgICBkbyB7CisgICAgICAg
IE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFtzdHJpbmcgYXR0cmlidXRlc0F0SW5kZXg6ZWZm
ZWN0aXZlUmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6JmVmZmVjdGl2ZVJhbmdlXTsKKyAg
ICAgICAgaWYgKCFhdHRyaWJ1dGVzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIE5TVGV4
dEFsdGVybmF0aXZlcyAqdGV4dEFsdGVybmF0aXZlcyA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktl
eTpOU1RleHRBbHRlcm5hdGl2ZXNBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKHRleHRBbHRl
cm5hdGl2ZXMpCisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFRleHRBbHRlcm5hdGl2
ZVdpdGhSYW5nZSh0ZXh0QWx0ZXJuYXRpdmVzLCBlZmZlY3RpdmVSYW5nZSkpOworICAgICAgICBl
ZmZlY3RpdmVSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZWZmZWN0aXZlUmFuZ2UpOworICAg
IH0gd2hpbGUgKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uIDwgbGVuZ3RoKTsKK30KKyNlbmRpZgor
CiAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogewogICAgIEJPT0wgaXNBdHRyaWJ1dGVk
U3RyaW5nID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3Nd
XTsKQEAgLTU5MDQsNyArNTkyMSwxNCBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgIE5T
UmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSA9IHsgTlNOb3RGb3VuZCwgMCB9OwogICAgIGJvb2wgaXNG
cm9tSW5wdXRNZXRob2QgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29t
cG9zaXRpb24oKTsKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIFZlY3Rv
cjxUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+IGRpY3RhdGlvbkFsdGVybmF0aXZlczsKKyNlbmRp
ZgorCiAgICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgeworI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQorICAgICAgICBjb2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyhzdHJp
bmcsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFdl
IGlnbm9yZSBtb3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBmb3IgZXhhbXBsZSBp
bnNlcnRpbmcgZnJvbSBDaGFyYWN0ZXIgUGFsZXR0ZSBsb3NlcyBmb250IGFuZCBnbHlwaCB2YXJp
YXRpb24gZGF0YS4KICAgICAgICAgLy8gSXQgZG9lcyBub3QgbG9vayBsaWtlIGFueSBpbnB1dCBt
ZXRob2RzIGV2ZXIgdXNlIGluc2VydFRleHQ6IHdpdGggYXR0cmlidXRlcyBvdGhlciB0aGFuIE5T
VGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUuCiAgICAgICAgIHRleHQgPSBb
c3RyaW5nIHN0cmluZ107CkBAIC01OTQzLDcgKzU5NjcsMTIgQEAgc3RhdGljIHZvaWQgZXh0cmFj
dFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlv
blVuZGUKICAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpIHsK
ICAgICAgICAgLy8gQW4gaW5zZXJ0VGV4dDogbWlnaHQgYmUgaGFuZGxlZCBieSBvdGhlciByZXNw
b25kZXJzIGluIHRoZSBjaGFpbiBpZiB3ZSBkb24ndCBoYW5kbGUgaXQuCiAgICAgICAgIC8vIE9u
ZSBleGFtcGxlIGlzIHNwYWNlIGJhciB0aGF0IHJlc3VsdHMgaW4gc2Nyb2xsaW5nIGRvd24gdGhl
IHBhZ2UuCi0gICAgICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2Vy
dFRleHQoZXZlbnRUZXh0LCBldmVudCk7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMp
CisgICAgICAgIGlmIChkaWN0YXRpb25BbHRlcm5hdGl2ZXMuc2l6ZSgpKQorICAgICAgICAgICAg
ZXZlbnRIYW5kbGVkID0gW1tzZWxmIF93ZWJWaWV3XSBfaW5zZXJ0RGljdGF0ZWRUZXh0OmV2ZW50
VGV4dCBhbHRlcm5hdGl2ZXM6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzIHRyaWdnZXJpbmdFdmVudDpl
dmVudF07CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0g
Y29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50KTsKICAgICB9
IGVsc2UgewogICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOwogICAgICAgICBjb3JlRnJhbWUt
PmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oZXZlbnRUZXh0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCBjNDE4YjAzOTFhMTgwMTU3Mjk3MGY4YjE5NDdlNDBlN2Rj
ODY0YzMzLi5mYTEzM2QxOGEwNzgwZDQ3NTI5MDA3MjhiMWE2OTUyOWE0N2MyNWJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJX
ZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXdEYXRhLmgiCiAKKyNpbXBvcnQgIkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkRPTVJhbmdlSW50ZXJuYWwuaCIKQEAgLTYzMzQsNiArNjMzNSw1NSBAQCBzdGF0aWMgdm9pZCBn
bGliQ29udGV4dEl0ZXJhdGlvbkNhbGxiYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxv
b3BBY3Rpdml0eQogfQogI2VuZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
Ky0gKEJPT0wpX2luc2VydERpY3RhdGVkVGV4dDooY29uc3QgU3RyaW5nJil0ZXh0IGFsdGVybmF0
aXZlczooY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mKWFsdGVybmF0aXZl
cyB0cmlnZ2VyaW5nRXZlbnQ6KEV2ZW50Kil0cmlnZ2VyaW5nRXZlbnQKK3sKKyAgICBBU1NFUlQo
IWFsdGVybmF0aXZlcy5pc0VtcHR5KCkpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxm
IF9tYWluQ29yZUZyYW1lXTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIEVkaXRvciogZWRpdG9yID0gY29yZUZyYW1lLT5lZGl0b3IoKTsKKworICAgIFZl
Y3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYWx0ZXJu
YXRpdmVXaXRoUmFuZ2UgPSBhbHRlcm5hdGl2ZXNbaV07CisgICAgICAgIHVpbnQ2NF90IGRpY3Rh
dGlvbkNvbnRleHQgPSBfcHJpdmF0ZS0+bV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIt
PmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZVdpdGhSYW5nZS5hbHRlcm5hdGl2ZXMpOworICAg
ICAgICBpZiAoZGljdGF0aW9uQ29udGV4dCkKKyAgICAgICAgICAgIGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zLmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKGFsdGVybmF0
aXZlV2l0aFJhbmdlLnJhbmdlLmxvY2F0aW9uLCBhbHRlcm5hdGl2ZVdpdGhSYW5nZS5yYW5nZS5s
ZW5ndGgsIGRpY3RhdGlvbkNvbnRleHQpKTsKKyAgICB9CisKKyAgICBpZiAoZGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZWRpdG9yLT5pbnNl
cnRUZXh0KHRleHQsIHRyaWdnZXJpbmdFdmVudCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
ZWRpdG9yLT5pbnNlcnREaWN0YXRlZFRleHQodGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbnMsIHRyaWdnZXJpbmdFdmVudCk7Cit9CisKKy0gKHZvaWQpX3Nob3dEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJOihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKWJvdW5kaW5nQm94T2ZEaWN0YXRl
ZFRleHQgZm9yRGljdGF0aW9uQ29udGV4dDoodWludDY0X3QpZGljdGF0aW9uQ29udGV4dAorewor
ICAgIF9wcml2YXRlLT5tX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+c2hvd0FsdGVy
bmF0aXZlcyhzZWxmLCBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0
KTsKK30KKworLSAodm9pZClfZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkKK3sKKyAgICBf
cHJpdmF0ZS0+bV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmRpc21pc3NBbHRlcm5h
dGl2ZXMoKTsKK30KKworLSAodm9pZClfcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOih1aW50
NjRfdClkaWN0YXRpb25Db250ZXh0Cit7CisgICAgX3ByaXZhdGUtPm1fZGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLT5yZW1vdmVBbHRlcm5hdGl2ZXMoZGljdGF0aW9uQ29udGV4dCk7Cit9
CisKKy0gKHZvaWQpX2hhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6KE5TU3RyaW5n
KilhbHRlcm5hdGl2ZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVG
cmFtZV07CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5oYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGFsdGVybmF0
aXZlKTsKK30KKyNlbmRpZgorCiAtIChOU1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tUm9vdFZpZXc6
KE5TUG9pbnQpcG9pbnQKIHsKICAgICByZXR1cm4gTlNNYWtlUG9pbnQocG9pbnQueCwgW3NlbGYg
Ym91bmRzXS5zaXplLmhlaWdodCAtIHBvaW50LnkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3RGF0YS5oCmluZGV4IGVhMmJmY2Y2MDc0ZTlhNTExYzNjM2VhZTJkYjRmZjVlNWVjM2M0
ZjYuLjJjODMzZjBlOGFmYjliZWZlMjhhYjNkMWFiMmY0ZGMxOGU0ZjliZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2ltcG9y
dCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlv
bkNhY2hpbmcuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9MYXllckZsdXNoU2NoZWR1bGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxh
dGZvcm1TdHJpbmcuaD4KQEAgLTU4LDYgKzU5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQGNs
YXNzIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOwogI2VuZGlmCiAKK2NsYXNzIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcjsKKwogZXh0ZXJuIEJPT0wgYXBwbGljYXRpb25Jc1Rlcm1pbmF0
aW5nOwogZXh0ZXJuIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50OwogCkBAIC0yMDAsNSAr
MjAzLDkgQEAgcHJpdmF0ZToKICAgICBpbnQgdmFsaWRhdGlvbk1lc3NhZ2VUaW1lck1hZ25pZmlj
YXRpb247CiAKICAgICBmbG9hdCBjdXN0b21EZXZpY2VTY2FsZUZhY3RvcjsKKworI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIE93blB0cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI+IG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOworI2VuZGlmCiB9CiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1t
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCAwYjgxMTdh
MDk3MDZkNWI2ZWM0ZTY0NTdjMzM5OGU0NzYyNmM1OGJhLi4yMzQ2ODJlNWYwM2Y1MTQwYzI0ZGY4
NDU5MmJhMDFhODVlNmYwMWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdEYXRhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0Rh
dGEubW0KQEAgLTI5LDYgKzI5LDcgQEAKIAogI2ltcG9ydCAiV2ViVmlld0RhdGEuaCIKIAorI2lt
cG9ydCAiRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJLaXRM
b2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCIKICNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KQEAgLTEwMCw2ICsxMDEsMTAgQEAgTGF5ZXJG
bHVzaENvbnRyb2xsZXI6OkxheWVyRmx1c2hDb250cm9sbGVyKFdlYlZpZXcqIHdlYlZpZXcpCiAK
ICAgICBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50Kys7CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciA9IGFkb3B0
UHRyKG5ldyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOworI2VuZGlmCisKICAgICBy
ZXR1cm4gc2VsZjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVy
bmFsLmgKaW5kZXggMDJjYzU1MDEwNmIwNDRmYmMxNzdjOWY1OWExZjgzZjU5MGRlNTBiMC4uZDk4
ZTkxMTUwNTNlYmE5Y2YxZDNjMjQyOWJiZWUwMWQ1MTEwYTkzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0zNCwxMyArMzQsMTcgQEAKICNpbXBv
cnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCisjaW1wb3J0ICJU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUtleWJv
YXJkVUlNb2RlLmg+CiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBG
cmFtZTsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKICAgICBjbGFzcyBLVVJMOwpAQCAtOTUsNiAr
OTksMTQgQEAgV2ViQ29yZTo6RmluZE9wdGlvbnMgY29yZU9wdGlvbnMoV2ViRmluZE9wdGlvbnMg
b3B0aW9ucyk7CiAtICh2b2lkKV9zY2hlZHVsZUdsaWJDb250ZXh0SXRlcmF0aW9uczsKICNlbmRp
ZgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCistIChCT09MKV9pbnNlcnREaWN0
YXRlZFRleHQ6KGNvbnN0IFN0cmluZyYpdGV4dCBhbHRlcm5hdGl2ZXM6KGNvbnN0IFZlY3RvcjxU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JilhbHRlcm5hdGl2ZXMgdHJpZ2dlcmluZ0V2ZW50OihX
ZWJDb3JlOjpFdmVudCopdHJpZ2dlcmluZ0V2ZW50OworLSAodm9pZClfc2hvd0RpY3RhdGlvbkFs
dGVybmF0aXZlVUk6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpYm91bmRpbmdCb3hPZkRpY3Rh
dGVkVGV4dCBmb3JEaWN0YXRpb25Db250ZXh0Oih1aW50NjRfdClkaWN0YXRpb25Db250ZXh0Owor
LSAodm9pZClfZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUk7CistICh2b2lkKV9yZW1vdmVE
aWN0YXRpb25BbHRlcm5hdGl2ZXM6KHVpbnQ2NF90KWRpY3RhdGlvbkNvbnRleHQ7CistICh2b2lk
KV9oYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlOihOU1N0cmluZyopYWx0ZXJuYXRp
dmU7CisjZW5kaWYKKwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggNTA1NDY2YzZiMDNlNTdhYTdiODliMDQw
MWY3NmJhMTY3OTI3Mzg2OC4uNjg3ZWNiZWMyMzI0ODhkMDk1MTljOWUxYzZjMzJkYjZjOGVhM2Y4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VEZXRh
aWxzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRp
dG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgpAQCAtNjM5LDYgKzY0MCwy
NCBAQCBib29sIEFyZ3VtZW50Q29kZXI8S1VSTD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRl
Y29kZXIsIEtVUkwmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBcmd1bWVu
dENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uJiBhbHRlcm5h
dGl2ZXNMb2NhdGlvbikKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQoYWx0ZXJuYXRpdmVz
TG9jYXRpb24ucmFuZ2VTdGFydCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KGFsdGVybmF0
aXZlc0xvY2F0aW9uLnJhbmdlTGVuZ3RoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQoYWx0
ZXJuYXRpdmVzTG9jYXRpb24uZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK2Jvb2wgQXJndW1lbnRD
b2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYWx0ZXJuYXRpdmVzTG9j
YXRpb24pCit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoYWx0ZXJuYXRpdmVzTG9j
YXRpb24ucmFuZ2VTdGFydCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZVVJbnQ2NChhbHRlcm5hdGl2ZXNMb2NhdGlvbi5yYW5nZUxlbmd0aCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChhbHRlcm5h
dGl2ZXNMb2NhdGlvbi5kaWN0YXRpb25Db250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCiAjaWYgUExBVEZPUk0oUVQpCiAKIHZvaWQgQXJndW1lbnRD
b2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA2Zjk3MDBjYzUwM2NhOTdlZThiN2FiZjI0ZWRl
YWU3MzM4MGJkMzZkLi4yMTNmMTJkZjE4ZGM0MGRjM2QyN2RhMmNlMDg1ODQ5NGJmNzQ1NGJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC01
MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBzdHJ1Y3QgQ29tcG9zaXRpb25V
bmRlcmxpbmU7CisgICAgc3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb247CiAgICAg
c3RydWN0IERyYWdTZXNzaW9uOwogICAgIHN0cnVjdCBGaWxlQ2hvb3NlclNldHRpbmdzOwogICAg
IHN0cnVjdCBHcmFtbWFyRGV0YWlsOwpAQCAtMjI4LDYgKzIyOSwxMSBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OktVUkw+IHsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6S1VSTCYpOwogfTsKIAordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNv
cmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlv
biYpOworfTsKKwogI2lmIFBMQVRGT1JNKFFUKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50M0Q+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCA4YWY3
OGM3YmI1Y2E2NDNkOWUzZTI0Y2MzODcyYTNkMDQzOGUxNzY1Li5hODgyNWIxNjEzMThhYjEyYjQ5
NzMwOGNmNzlkOWIwZDE2NzM5N2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkNvcnJlY3Rpb25QYW5lbC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAKIEBjbGFzcyBXS0VkaXRvclVuZG9UYXJnZXRPYmpDOwpAQCAtMzUsNiArMzYs
NyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyOwogY2xhc3MgRmluZEluZGljYXRvcldpbmRvdzsKIAogY2xhc3MgUGFnZUNsaWVu
dEltcGwgOiBwdWJsaWMgUGFnZUNsaWVudCB7CkBAIC0xMjgsMTIgKzEzMCwyMCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGlu
dDMyX3QgbmV3U3R5bGUpOwogCiAgICAgdmlydHVhbCBXS1ZpZXcqIHdrVmlldygpIGNvbnN0IHsg
cmV0dXJuIG1fd2tWaWV3OyB9CisgICAgCisgICAgdmlydHVhbCB1aW50NjRfdCBhZGREaWN0YXRp
b25BbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUko
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpOwogCiAgICAgV0tWaWV3KiBtX3drVmlldzsKICAgICBSZXRhaW5Q
dHI8V0tFZGl0b3JVbmRvVGFyZ2V0T2JqQz4gbV91bmRvVGFyZ2V0OwogI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9u
UGFuZWw7CiAjZW5kaWYKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBPd25Q
dHI8RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCmluZGV4
IDE1NGI0NTViNmEzN2NmNDkxYWZjM2ZlNzBiYTgxNDcxNDEzNzVlY2MuLjQwYTVkNjU0MmVmODA0
Mjc4OTYxZjdlNTU2ZjdhZGZjODE2NmVjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCkBAIC0yNiw3ICsyNiwxMSBAQAogI2lt
cG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogCisjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVz
Lmg+CisjZW5kaWYKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIkRpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiRGljdGlvbmFyeVBvcHVwSW5mby5o
IgogI2ltcG9ydCAiRmluZEluZGljYXRvci5oIgogI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudC5oIgpAQCAtMTIyLDYgKzEyNiw5IEBAIFBhc3NPd25QdHI8UGFnZUNsaWVudEltcGw+IFBh
Z2VDbGllbnRJbXBsOjpjcmVhdGUoV0tWaWV3KiB3a1ZpZXcpCiBQYWdlQ2xpZW50SW1wbDo6UGFn
ZUNsaWVudEltcGwoV0tWaWV3KiB3a1ZpZXcpCiAgICAgOiBtX3drVmlldyh3a1ZpZXcpCiAgICAg
LCBtX3VuZG9UYXJnZXQoQWRvcHROUywgW1tXS0VkaXRvclVuZG9UYXJnZXRPYmpDIGFsbG9jXSBp
bml0XSkKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICAsIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIpKQorI2VuZGlmCiB7CiB9CiAKQEAgLTIxMyw2ICsyMjAsOSBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpwcm9jZXNzRGlkQ3Jhc2goKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZUNs
b3NlZCgpCiB7CiAgICAgW21fd2tWaWV3IF9wYWdlQ2xvc2VkXTsKKyNpZiBVU0UoRElDVEFUSU9O
X0FMVEVSTkFUSVZFUykKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+Y2xl
YXIoKTsKKyNlbmRpZgogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nl
c3MoKQpAQCAtNTI4LDUgKzUzOCwzNyBAQCBib29sIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlU2F2
ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQogewogICAg
IHJldHVybiBbbV93a1ZpZXcgX2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0
b3JGcm9tU3RyaW5nKHNlbGVjdG9yU3RyaW5nKV07CiB9CisgICAgCit1aW50NjRfdCBQYWdlQ2xp
ZW50SW1wbDo6YWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRB
bHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2ZXMpCit7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCisgICAgcmV0dXJuIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5hZGRB
bHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0KQoreworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQor
ICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPnNob3dBbHRlcm5h
dGl2ZXMobV93a1ZpZXcsIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3RhdGlvbkNvbnRl
eHQpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NEaWN0YXRpb25B
bHRlcm5hdGl2ZVVJKCkKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBt
X2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+ZGlzbWlzc0FsdGVybmF0aXZlcygpOwor
I2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0
aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQorICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5yZW1vdmVB
bHRlcm5hdGl2ZXMoZGljdGF0aW9uQ29udGV4dCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5k
ZXggN2Y5NTc5YTYyYTc3OTA4M2YyYWZhMzZiM2EyNjNkMWJkODEzMzk1Yy4uMTA4YTIyZDY4MzYz
MTVmZjk2ZDViZjc5YTViNzk0YjMyMTljYzYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtMjYsNiArMjYsMTIgQEAKICNpbXBvcnQgImNvbmZpZy5o
IgogI2ltcG9ydCAiV0tWaWV3LmgiCiAKKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5oIgorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05T
VGV4dEFsdGVybmF0aXZlcy5oPgorI2ltcG9ydCA8QXBwS2l0L05TQXR0cmlidXRlZFN0cmluZy5o
PgorI2VuZGlmCisKICNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkRhdGFS
ZWZlcmVuY2UuaCIKICNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCkBAIC0xMTUxLDYg
KzExNTcsMjIgQEAgc3RhdGljIGNvbnN0IHNob3J0IGtJT0hJREV2ZW50VHlwZVNjcm9sbCA9IDY7
CiAgICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTpOU01ha2VSYW5n
ZShOU05vdEZvdW5kLCAwKV07CiB9CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
K3N0YXRpYyB2b2lkIGNvbGxlY3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKE5TQXR0cmlidXRl
ZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgYWx0ZXJu
YXRpdmVzKSB7CisgICAgTlNSYW5nZSBlZmZlY3RpdmVSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDAp
OworICAgIE5TVUludGVnZXIgbGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgIGRvIHsKKyAg
ICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRl
eDplZmZlY3RpdmVSYW5nZS5sb2NhdGlvbiBlZmZlY3RpdmVSYW5nZTomZWZmZWN0aXZlUmFuZ2Vd
OworICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
TlNUZXh0QWx0ZXJuYXRpdmVzICp0ZXh0QWx0ZXJuYXRpdmVzID0gW2F0dHJpYnV0ZXMgb2JqZWN0
Rm9yS2V5Ok5TVGV4dEFsdGVybmF0aXZlc0F0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAodGV4
dEFsdGVybmF0aXZlcykKKyAgICAgICAgICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlKHRleHRBbHRlcm5hdGl2ZXMsIGVmZmVjdGl2ZVJhbmdlKSk7CisgICAg
ICAgIGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5nZShlZmZlY3RpdmVSYW5nZSk7
CisgICAgfSB3aGlsZSAoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24gPCBsZW5ndGgpOworfQorI2Vu
ZGlmCisKIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5T
UmFuZ2UpcmVwbGFjZW1lbnRSYW5nZQogewogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0g
W3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKQEAgLTEx
NjcsNyArMTE4OSwxMiBAQCBzdGF0aWMgY29uc3Qgc2hvcnQga0lPSElERXZlbnRUeXBlU2Nyb2xs
ID0gNjsKICAgICBOU1N0cmluZyAqdGV4dDsKICAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0g
X2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uOwogCisgICAgVmVjdG9y
PFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzOworCiAgICAg
aWYgKGlzQXR0cmlidXRlZFN0cmluZykgeworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVT
KQorICAgICAgICBjb2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyhzdHJpbmcsIGRpY3Rh
dGlvbkFsdGVybmF0aXZlcyk7CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBt
b3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBmb3IgZXhhbXBsZSBpbnNlcnRpbmcg
ZnJvbSBDaGFyYWN0ZXIgUGFsZXR0ZSBsb3NlcyBmb250IGFuZCBnbHlwaCB2YXJpYXRpb24gZGF0
YS4KICAgICAgICAgdGV4dCA9IFtzdHJpbmcgc3RyaW5nXTsKICAgICB9IGVsc2UKQEAgLTExODcs
NyArMTIxNCwxMSBAQCBzdGF0aWMgY29uc3Qgc2hvcnQga0lPSElERXZlbnRUeXBlU2Nyb2xsID0g
NjsKIAogICAgIFN0cmluZyBldmVudFRleHQgPSB0ZXh0OwogICAgIGV2ZW50VGV4dC5yZXBsYWNl
KE5TQmFja1RhYkNoYXJhY3RlciwgTlNUYWJDaGFyYWN0ZXIpOyAvLyBzYW1lIHRoaW5nIGlzIGRv
bmUgaW4gS2V5RXZlbnRNYWMubW0gaW4gV2ViQ29yZQotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0g
X2RhdGEtPl9wYWdlLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2Nh
dGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSk7CisgICAgYm9vbCBldmVudEhhbmRs
ZWQ7CisgICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlcy5zaXplKCkpCisgICAgICAgIGV2ZW50
SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+aW5zZXJ0RGljdGF0ZWRUZXh0KGV2ZW50VGV4dCwgcmVw
bGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBlbHNlCisgICAgICAgIGV2ZW50SGFuZGxlZCA9IF9k
YXRhLT5fcGFnZS0+aW5zZXJ0VGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRp
b24sIE5TTWF4UmFuZ2UocmVwbGFjZW1lbnRSYW5nZSkpOwogCiAgICAgaWYgKHBhcmFtZXRlcnMp
CiAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8
PSBldmVudEhhbmRsZWQ7CkBAIC0yODU1LDYgKzI4ODYsMTMgQEAgc3RhdGljIE5TU3RyaW5nICpw
YXRoV2l0aFVuaXF1ZUZpbGVuYW1lRm9yUGF0aChOU1N0cmluZyAqcGF0aCkKICAgICBfZGF0YS0+
X3BhZ2UtPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOwogfQogCistICh2b2lk
KWhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6KE5TU3RyaW5nICopYWx0ZXJuYXRp
dmUKK3sKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xJT04pCisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVBY2NlcHRlZERpY3Rh
dGlvbkFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKKyNlbmRpZgorfQorCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBXS1ZpZXcgKFByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAppbmRleCBhZDQ2ZDBhYWFiZGQ1NGQyYjg1ZTEy
MWQ5Yzk4ODIxZDMyMTk3NDE1Li45ZTM3YzEwZmJiY2Y2OTM3M2I4MjA4NmU1ZjhlOWUzNTAwNmY0
NDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJ
bnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0lu
dGVybmFsLmgKQEAgLTk2LDUgKzk2LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC0gKE5TSW50
ZWdlcilzcGVsbENoZWNrZXJEb2N1bWVudFRhZzsKIC0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0OihOU1N0cmluZyopcmVzdWx0OworLSAodm9pZCloYW5kbGVBY2NlcHRlZERpY3Rh
dGlvbkFsdGVybmF0aXZlOihOU1N0cmluZyopYWx0ZXJuYXRpdmU7CiAKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IDQ5OTkwMWFkMzZhMDk4Njc1YjY3NDcyNzUy
MjEyMjI5MmQwYjA5OTIuLjNjYzFhYmM0MTg2NWY3YTQyZjY0MzhjMmQyZWE5YjY2NTQ2M2M4OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogCiBPQkpDX0NMQVNTIFdL
VmlldzsKK09CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTE5Miw2ICsxOTMsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGludDMyX3QgbmV3U3R5bGUpID0g
MDsKICAgICAKICAgICB2aXJ0dWFsIFdLVmlldyogd2tWaWV3KCkgY29uc3QgPSAwOworICAgIAor
ICAgIHZpcnR1YWwgdWludDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFp
blB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93RGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250
ZXh0KSA9IDA7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJz
Rm9yTWFpbkZyYW1lKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCAzZTYzMmFiNGY1N2Q1Y2VmM2MzMGEwOGQxMGQzZGUzNWFkNWY2YzM3
Li5iN2MyMWY4ZDRjOGQ4Y2UyMzJlMzc1MGQxNjEzMDFiZjhhNTU2ZGVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzcxNSw2ICszNzE1LDMyIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5n
JiByZXN1bHQpCiAgICAgICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFu
ZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KHJlc3VsdCksIG1fcGFnZUlELCAwKTsKICNlbmRpZgog
fQorCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2
ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlKQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKKyAgICBpZiAoIWlz
Q2xvc2VkKCkpCisgICAgICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFu
ZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSksIG1fcGFnZUlELCAw
KTsKKyNlbmRpZgorfQorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCit2b2lkIFdl
YlBhZ2VQcm94eTo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250
ZXh0KQoreworICAgIG1fcGFnZUNsaWVudC0+c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91
bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpCit7CisgICAgbV9wYWdl
Q2xpZW50LT5kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpOworfQorCit2b2lkIFdlYlBh
Z2VQcm94eTo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpCit7CisgICAgCit9CisjZW5kaWYKKwogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKaW5kZXggYjQwOWYwNGZkMjRmNmQwZTBhYmUwMzY4YmI3NjEzZGM4NjczNTE1NC4uMzdlYzI3
YzM0YjcwY2M1ZDFkMGUzZjk1YTgxMWMxYmUyYTcxNjIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIldlYlBvcHVw
TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViVUlDbGllbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EcmFnU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5o
PgpAQCAtMTA2LDYgKzEwNyw3IEBAIGNsYXNzIFFRdWlja05ldHdvcmtSZXBseTsKICNlbHNlCiBj
bGFzcyBXS1ZpZXc7CiAjZW5kaWYKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U7CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTM0NSw2ICszNDcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKICAgICB2b2lkIGNhbmNlbENvbXBvc2l0aW9u
KCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVw
bGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKKyAgICBi
b29sIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgY29uc3QgVmVj
dG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAg
ICAgdm9pZCBnZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5n
dGgpOwogICAgIHZvaWQgZ2V0U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2
NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1
aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBBdHRyaWJ1dGVkU3RyaW5nJik7CkBA
IC02MTIsNiArNjE1LDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQg
aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2
b2lkIGhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRl
cm5hdGl2ZSk7CiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIHNldERlYnVnUGFpbnRGbGFncyhX
S1BhZ2VEZWJ1Z1BhaW50RmxhZ3MgZmxhZ3MpIHsgc19kZWJ1Z1BhaW50RmxhZ3MgPSBmbGFnczsg
fQpAQCAtODcxLDYgKzg3NSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24oaW50MzJfdCByZWFzb24sIFN0cmluZyYgcmVzdWx0KTsKICAgICB2b2lkIHJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwog
I2VuZGlmIC8vICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgdm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJu
YXRpdmVVSSgpOworICAgIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpOworI2VuZGlmCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAg
ICAgdm9pZCBjbGVhckxvYWREZXBlbmRlbnRDYWxsYmFja3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDRjMzVjNGRhZmE0
ZTNkOTVjMDlkMzYxYWZlYTE2OWQ0MTUyYTZkM2UuLmQzMGMxOWZmMTZkYjA1ZTkzNDdkMmNlZDUx
MThkNTI0OWNkZmM2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjc2LDYgKzI3NiwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogICAgIFJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNw
b25zZVR5cGUsIFN0cmluZyByZXBsYWNlZFN0cmluZywgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5n
KTsKICNlbmRpZgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgU2hvd0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUkoV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kaW5nQm94T2ZEaWN0
YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCisgICAgRGlzbWlzc0RpY3RhdGlv
bkFsdGVybmF0aXZlVUkoKQorICAgIFJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0KTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICMg
V2luZG93cyA3IEdlc3R1cmUgTWVzc2FnZXMKICAgICBTZXRHZXN0dXJlUmVhY2hlZFNjcm9sbGlu
Z0xpbWl0KGJvb2wgbGltaXRSZWFjaGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2RlMTRhYzkxYzBlY2QyMDNjMDU4ZGQ1NDFiMDA3MDc2YWI3ZTc2NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKyNkZWZpbmUgRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKK09CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOworT0JKQ19D
TEFTUyBXS1ZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEaWN0YXRpb25Db250
ZXh0Q29udHJvbGxlcjsKKworY2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyIHsK
K3B1YmxpYzoKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoKSB7IH0KKyAgICAv
LyBSZXR1cm5zIGEgZGljdGF0aW9uIGNvbnRleHQgSUQuCisgICAgdWludDY0X3QgYWRkQWx0ZXJu
YXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgdm9pZCBj
bGVhcigpOworICAgIHZvaWQgc2hvd0FsdGVybmF0aXZlcyhXS1ZpZXcqLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFN0cmluZywgdWludDY0X3QgZGljdGF0
aW9uQ29udGV4dCk7CisgICAgdm9pZCBkaXNtaXNzQWx0ZXJuYXRpdmVzKCk7CisgICAgdm9pZCBy
ZW1vdmVBbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKE5TU3RyaW5nKiBhY2NlcHRlZEFs
dGVybmF0aXZlLCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBOU1RleHRBbHRlcm5hdGl2ZXMq
KTsKKyAgICAKKyAgICBjbGFzcyBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlciB7CisgICAgcHVi
bGljOgorICAgICAgICBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcigpIHsgfQorICAgICAgICB1
aW50NjRfdCBhZGRBbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZl
cz4mKTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBOU1RleHRBbHRlcm5hdGl2ZXMq
IGFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4
dCk7CisgICAgICAgIHZvaWQgcmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCh1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90
IGludmFsaWRDb250ZXh0ID0gMDsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8dWludDY0X3QsIFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+ID4gSGFzaE1hcFR5cGU7
CisgICAgICAgIEhhc2hNYXBUeXBlIG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwOworICAgIH07CisK
KyAgICBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlciBtX2NvbnRleHRDb250cm9sbGVyOworICAg
IFJldGFpblB0cjxXS1ZpZXc+IG1fdmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKKyNlbmRpZiAvLyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTE5NTM1ODdkNWZkMWVjMDE2MGRm
MjEzODA0ZTJmMmFmYjM2ZWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0KQEAgLTAsMCArMSwx
MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCisjaW1wb3J0IDxBcHBLaXQvTlNTcGVsbENoZWNrZXIuaD4KKyNpbXBvcnQgPEFwcEtpdC9O
U1RleHRBbHRlcm5hdGl2ZXMuaD4KKyNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordWludDY0X3QgRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6
YWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRl
cm5hdGl2ZXMpCit7CisgICAgdWludDY0X3QgY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KGFsdGVybmF0aXZlcy5nZXQoKSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gaW52YWxpZENvbnRleHQ7CisgICAgc3RkOjpwYWlyPEhhc2hNYXBUeXBlOjppdGVyYXRv
ciwgYm9vbD4gcmVzdWx0ID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuYWRkKGNvbnRleHQsIGFs
dGVybmF0aXZlcyk7CisgICAgaWYgKHJlc3VsdC5maXJzdCA9PSBtX2FsdGVybmF0aXZlc09iamVj
dE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRDb250ZXh0OworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK05TVGV4dEFsdGVybmF0aXZlcyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWx0ZXJu
YXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorewor
ICAgIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVybmF0aXZlc09iamVj
dE1hcC5maW5kKGRpY3RhdGlvbkNvbnRleHQpOworICAgIGlmIChpdHIgPT0gbV9hbHRlcm5hdGl2
ZXNPYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBpdHIt
PnNlY29uZC5nZXQoKTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRp
b25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgbV9hbHRlcm5hdGl2
ZXNPYmplY3RNYXAucmVtb3ZlKGRpY3RhdGlvbkNvbnRleHQpOworfQorCit2b2lkIERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmNsZWFy
KCkKK3sKKyAgICBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5jbGVhcigpOworfQorCit1aW50NjRf
dCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmFkZEFsdGVybmF0aXZlcyhjb25zdCBS
ZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYgYWx0ZXJuYXRpdmVzKQoreworICAgIHJldHVy
biBtX2NvbnRleHRDb250cm9sbGVyLmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpOworfQor
Cit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xlYXIoKQoreworICAgIHJl
dHVybiBtX2NvbnRleHRDb250cm9sbGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjpzaG93QWx0ZXJuYXRpdmVzKFdLVmlldyogdmlldywgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWV3ID0gdmlldzsKKyAgICBOU1Rl
eHRBbHRlcm5hdGl2ZXMqIGFsdGVybmF0aXZlcyA9IG1fY29udGV4dENvbnRyb2xsZXIuYWx0ZXJu
YXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKKyAgICBpZiAoIWFs
dGVybmF0aXZlcykKKyAgICAgICAgcmV0dXJuOworICAgIE5TU3BlbGxDaGVja2VyKiBzcGVsbENo
ZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAgICBbc3BlbGxD
aGVja2VyIHNob3dDb3JyZWN0aW9uSW5kaWNhdG9yT2ZUeXBlOk5TQ29ycmVjdGlvbkluZGljYXRv
clR5cGVHdWVzc2VzIHByaW1hcnlTdHJpbmc6YWx0ZXJuYXRpdmVzLnByaW1hcnlTdHJpbmcgYWx0
ZXJuYXRpdmVTdHJpbmdzOmFsdGVybmF0aXZlcy5hbHRlcm5hdGl2ZVN0cmluZ3MgZm9yU3RyaW5n
SW5SZWN0OmJvdW5kaW5nQm94T2ZEaWN0YXRlZFN0cmluZyB2aWV3Om1fdmlldy5nZXQoKSBjb21w
bGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5nKiBhY2NlcHRlZFN0cmluZykgeworICAgICAgICBpZiAo
YWNjZXB0ZWRTdHJpbmcpCisgICAgICAgICAgICBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKGFj
Y2VwdGVkU3RyaW5nLCBkaWN0YXRpb25Db250ZXh0LCBhbHRlcm5hdGl2ZXMpOworICAgIH1dOwor
fQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRB
bHRlcm5hdGl2ZShOU1N0cmluZyogYWNjZXB0ZWRBbHRlcm5hdGl2ZSwgdWludDY0X3QgZGljdGF0
aW9uQ29udGV4dCwgTlNUZXh0QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXMpCit7CisgICAgW2Fs
dGVybmF0aXZlcyBub3RlU2VsZWN0ZWRBbHRlcm5hdGl2ZVN0cmluZzphY2NlcHRlZEFsdGVybmF0
aXZlXTsKKyAgICBtX2NvbnRleHRDb250cm9sbGVyLnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3Rh
dGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgW21fdmlldy5nZXQoKSBoYW5kbGVB
Y2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlOmFjY2VwdGVkQWx0ZXJuYXRpdmVdOworICAgIG1f
dmlldy5jbGVhcigpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
ZGlzbWlzc0FsdGVybmF0aXZlcygpCit7CisgICAgaWYgKCFtX3ZpZXcpCisgICAgICAgIHJldHVy
bjsKKyAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gZGlzbWlzc0NvcnJl
Y3Rpb25JbmRpY2F0b3JGb3JWaWV3Om1fdmlldy5nZXQoKV07Cit9CisKK3ZvaWQgRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0
aW9uQ29udGV4dCkKK3sKKyAgICBtX2NvbnRleHRDb250cm9sbGVyLnJlbW92ZUFsdGVybmF0aXZl
c0ZvckRpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7Cit9Cit9CisjZW5kaWYgLy8g
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODAw
MjMzMTE3OGJhZDM5MTQzODVmOTU0ODU5OTEyZGRiZDY5NmNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaApA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2VfaAorI2RlZmluZSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitPQkpDX0NMQVNT
IE5TVGV4dEFsdGVybmF0aXZlczsKKworc3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSB7
CisgICAgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKE5TVGV4dEFsdGVybmF0aXZlcyogYW5BbHRl
cm5hdGl2ZXMsIE5TUmFuZ2UgYVJhbmdlKTsKKyAgICBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uo
Y29uc3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKTsKKyAgICBOU1JhbmdlIHJh
bmdlOworICAgIFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+IGFsdGVybmF0aXZlczsKK307
CisKKyNlbHNlCitzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlIHsgfTsKKyNlbmRpZgor
CisjZW5kaWYgLy8gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTA2MTU0MmRhOWRlYjBlMTljNWViMWE4NzdkNDQ0MjhmOTg3YmVjYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZl
V2l0aFJhbmdlLm1tCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKKworI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5o
PgorCitUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShO
U1RleHRBbHRlcm5hdGl2ZXMqIGFuQWx0ZXJuYXRpdmVzLCBOU1JhbmdlIGFSYW5nZSkKKzogcmFu
Z2UoYVJhbmdlKQorLCBhbHRlcm5hdGl2ZXMoYW5BbHRlcm5hdGl2ZXMpCit7Cit9CisKK1RleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKGNvbnN0IFRleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZSYgYW5vdGhlcikKKzogcmFuZ2UoYW5vdGhlci5yYW5nZSkKKywg
YWx0ZXJuYXRpdmVzKGFub3RoZXIuYWx0ZXJuYXRpdmVzKQoreworfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IDM1ODQ3
MTgyZTE0MGI3ZDg0ZDA5ODM0NmI2OGI3M2ViMWEwODY0ZjAuLmNhZGM5NDQ3NzNlZGNjNTJkMzU4
ZGIzODE5YmU4ZmJlM2YxZmY4YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zNSw5ICszNSwxMSBAQAogI2ltcG9ydCAiUGFnZUNs
aWVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxp
dGllcy5oIgorI2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCiAjaW1wb3J0ICJU
ZXh0Q2hlY2tlci5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQ
cm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUu
aD4KQEAgLTE5OCw2ICsyMDAsMzUgQEAgYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQKICAgICByZXR1
cm4gaGFuZGxlZDsKIH0KIAorYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0
X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcykKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKKyAgICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNl
bWVudFJhbmdlRW5kKTsKKyAgICAKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4gZGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRp
Y3RhdGlvbkFsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2UmIGFsdGVybmF0aXZlV2l0aFJhbmdlID0gZGljdGF0aW9uQWx0ZXJu
YXRpdmVzW2ldOworICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gbV9wYWdlQ2xp
ZW50LT5hZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVXaXRoUmFuZ2UuYWx0ZXJu
YXRpdmVzKTsKKyAgICAgICAgaWYgKGRpY3RhdGlvbkNvbnRleHQpCisgICAgICAgICAgICBkaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucy5hcHBlbmQoRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbihhbHRlcm5hdGl2ZVdpdGhSYW5nZS5yYW5nZS5sb2NhdGlvbiwgYWx0ZXJuYXRpdmVXaXRo
UmFuZ2UucmFuZ2UubGVuZ3RoLCBkaWN0YXRpb25Db250ZXh0KSk7CisgICAgfQorCisgICAgaWYg
KGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdl
RW5kKTsKKyAgICAKKyAgICBib29sIGhhbmRsZWQgPSB0cnVlOworICAgIHByb2Nlc3MoKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCByZXBsYWNl
bWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQsIGRpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb25zKSwgTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydERpY3RhdGVkVGV4dDo6UmVwbHko
aGFuZGxlZCwgbV9lZGl0b3JTdGF0ZSksIG1fcGFnZUlEKTsKKyAgICByZXR1cm4gaGFuZGxlZDsK
KyNlbHNlCisgICAgcmV0dXJuIGluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCByZXBsYWNlbWVudFJhbmdlRW5kKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQogewog
ICAgIGxvY2F0aW9uID0gTlNOb3RGb3VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNzljOTYxZjQ3ZGE3OTNkZjQxOGUwNzVl
Mzg3YjMzYmFhM2I1NmJlLi5jMmUwMDY0YmYxOGEyODIyODI2YzcwODAzZTVjZjdjMTBiYTZlMWM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC04ODMsNiArODgzLDkgQEAKIAkJQ0RDQTg1QzkxMzJBQkE0RTAwRTk2MURGIC8qIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0E4NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLmggKi87IH07CiAJCUNEQ0E4NUQ1MTMyQUMyQjMwMEU5NjFERiAv
KiBJT0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRENBODVENDEzMkFDMkIzMDBFOTYxREYgLyogSU9LaXQuZnJhbWV3b3JrICov
OyB9OwogCQlDRENBODVFRTEzMkFENzAxMDBFOTYxREYgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQ0E4NURFMTMyQUQwNTMwMEU5NjFERiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWFj
Lm1tICovOyB9OworCQlDRTYyNUI2RTE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0U2MjVCNkMxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5tbSAqLzsgfTsKKwkJQ0U2MjVCNkYxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0U2MjVCNkQxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oICovOyB9OworCQlDRUQyQjc4MjE1MUE1RTQ2MDAzQUJDRUYg
LyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBNjlEM0IxNTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5tbSAqLzsgfTsKIAkJRDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8q
IFdlYlBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEM0I5NDg0MjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLzsg
fTsKIAkJRDNCOTQ4NDcxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDMxMUZGNEI2NTAw
MDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICovOyB9OwogCQlEM0I5NDg0ODExRkY0QjY1MDAwMzJC
MzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQ
b3B1cE1lbnUuY3BwICovOyB9OwpAQCAtMTkzNyw2ICsxOTQwLDEwIEBACiAJCUNEQ0E4NUM3MTMy
QUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDQTg1RDQxMzJBQzJCMzAwRTk2MURGIC8q
IElPS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlDRENBODVERTEzMkFEMDUzMDBFOTYxREYgLyogV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNFNjI1QjZDMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNFNjI1QjZEMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNFQTY5RDNCMTUxQTQxQzQwMEY3NDNERSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQTY5RDNDMTUxQTQx
QzQwMEY3NDNERSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQyMTFGRjRCNjUw
MDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1lbnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1l
bnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQzMiw2ICszNDM5LDEwIEBA
CiAJCQkJMUE2NDI5MkMxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSAqLywK
IAkJCQlCODc4QjYxMzEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggKi8sCiAJ
CQkJQjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLywKKwkJ
CQlDRTYyNUI2RDE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyLmggKi8sCisJCQkJQ0U2MjVCNkMxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlci5tbSAqLywKKwkJCQlDRUE2OUQzQzE1MUE0MUM0MDBGNzQzREUgLyog
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi8sCisJCQkJQ0VBNjlEM0IxNTFBNDFDNDAwRjc0
M0RFIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSAqLywKIAkJCQkxQUE0MTdFRDEyQzAw
RDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJNYWMubW0gKi8sCiAJCQkJMUFGMDVEODUxNDY4ODM0
ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCAqLywKIAkJ
CQkxQUYwNUQ4NDE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWFQcm94eS5tbSAqLywKQEAgLTQxNzgsNiArNDE4OSw3IEBACiAJCQkJMzc2MDg4MjMxNTA0MTRG
NzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQw
NDE1MEMzNTA2MDBFNTJDRTkgLyogV2ViUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3OTQ4NDA5MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDRTYyNUI2RjE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ2NTEsNiArNDY2Myw3IEBACiAJCQkJQzAx
QTI2MDExMjY2MkYyMTAwQzlFRDU1IC8qIFNoYXJlYWJsZUJpdG1hcENHLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBMjRCRjNBMTIwODk2QTYwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnlNYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3Rp
Y3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFRDJCNzgyMTUxQTVFNDYwMDNBQkNFRiAv
KiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE0MTdF
RjEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0Y1MDEyMjEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNGNTAxQjQxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC00OTIxLDYgKzQ5MzQsNyBAQAogCQkJCTM3NjA4ODIyMTUw
NDE0RjcwMEZDODJDNyAvKiBXS1JlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
Nzk0ODQwMzE1MEMzNTA2MDBFNTJDRTkgLyogV2ViUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzc5NDg0MDgxNTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQ0U2MjVCNkUxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgK
aW5kZXggNzhlYThkYmZlZTE0ZmM3N2YwNjY2NTIwOGU2ZjU5ZTFiMDU5MDEzMi4uYmI0ODVhYzJk
YTE1OGYzZGM4NTIxYmE3NzkzZGRjNDcwOGZhMDEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBA
IC0xNDgsNiArMTQ4LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlm
CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdmlydHVhbCB2b2lkIHNob3dE
aWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBk
aWN0YXRpb25Db250ZXh0KSBPVkVSUklERTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgT1ZFUlJJREU7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkVkaXRvckNsaWVudE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQppbmRleCA1MjNjYmRmNzIwNjNiNGQx
ZDc5NGM4MWFjNTBlZjE2MDRiMWUyMmJmLi5lNjVlYmUwZWMzMmQyOTI4MTM5NzhiZmYwYzdhNTg5
MzhiNTJmOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCkBAIC0yNjIs
NCArMjYyLDIxIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SCiB9CiAjZW5kaWYKIAorI2lmIFVT
RShESUNUQVRJT05fQUxURVJOQVRJVkVTKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dEaWN0
YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVk
VGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdC
b3hPZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCkpOworfQorICAgIAordm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkKK3sKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0
aXZlVUkoKSk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3Rh
dGlvbkNvbnRleHQpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5ZjhmYjhl
MjQ2YjExYjQyMGRlZWYwYzhkMTljZDE2ZWMwMGE5MDA5Li4wYTEwNGZmODFhOTFjMTI0YTgzZGUy
NWNmODUxNWI3OWIzMTNkMmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCkBAIC0yOTk2LDcgKzI5OTYsOCBAQCBib29sIFdlYlBhZ2U6OmNhbkhh
bmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAg
IHJldHVybiBwbGF0Zm9ybUNhbkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiB9CiAKLSNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBQTEFU
Rk9STShNQUMpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogdm9pZCBX
ZWJQYWdlOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQp
CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CkBAIC0zMDA0LDYgKzMwMDUsMTcgQEAgdm9pZCBXZWJQYWdlOjpoYW5k
bGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiAgICAgICAgIHJl
dHVybjsKICAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChy
ZXN1bHQpOwogfQorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKK3ZvaWQgV2ViUGFn
ZTo6aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVy
bmF0aXZlKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsK
KyAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUo
YWx0ZXJuYXRpdmUpOworfQorI2VuZGlmCisjZW5kaWYKICNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6
OnNpbXVsYXRlTW91c2VEb3duKGludCBidXR0b24sIFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9u
LCBpbnQgY2xpY2tDb3VudCwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1l
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZTlk
ZTJlZGMwYzhmMzUyOTE4NWE1NjE5ZGE1NjI0ZjYxMzk0MWIzZi4uYjQ5ZWFjZjg2MzE3OWVjZTcy
NTI1NzA3NWM2Y2UyYTRkM2M1YjVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiU2FuZGJveEV4dGVu
c2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlVuZG9T
dGVwLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9y
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CkBAIC00MDMsNyArNDA0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KGNv
bnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYsIGJvb2wmIHJlc3VsdCk7CiAgICAgdm9pZCBhY2Nl
cHRzRmlyc3RNb3VzZShpbnQgZXZlbnROdW1iZXIsIGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVu
dCYsIGJvb2wmIHJlc3VsdCk7CiAgICAgYm9vbCBwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9y
U2VsZWN0b3IoY29uc3QgU3RyaW5nJik7Ci0KKyAgICB2b2lkIGluc2VydERpY3RhdGVkVGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0
X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgYm9vbCYg
aGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5n
KTsKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBjb21wb3NpdGlv
blN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+
JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBjdXJzb3JQb3NpdGlvbik7CkBAIC00ODUsOSArNDg2LDEz
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdW5tYXJrQWxsTWlzc3BlbGxpbmdzKCk7CiAgICAgdm9p
ZCB1bm1hcmtBbGxCYWRHcmFtbWFyKCk7Ci0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBQTEFURk9STShNQUMpCisjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGNvbnN0IFN0cmluZyYpOworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04p
CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0IFN0cmlu
ZyYpOworI2VuZGlmCisjZW5kaWYKICNlbmRpZgogCiAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9z
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KaW5kZXggMTkzNWZlMzMzN2Y3NTQwMGY0MzEzMWQ1MzM3ZjQ0MGJiODZjMmVk
OS4uZjY4YmE0YmZlNDQ4MDZiMjA4YWQ3ZjlhNjdmNjA5NjJkOGIyYzY2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
QEAgLTI0MSw2ICsyNDEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBFeGVjdXRlS2V5
cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1h
bmRzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQogICAg
IFNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChXZWJLaXQ6OldlYk1vdXNlRXZlbnQgZXZl
bnQpIC0+IChib29sIHJlc3VsdCkKICAgICBBY2NlcHRzRmlyc3RNb3VzZShpbnQgZXZlbnROdW1i
ZXIsIFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQorICAgIElu
c2VydERpY3RhdGVkVGV4dChXVEY6OlN0cmluZyB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJh
bmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIFdURjo6VmVjdG9yPFdlYkNv
cmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGRpY3RhdGlvbkFsdGVybmF0aXZlcykg
LT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKICNlbmRpZgog
I2lmIFBMQVRGT1JNKFdJTikKICAgICAvLyBGSVhNRTogVW5pZnkgd2l0aCBNYWMgY291bnRlcnBh
cnRzLgpAQCAtMjU3LDcgKzI1OCwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBGaW5k
Wm9vbWFibGVBcmVhRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CiAgICAgSGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KFN0cmluZyByZXN1bHQpCisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTElPTikKKyAgICBIYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVy
bmF0aXZlKFN0cmluZyBhbHRlcm5hdGl2ZSkKKyNlbmRpZgorI2VuZGlmCiAjZW5kaWYKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQppbmRleCBlY2E1MjNkMWZjYmVmZjk2N2YwYWIwZDIzNGRjNzBkYWVkMmYzODVkLi42MjEwOWE5
NDY4NzgxNzhkY2MxNDRmZDA2MWRjZDBhOTVlOTBhNjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0yODYsNiArMjg2
LDIxIEBAIHZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2
NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWluCiAgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0
ZSgpOwogfQogCit2b2lkIFdlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZUVuZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgYm9vbCYgaGFuZGxlZCwgRWRp
dG9yU3RhdGUmIG5ld1N0YXRlKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIAorICAgIGlmIChyZXBsYWNl
bWVudFJhbmdlU3RhcnQgIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJl
cGxhY2VtZW50UmFuZ2UgPSBjb252ZXJ0VG9SYW5nZShmcmFtZSwgTlNNYWtlUmFuZ2UocmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kIC0gcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0KSk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudFJhbmdlKQorICAgICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJh
bmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgIH0KKworICAgIEFTU0VSVCgh
ZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKTsKKyAgICBoYW5kbGVkID0gZnJhbWUt
PmVkaXRvcigpLT5pbnNlcnREaWN0YXRlZFRleHQodGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbnMsIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQpOworICAgIG5ld1N0YXRl
ID0gZWRpdG9yU3RhdGUoKTsKK30KKwogdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZSh1aW50
NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCiB7CiAgICAgbG9jYXRpb24gPSBOU05v
dEZvdW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134612</attachid>
            <date>2012-03-29 10:34:40 -0700</date>
            <delta_ts>2012-03-29 10:47:13 -0700</delta_ts>
            <desc>Patch (v3)</desc>
            <filename>bug-82503-20120329103439.patch</filename>
            <type>text/plain</type>
            <size>220580</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ3MjQ1M2Q3N2NkZjVj
NDZiMzJiOGM3ZDA3ZjZjOGU1N2VlZjcwYi4uZWE1NDQ2MTE1ZjZhNGQwNmVhZDBjZGY5MzEyYmMx
ZjQ5YmQ0NTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAxMi0wMy0yOSAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJu
YXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIE9TWCBzcGVjaWZpYyBwYXRjaCB0aGF0
IGFsbG93cyBXZWJLaXQgdG8gdXRpbGl6ZSBBcHBLaXQgVUkgdG8gZGlzcGxheSBhbHRlcm5hdGl2
ZQorICAgICAgICBkaWN0YXRpb24gcmVzdWx0cyBmb3IgYSBnaXZlbiB0ZXh0LiBUbyBhY2hpZXZl
IHRoaXMsIHRoaXMgcmVsYXRpdmVseSBsYXJnZSBwYXRjaCBpbnRyb2R1Y2VkCisgICAgICAgIGZv
bGxvd2luZyBtYWpvciBjaGFuZ2VzOgorCisgICAgICAgIDEuIE1vZGlmaWVkIFRleHRFdmVudCB0
byBob2xkIGRpY3RhdGlvbiByZWxhdGVkIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIHRleHQu
CisgICAgICAgIDIuIEludHJvZHVjZWQgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyB0byBtYXJrIHRleHQgZm9yIHdoaWNoIGRpY3RhdGlvbgorICAgICAgICAgICAgc3lzdGVt
IHByb3ZpZGVkIGFsdGVybmF0aXZlcy4KKyAgICAgICAgMy4gSW50cm9kdWNlZCBEaWN0YXRpb25D
b21tYW5kIHdoaWNoIHdpbGwgYWRkIERpY3RhdGlvbkFsdGVybmF0aXZlIG1hcmtlcnMgdG8gdGV4
dAorICAgICAgICAgICBpbnNlcnRlZCBieSB0aGUgY29tbWFuZC4KKyAgICAgICAgNC4gQWRkZWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KCkgdG8gRWRpdG9yLgorICAgICAgICA1LiBJbnRyb2R1Y2VkIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciB3aGljaCBzZXJ2ZXMgc2ltaWxhciByb2xlIGFz
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuCisgICAgICAgIDYuIEFkZGVkIG5lY2Vzc2Fy
eSBpbnRlcmZhY2UgdG8gRWRpdG9yQ2xpZW50IHNpbWlsYXIgdG8gdGhvc2UgYWRkZWQgZm9yIGNv
cnJlY3Rpb24gcGFuZWwgVUkgb24gT1NYLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6RG9jdW1lbnRNYXJrZXIpOiBDcmVhdGUgbWFya2VyIHVzaW5nIHN1cHBsaWVkIERvY3VtZW50
TWFya2VyRGV0YWlscyBvYmplY3QuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnRNYXJrZXIuaDogQWRkZWQgRGljdGF0aW9uQWx0ZXJuYXRpdmUgbWFya2VyIHR5cGUu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vyczo6QWxsTWFya2Vy
cyk6CisgICAgICAgIChEb2N1bWVudE1hcmtlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOgorICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKToKKyAg
ICAgICAgKiBkb20vVGV4dEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6
Y3JlYXRlRm9yRGljdGF0aW9uKTogQ3JlYXRlIFRleHRFdmVudCBnZW5lcmF0ZWQgYnkgZGljdGF0
aW9uLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OlRl
eHRFdmVudCk6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAoVGV4dEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6aXNEaWN0YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEV2ZW50OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIGRv
bS9UZXh0RXZlbnRJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJlc3BvbmRUb0NhcmV0QXRFbmRPZldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0
ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VUZXh0SW5SYW5nZSk6CisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IEFkZGVkLiBUaGlzIGNsYXNzIHNlcnZl
cyB0byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBJdCBjb250YWlucyBzb21lIGZ1bmN0aW9ucyBz
aGFyZWQgYnkgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciBhbmQKKyAgICAgICAgICBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuIDIpIEluIHNpdHVhdGlvbiB3aGVyZSBFZGl0b3Ig
aW50ZXJhY3Qgd2l0aAorICAgICAgICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgYW5k
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciBpbiBzYW1lIGZhc2hpb24sIAorICAgICAg
ICAgIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgc2VydmVzIGFzIGEgcHJveHkgZm9yIHRob3Nl
IHR3byBjbGFzc2VzLCBzbyB0aGF0IEVkaXRvcgorICAgICAgICAgIG9ubHkgbmVlZCB0byBpbnRl
cmFjdHMgd2l0aCBvbmUgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNl
cnRUZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSk6IFByb3ZpZGUgYW4gaW50ZXJmYWNlCisgICAgICAg
ICAgIHRvIGFkZCBtYXJrZXJzIGFsb25nIHdpdGggdGV4dC4gSXQncyBjdXJyZW50bHkgdXNlZCBi
eSBEaWN0YXRpb25Db21tYW5kLCBidXQgY291bGQKKyAgICAgICAgICAgYmUgdXNlZnVsIGZvciBv
dGhlciBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNEaWN0YXRpb25Db21tYW5k
KToKKyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpEaWN0YXRpb25N
YXJrZXJEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c3Rv
cFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6ZGlzbWlzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5h
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OnJlbW92ZUFsdGVybmF0aXZlc0Zvck1hcmtlcik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDogQWRkZWQuIFNpbWlsYXIgdG8gU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlciwKKyAgICAgICAgICB0aGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBsb2dp
YyByZWdhcmRpbmcgd2hlbiB0byBzaG93IG9yIGRpc21pc3MgYWx0ZXJuYXRpdmUgZGljdGF0aW9u
CisgICAgICAgICAgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEaWN0YXRp
b25NYXJrZXJEZXRhaWxzKTogQSBzdWJjbGFzcyBvZiBEb2N1bWVudE1hcmtlckRldGFpbHMgdXNl
ZCBieSBEaWN0YXRpb25BbHRlcm5hdGl2ZQorICAgICAgICAgIHR5cGUgbWFya2VyLgorICAgICAg
ICAoV2ViQ29yZTo6RGljdGF0aW9uTWFya2VyRGV0YWlsczo6b3JpZ2luYWxUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6OmRpY3RhdGlvbkNvbnRleHQpOgor
ICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZVVJSW5mbzo6RGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAo
RGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9u
QWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb24uaDogQWRkZWQuICBJdCBjb250YWlucyB0aGUgcmFuZ2UgaW4gd2hpY2ggdGhlCisg
ICAgICAgICAgaW5wdXQgdGV4dCBoYXMgYWx0ZXJuYXRpdmUgZGljdGF0aW9uIHJlc3VsdCwgYW5k
IGFuIGludGVnZXIgdGhhdCBpZGVudGlmeSBkaWN0YXRpb24gY29udGV4dC4KKyAgICAgICAgKERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OkRpY3RhdGlvbkNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmNvbGxlY3REaWN0YXRpb25N
YXJrZXJzSW5SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmg6IEFk
ZGVkLiBTaW1pbGFyIHRvIFR5cGluZ0NvbW1hbmQsIGJ1dCBhbGxvd3MgdXMgdG8KKyAgICAgICAg
ICBwYXNzIGFkZGl0aW9uYWwgZGljdGF0aW9uIHJlbGF0ZWQgaW5mb3JtYXRpb24gYWxvbmcgd2l0
aCB0aGUgdGV4dC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGljdGF0aW9uQ29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppc0RpY3RhdGlvbkNvbW1h
bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5vdGlm
eUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjphcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnVuYXBwbGllZEVk
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0
ZXJuYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQWx0ZXJuYXRpdmVU
ZXh0VUkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRWRpdG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQp
OiBBbGxvdyBwYXNzaW5nIG1hcmtlcnMgCisgICAgICAgICAgYWxvbmcgd2l0aCB0ZXh0LgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKEluc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRDb21tYW5kKTogQWxsb3cgcGFz
c2luZyBtYXJrZXJzIAorICAgICAgICAgIGFsb25nIHdpdGggdGV4dC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgIChJ
bnNlcnRUZXh0Q29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAg
KiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAg
ICAgKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkU3RhcnRUaW1lckZvcik6CisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAg
ICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkFw
cGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24pOiBNb3ZlZCB0aGlzIGZ1bmN0aW9uIGZyb20gVHlw
aW5nQ29tbWFuZAorICAgICAgICAgIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYnkgRGljdGF0aW9u
Q29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNl
bGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oOgorICAgICAgICAoRW1wdHlFZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVV
SSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9u
QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVEaWN0YXRpb25JbnB1dEV2ZW50KToKKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAoRXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4
dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhp
Y3NDb250ZXh0T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dE1hcmtlckxp
bmVTdHlsZUZvck1hcmtlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRpb25NYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zyb20p
OgorCiAyMDEyLTAzLTI5ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNuaXBwZXRzU2NyaXB0TWFwcGluZyBzaG91bGQgcHJv
Y2VzcyBleGlzdGluZyBzbmlwcGV0cyBvbiBsb2FkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiNzMxYmQ5ZDU5NGEz
MDYwM2FkNmNmNGVmOGI4ZDYyNmM1MzMzMTRjLi41ZjMzZjg2NDNkMWUwMzFmMmMyMGMyNTkwMmRl
MGY1ODg1ZTZkNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTI5ICBKaWEg
UHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgVUkgdG8gc2hvdyBhbHRlcm5h
dGl2ZSBzdHJpbmdzIG9mIGRpY3RhdGVkIHRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNlZSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRl
dGFpbHMuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxMi0wMy0yMiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFrdWNvQEZyZWVCU0Qub3JnPgog
CiAgICAgICAgIFtDTWFrZV0gVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjExMTc3OC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCBiMGUxYWI5NjMwNmRmZWY0NjRkN2NjMDVjMzhiYTg3MmJlZjhiYjg0
Li44MDI2MGE1ZWEyNjM1NjYzMDQwODdmOTZiNWUzZWFmNzQ2MmNkOGQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTItMDMtMjkgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+
CisKKyAgICAgICAgUHJvdmlkZSBVSSB0byBzaG93IGFsdGVybmF0aXZlIHN0cmluZ3Mgb2YgZGlj
dGF0ZWQgdGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyNTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgZGV0YWlscy4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oOiBBZGRlZC4g
VGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorICAgICAgICAgIDEpIFJldGFpbiB0aGUg
ZGljdGF0aW9uIGFsdGVybmF0aXZlIG9iamVjdHMgcHJvdmlkZWQgYnkgQXBwS2l0LCBhbmQgcHJv
dmlkZSBhbgorICAgICAgICAgICAgIGludGVnZXIgdG8gb2JqZWN0IG1hcHBpbmcgZm9yIFdlYkNv
cmUuCisgICAgICAgICAgMikgQ29udHJvbCBkaWN0YXRpb24gYWx0ZXJuYXRpdmUgVUkuCisgICAg
ICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOgorICAgICAgICAoRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOgor
ICAgICAgICAoRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6RGljdGF0
aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5tbTogQWRkZWQuCisgICAgICAgIChEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjphZGRBbHRlcm5h
dGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRp
b25Db250ZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRD
b250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KToKKyAgICAg
ICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRy
b2xsZXI6OmNsZWFyKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
YWRkQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6Y2xlYXIpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpzaG93
QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlLm1tOiBBZGRlZC4gQSBzaW1wbGUgc3RydWN0IHRoYXQgaGVscHMg
dG8KKyAgICAgICAgICBwYXNzIGFyb3VuZCBhIGNvdXBsZSBvZiBwaWVjZXMgb2YgaW5mb3JtYXRp
b24uCisgICAgICAgIChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdp
dGhSYW5nZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29sbGVjdERpY3RhdGlvblRleHRBbHRl
cm5hdGl2ZXMpOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfaW5zZXJ0RGljdGF0
ZWRUZXh0OmFsdGVybmF0aXZlczp0cmlnZ2VyaW5nRXZlbnQ6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOldlYkNvcmU6OmZvckRpY3RhdGlvbkNvbnRl
eHQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3JlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlczpdKToK
KyAgICAgICAgKC1bV2ViVmlldyBfaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZTpd
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3RGF0YS5tbToKKyAgICAgICAgKC1bV2ViVmlld1ByaXZhdGUgaW5pdF0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAx
Mi0wMy0yOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
bW92ZSBkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2UgY2FsbGJhY2ssIHNpbmNlIG5vCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggNzI2ODIxZDA5NzQ1ZmI4MzkwN2JiMTU0MGI2ZDljOTY5MTQ2ODMwMS4uZTE0NGJh
YjYxNGYxNWJlM2MyYTMxNDMwZTFkNzg0YjY5NjRkNGFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDkxIEBACisyMDEyLTAzLTI5ICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFBy
b3ZpZGUgVUkgdG8gc2hvdyBhbHRlcm5hdGl2ZSBzdHJpbmdzIG9mIGRpY3RhdGVkIHRleHQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjUwMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlZSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAg
ICAgKENvcmVJUEMpOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoUGFnZUNsaWVudEltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6UGFn
ZUNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3Nl
ZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
YWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoY29sbGVjdERpY3RhdGlv
blRleHRBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpyZXBsYWNl
bWVudFJhbmdlOl0pOgorICAgICAgICAoLVtXS1ZpZXcgaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25B
bHRlcm5hdGl2ZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5h
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgIChQYWdlQ2xp
ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlQWNjZXB0ZWREaWN0
YXRpb25BbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
c21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oOiBBZGRlZC4gVGhpcyBjbGFzcyBzZXJ2ZXMg
dHdvIHB1cnBvc2VzOgorICAgICAgICAgIDEpIFJldGFpbiB0aGUgZGljdGF0aW9uIGFsdGVybmF0
aXZlIG9iamVjdHMgcHJvdmlkZWQgYnkgQXBwS2l0LCBhbmQgcHJvdmlkZSBhbgorICAgICAgICAg
ICAgIGludGVnZXIgdG8gb2JqZWN0IG1hcHBpbmcgZm9yIFdlYkNvcmUuCisgICAgICAgICAgMikg
Q29udHJvbCBkaWN0YXRpb24gYWx0ZXJuYXRpdmUgVUkuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIpOgorICAgICAgICAoRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAgICAo
V2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRD
b250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcik6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW06IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKToKKyAgICAg
ICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250
ZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4
dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNv
bnRleHRDb250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYktpdDo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c2hvd0FsdGVybmF0aXZlcyk6CisgICAgICAg
IChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRB
bHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oOiBBZGRlZC4gQSBzaW1wbGUgc3Ry
dWN0IHRoYXQgaGVscHMgdG8KKyAgICAgICAgICBwYXNzIGFyb3VuZCBhIGNvdXBsZSBvZiBwaWVj
ZXMgb2YgaW5mb3JtYXRpb24uCisgICAgICAgIChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOiBBZGRl
ZC4KKyAgICAgICAgKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnNlcnREaWN0YXRlZFRleHQpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRN
YWMubW06CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRp
dG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0
aXZlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAo
V2ViUGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQpOgorICAgICAgICAoV2Vi
S2l0KToKKwogMjAxMi0wMy0yOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBhIGNyYXNoIGFuZCBhbiBhc3NlcnRpb24gd2hlbiByZWNvdmVyaW5n
IGZyb20gYSB3ZWIgcHJvY2VzcyBjcmFzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNjMwZjNk
NzQ2NGNjNjJiYTNhZjRmY2U0OTYwOTU4MzkzZTRiMWM3Li44NjMzNmYxZDM1NTU0Y2EzYWIzOGZh
OWRiOGRhMTRmMzlkMDAxOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNjUzLDYgKzY1Myw3
IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcAogCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHAKQEAgLTY2Myw2ICs2NjQsOSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9E
ZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisgICAg
ZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwCisgICAgZWRpdGluZy9E
aWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcAorICAgIGVkaXRpbmcvRGljdGF0aW9uQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMWZkYzY5
Y2Y3M2JiMzNiYTA5YjI3OTdjNDA5ZDcyZGE5YWU3ZWJhNy4uYTVjNGEwMTA4MDc2ZDYyYTk0NjAz
MjUzN2FiZWJiMmFhMjRhZDA0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC02MjcsNiArNjI3LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZG9tL1doZWVsRXZlbnQuY3BwIFwKICAgICBkb20vV2luZG93RXZlbnRD
b250ZXh0LmNwcCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIFwKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIFwKICAgICBl
ZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBcCkBA
IC02MzcsNiArNjM4LDkgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVCdXR0b24u
Y3BwIFwKICAgICBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBl
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKKyAgICBlZGl0aW5nL0RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgXAorICAgIGVkaXRpbmcvRGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbi5jcHAgXAorICAgIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgXAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcCBcCkBAIC0xNzU3LDYgKzE3NjEsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBkb20vV2ViS2l0TmFtZWRGbG93LmggXAogICAgIGRvbS9XZWJLaXRUcmFu
c2l0aW9uRXZlbnQuaCBcCiAgICAgZG9tL1doZWVsRXZlbnQuaCBcCisgICAgZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQu
aCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCBcCiAgICAgZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oIFwKQEAgLTE3NjcsNiArMTc3Miw5IEBAIEhFQURFUlMgKz0g
XAogICAgIGVkaXRpbmcvRGVsZXRlQnV0dG9uLmggXAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBc
CisgICAgZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCBcCisgICAgZWRp
dGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmggXAorICAgIGVkaXRpbmcvRGljdGF0
aW9uQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmggXAogICAgIGVkaXRpbmcv
RWRpdGluZ1N0eWxlLmggXAogICAgIGVkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCAwYzQyNmY3ZTBjMTdmNjMyOTI3OGZmMWJkZGRkNWFmMzc4NDVjNzI5
Li44NGFiMDA1MzMwODM0ZDVkZTEyZWQ3OTEzY2ZmOTZmNGJjMGVlOWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgpAQCAtNzEwLDYgKzcxMCw5IEBAIF9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzRXYKK19fWk43V2ViQ29yZTI4RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbkMxRVJLUzBfCitfX1pON1dlYkNvcmUyOERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb25DMUV5eXkKK19fWk43V2ViQ29yZTI4RGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbkMxRXYKIF9fWk43V2ViQ29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6
ZUV2CiBfX1pON1dlYkNvcmUyOGNvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnNFdgogX19aTjdX
ZWJDb3JlMjhjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzRXYKQEAgLTg2OCw2ICs4NzEsNyBA
QCBfX1pON1dlYkNvcmU2RWRpdG9yMTdjYW5jZWxDb21wb3NpdGlvbkV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJt
Q29tcG9zaXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJt
Q29tcG9zaXRpb25FdgorX19aTjdXZWJDb3JlNkVkaXRvcjE4aW5zZXJ0RGljdGF0ZWRUZXh0RVJL
TjNXVEY2U3RyaW5nRVJLTlMxXzZWZWN0b3JJTlNfMjhEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uRUxtMEVFRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNG
b3JUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFuZ2VFampiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTlkZWxldGVXaXRoRGlyZWN0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdy
YW51bGFyaXR5RWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYK
QEAgLTg5MCw2ICs4OTQsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMzBkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGVFYgogX19aTjdXZWJDb3JlNkVkaXRvcjMwcGFzdGVBc1BsYWluVGV4dEJ5
cGFzc2luZ0RIVE1MRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMmd1ZXNzZXNGb3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzM2luY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsT3JkZXJlZEV2CitfX1pON1dlYkNvcmU2RWRpdG9yMzRoYW5kbGVBY2NlcHRlZERpY3Rh
dGlvbkFsdGVybmF0aXZlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjM0c2V0
TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZEViCiBfX1pON1dlYkNvcmU2RWRpdG9yMzVp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MzVzZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZUViCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggMmEzOGY3NzA5NDk5ZGI4MGI0MGMzYjBkYzAwNmQ1MzQ3Njc0NGQwYS4uYzY2ZjNlOTQ4MTk1
MDMxM2NkYjBlZDRmZWIyNmNkMTdhMTlkNTY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTcsNiAr
OTcsNyBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaCcsCiAgICAgICAg
ICAgICAnZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgnLAorICAgICAgICAgICAgJ2Vk
aXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oJywKICAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRBY3Rpb24uaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0Q29tbWFuZC5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oJywKQEAgLTI0ODcsNiArMjQ4
OCw3IEBACiAgICAgICAgICAgICAnY3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmNwcCcsCiAgICAg
ICAgICAgICAnY3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9X
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwZW5kTm9k
ZUNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCcsCkBA
IC0yNTA0LDYgKzI1MDYsOSBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24u
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5n
L0VkaXRpbmdBbGxJbk9uZS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IDVlMWRkZmEwN2RjYjM2MTllMDI3NzA3YjBhNDkwNzYwOWYyMzMxMWQuLmM3ZWJiYzIwZDEx
NDIwMzdkNDE0YWUyN2RjYTI0Y2E3N2NmYWM2ZWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01NDAwMiw2ICs1NDAwMiwxMiBAQAogCQkJTmFt
ZT0iZWRpdGluZyIKIAkJCT4KIAkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oIgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
QXBwZW5kTm9kZUNvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAg
LTU0NTEwLDYgKzU0NTE2LDI0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCSAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
LmNwcCIKKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcRGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbi5jcHAiCisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJICAgIFJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xEaWN0YXRpb25Db21tYW5k
LmNwcCIKKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXERpY3RhdGlvbkNvbW1hbmQuaCIKKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxlZGl0aW5nXEVkaXRBY3Rpb24uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZjIwMDhjM2UwNWUyYjM5NTQ2NDgzMTAyNjNjZjZiN2E3MGQzMWQyNy4uNDcwZGI5MjlkOTQ3ZjYw
NGEyYjlkMWIwYjUzZTI4MWIzMmMyMGE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE1OSw4ICsxMTU5LDYgQEAKIAkJNDQz
MTFDRDYxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENDEyRTRF
MjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQz
MTFDRDcxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDUxMkU0RTIyRDAwMEE4
RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oICovOyB9OwogCQk0NDMxMUNEODEyRTRFMjRCMDAw
QThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENTEyRTRFMjJEMDAwQThE
MTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi87IH07Ci0JCUE1NEE4MkVDMTUyMjhEMkYwMEM3
MkJBNiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU0QTgyRUExNTIyOENBMzAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRl
LmggKi87IH07Ci0JCUE1NEE4MkYxMTUyMjhERjYwMEM3MkJBNiAvKiBET01Ob2RlUHJpdmF0ZS5o
IGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU0QTgyRUExNTIyOENBMzAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmggKi87IH07
CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0
ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQ
cml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgyMTJFNEU2NkMwMDBBOEQxOSAvKiBET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01Eb2N1bWVudEZyYWdtZW50
SW50ZXJuYWwuaCAqLzsgfTsKIAkJNDQ4QTI5QkYwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaCAqLzsgfTsKQEAgLTM2NzgsNiArMzY3Niw4IEBACiAJCUE0NTZGQTI3MTFBRDRBODMwMDIw
QjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTQ1NkZBMjUxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0
LmggKi87IH07CiAJCUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUM5NzRDRjEx
NDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5oICovOyB9OwogCQlBNTEzQjNEODExNEIx
NjZBMDAxQzQyOUIgLyogS2V5RXZlbnRDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1Qzk3NEQwMTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVu
dENvY29hLm1tICovOyB9OworCQlBNTRBODJFQzE1MjI4RDJGMDBDNzJCQTYgLyogRE9NTm9kZVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
NEE4MkVBMTUyMjhDQTMwMEM3MkJBNiAvKiBET01Ob2RlUHJpdmF0ZS5oICovOyB9OworCQlBNTRB
ODJGMTE1MjI4REY2MDBDNzJCQTYgLyogRE9NTm9kZVByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NEE4MkVBMTUy
MjhDQTMwMEM3MkJBNiAvKiBET01Ob2RlUHJpdmF0ZS5oICovOyB9OwogCQlBNTczMkIwQTEzNkEx
NjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU3MzJCMDgxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVD
b21wb25lbnRzLmNwcCAqLzsgfTsKIAkJQTU3MzJCMEIxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVD
b21wb25lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTczMkIwOTEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCAqLzsgfTsKIAkJ
QTU3MzJCMEQxMzZBMTZDNDAwNUM4RDdDIC8qIExvY2FsaXplZERhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NzMyQjBDMTM2QTE2QzQwMDVDOEQ3
QyAvKiBMb2NhbGl6ZWREYXRlLmggKi87IH07CkBAIC01MzgwLDcgKzUzODAsNiBAQAogCQlCQzgy
NDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhG
IC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLzsgfTsKIAkJQkM4MjQzRTgwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDODI0M0U2MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5j
cHAgKi87IH07CiAJCUJDODI0M0U5MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4MjQzRTcw
RDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMxN0JFIC8q
IFJlbmRlck5hbWVkRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM4NUYyM0MxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxv
d1RocmVhZC5oICovOyB9OwogCQlCQzg1RjIzRjE1MTkxODczMDBCQzE3QkUgLyogUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDODVGMjNFMTUxOTE4NzMwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwICovOyB9OwogCQlCQzhBRTM0RTEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4QUUz
NEMxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmNwcCAqLzsgfTsKIAkJQkM4QUUz
NEYxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYgLyog
U2Nyb2xsYWJsZUFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTU0OCw3ICs1NTQ3LDYgQEAKIAkJQkNFN0IxOTMwRDRFODY5NjAwNzVBNTM5
IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0U3QjE5MjBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9t
LmNwcCAqLzsgfTsKIAkJQkNFOTNGNDUxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFOTNG
NDQxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5oICovOyB9OwogCQlCQ0U5M0Y0
NzE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyUmVnaW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ2MTUxN0M2RDUwMDhDQ0Y3NCAv
KiBSZW5kZXJSZWdpb25TZXQuY3BwICovOyB9OwotCQlCQ0U5M0Y1MTE1MTdERENEMDA4Q0NGNzQg
LyogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U5M0Y1MDE1MTdERENEMDA4Q0NGNzQgLyogUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLmggKi87IH07CiAJCUJDRTkzRjUzMTUxN0UwQjAwMDhDQ0Y3
NCAvKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFOTNGNTIxNTE3RTBCMDAwOENDRjc0IC8qIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAgKi87IH07CiAJCUJDRUE0NzhGMDk3Q0FBQzgw
MDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0
IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07CiAJCUJDRUE0NzkwMDk3
Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0NzdEMDk3Q0FBQzgwMDk0
QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTcyOSw2ICs1NzI3LDE0IEBACiAJCUNF
NTRGRDM4MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U1NEZEMzcxMDE2RDlBNjAw
OEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0VBMzk0OUMxMUQ0NUNEQTAwMzA5NENGIC8qIFN0
YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRUEzOTQ5QTExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5v
ZGVMaXN0LmNwcCAqLzsgfTsKIAkJQ0VBMzk0OUQxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hh
c2hTZXROb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5o
ICovOyB9OworCQlDRUI4MjMxNDE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMx
MjE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi87IH07CisJCUNFQjgy
MzE1MTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMxMzE1MjNERUY3MDAzOTYxQzAg
LyogRGljdGF0aW9uQ29tbWFuZC5oICovOyB9OworCQlDRUI4MjMxQjE1MjNERjM0MDAzOTYxQzAg
LyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQjgyMzE3MTUyM0RGMzQwMDM5NjFDMCAvKiBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwICovOyB9OworCQlDRUI4MjMxQzE1MjNE
RjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMxODE1MjNERjM0MDAz
OTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggKi87IH07CisJCUNFQjgy
MzFEMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQjgyMzE5MTUy
M0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCAqLzsgfTsK
KwkJQ0VCODIzMUUxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQjgy
MzFBMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0VCODIzMjEx
NTIzREY1MjAwMzk2MUMwIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMUYxNTIzREY1MjAw
Mzk2MUMwIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwICovOyB9OworCQlDRUI4MjMy
MjE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMjAxNTIzREY1MjAw
Mzk2MUMwIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0VDQ0ZDM0Ix
NDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMx
IC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovOyB9OwogCQlDRUY0MThDRTExNzk2NzhDMDA5
RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0
QXJndW1lbnRzLmNwcCAqLzsgfTsKIAkJQ0VGNDE4Q0YxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdw
b3J0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTI4MTIsNiAr
MTI4MTgsMTQgQEAKIAkJQ0U1Q0IxQjMxNEVEQUI2RjAwQkIyNzk1IC8qIEV2ZW50U2VuZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50U2VuZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFQTM5NDlBMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNI
YXNoU2V0Tm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VCODIzMTIxNTIzREVGNzAwMzk2MUMwIC8qIERp
Y3RhdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGljdGF0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQjgy
MzEzMTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0VCODIzMTcxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDRUI4MjMxODE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4
MjMxOTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VCODIzMUExNTIz
REYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMxRjE1MjNERjUyMDAzOTYxQzAgLyog
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0VCODIzMjAxNTIzREY1MjAwMzk2MUMwIC8qIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUNDRkMz
QTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVzY2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRB
cmd1bWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDEx
Nzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2NTYzLDYgKzE2NTc3LDggQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJRUQ1MDFEQzkwQjI0OUYzOTAwQUUxOEQ5IC8qIG1hYyAqLywKKwkJCQlD
RUI4MjMxRjE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAg
Ki8sCisJCQkJQ0VCODIzMjAxNTIzREY1MjAwMzk2MUMwIC8qIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuaCAqLywKIAkJCQk5MzMwOUQ4NzA5OUU2NDkxMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNv
bW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDg4MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmROb2Rl
Q29tbWFuZC5oICovLAogCQkJCTlCNDE3MDYzMTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2Nr
RWxlbWVudENvbW1hbmQuY3BwICovLApAQCAtMTY1ODMsNiArMTY1OTksMTIgQEAKIAkJCQk5MzMw
OUQ5MDA5OUU2NDkxMDA1NkU1ODEgLyogRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5oICovLAog
CQkJCTkzMzA5RDkxMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cCAqLywKIAkJCQk5MzMwOUQ5MjA5OUU2NDkxMDA1NkU1ODEgLyogRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5oICovLAorCQkJCUNFQjgyMzE3MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIuY3BwICovLAorCQkJCUNFQjgyMzE4MTUyM0RGMzQwMDM5NjFDMCAv
KiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCAqLywKKwkJCQlDRUI4MjMxOTE1MjNE
RjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAgKi8sCisJCQkJ
Q0VCODIzMUExNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24u
aCAqLywKKwkJCQlDRUI4MjMxMjE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5j
cHAgKi8sCisJCQkJQ0VCODIzMTMxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQu
aCAqLywKIAkJCQk5MzMwOUQ5MzA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdEFjdGlvbi5oICovLAog
CQkJCTkzMzA5RDk0MDk5RTY0OTEwMDU2RTU4MSAvKiBFZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJ
OTMzMDlEOTUwOTlFNjQ5MTAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmggKi8sCkBAIC0yMjIzOSw2
ICsyMjI2MSw3IEBACiAJCQkJODUwMkFCOTcwQUQ0Mzk0RTAwMzc4NTQwIC8qIERPTVNWR0ZFRnVu
Y0JFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDJBQjU0MEFENDM4QzAw
MDM3ODU0MCAvKiBET01TVkdGRUZ1bmNHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUw
MkFCOTgwQUQ0Mzk0RTAwMzc4NTQwIC8qIERPTVNWR0ZFRnVuY0dFbGVtZW50SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAorCQkJCUNFQjgyMzFFMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAyQUI1NjBBRDQzOEMw
MDAzNzg1NDAgLyogRE9NU1ZHRkVGdW5jUkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
MDJBQjk5MEFENDM5NEUwMDM3ODU0MCAvKiBET01TVkdGRUZ1bmNSRWxlbWVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTAyQUI1ODBBRDQzOEMwMDAzNzg1NDAgLyogRE9NU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDg0LDcgKzIyNTA3LDEw
IEBACiAJCQkJQTdDQTU5NjMwQjI3QzFGMjAwRkEwMjFEIC8qIERyYWdDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3Q0E1OTVEMEIyN0JEOUUwMEZBMDIxRCAvKiBEcmFnQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNkU2OUYwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRh
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDRUI4MjMyMjE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDRkIzRDIwQjdFRDEw
QTAwNzBDMzJEIC8qIERyYWdJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0VCODIzMUMxNTIz
REYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQ0VCODIzMTUxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxNjkzNzlDMTQ2MDlDNkMwMEMwMTM2MiAvKiBEcmFnU2Vz
c2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFGNjVGRjYxMzc4OEZBQTAwRkY2RjJEIC8qIERy
YWdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk4NzcwREMxMjQyQzUzNTAwMjIyNkJBIC8q
IERyYXdpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ2NDcsMTEgKzI0NjczLDEwIEBA
CiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQyRUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJS
ZWdpb25TZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDRTkzRjUxMTUxN0REQ0QwMDhDQ0Y3NCAv
KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDODVG
MjNEMTUxOTE1RTAwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBRjg5QTQyMTUxOEZERUEwMEU1NDdCNSAvKiBUaWxlZEJhY2tpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZCNzhBRDJFMTUxQkY1RTYwMEZFNTREMyAvKiBDU1NQYXJzZXJNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUU2MjNEMTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRUI4MjMx
RTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yNzY0MSw2ICsyNzY2NiwxMCBAQAogCQkJCUJDRTkzRjUzMTUxN0UwQjAw
MDhDQ0Y3NCAvKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM4NUYyM0YxNTE5MTg3MzAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3MUU2MjNEMDE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFQjgy
MzE0MTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUNFQjgyMzFCMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0VCODIzMUQxNTIzREYzNDAwMzk2MUMw
IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0VCODIzMjExNTIzREY1MjAwMzk2MUMwIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcAppbmRleCBi
NGY5OTk0ZGI0ZWY2YWVjZmQ4YzU2NzkzMGI4MTc3ODhlZWJkNjFhLi41M2Q0M2U0ZWFiNTYwNmE2
Y2M2NWM3OGIzZjdmZWEzYjMzNDFjZjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5jcHAKQEAgLTEyMyw2ICsxMjMsMTQgQEAgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2Vy
KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWMKIHsKIH0K
IAorRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgUGFzc1JlZlB0cjxEb2N1bWVudE1h
cmtlckRldGFpbHM+IGRldGFpbHMpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fc3RhcnRP
ZmZzZXQoc3RhcnRPZmZzZXQpCisgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgLCBt
X2RldGFpbHMoZGV0YWlscykKK3sKK30KKwogdm9pZCBEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZz
ZXRzKGludCBkZWx0YSkKIHsKICAgICBtX3N0YXJ0T2Zmc2V0ICs9IGRlbHRhOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXIuaAppbmRleCA0MWVkODQ4MzY0MGRjZTVmOTkxZmM3MzZhYzMzYmQ3
ZTU2ZTk2MjQ1Li5jMWU3MzhkNDM2OTUxZDZlNzE0NDhhMDBmMDA5OTU2Y2RlNGI3N2Y0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaApAQCAtNjMsNyArNjMsMTAgQEAgcHVibGljOgog
ICAgICAgICAvLyByYW5nZSB0aGF0IGJlYXJzIHRoaXMgbWFya2VyLiBJbiBzb21lIHBsYXRmb3Jt
cywgaWYgdGhlIHVzZXIgbGF0ZXIgaW5zZXJ0cyB0aGUgc2FtZSBvcmlnaW5hbAogICAgICAgICAv
LyB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIGl0IHdpbGwgbm90IGJlIGF1dG9jb3JyZWN0
ZWQgYWdhaW4uIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzCiAgICAgICAgIC8vIG1hcmtlciBpcyB0
aGUgb3JpZ2luYWwgd29yZCBiZWZvcmUgYXV0b2NvcnJlY3Rpb24gd2FzIGFwcGxpZWQuCi0gICAg
ICAgIERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IDEgPDwgOAorICAgICAgICBEZWxldGVkQXV0b2Nv
cnJlY3Rpb24gPSAxIDw8IDgsCisgICAgICAgIC8vIFRoaXMgbWFya2VyIGluZGljYXRlcyB0aGF0
IHRoZSByYW5nZSBvZiB0ZXh0IHNwYW5uZWQgYnkgdGhlIG1hcmtlciBpcyBlbnRlcmVkIGJ5IHZv
aWNlIGRpY3RhdGlvbiwKKyAgICAgICAgLy8gYW5kIGl0IGhhcyBhbHRlcm5hdGl2ZSB0ZXh0Lgor
ICAgICAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMgPSAxIDw8IDkKICAgICB9OwogCiAgICAgY2xh
c3MgTWFya2VyVHlwZXMgewpAQCAtODUsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQWxs
TWFya2VycyA6IHB1YmxpYyBNYXJrZXJUeXBlcyB7CiAgICAgcHVibGljOgogICAgICAgICBBbGxN
YXJrZXJzKCkKLSAgICAgICAgICAgIDogTWFya2VyVHlwZXMoU3BlbGxpbmcgfCBHcmFtbWFyIHwg
VGV4dE1hdGNoIHwgUmVwbGFjZW1lbnQgfCBDb3JyZWN0aW9uSW5kaWNhdG9yIHwgUmVqZWN0ZWRD
b3JyZWN0aW9uIHwgQXV0b2NvcnJlY3RlZCB8IFNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEZWxl
dGVkQXV0b2NvcnJlY3Rpb24pCisgICAgICAgICAgICA6IE1hcmtlclR5cGVzKFNwZWxsaW5nIHwg
R3JhbW1hciB8IFRleHRNYXRjaCB8IFJlcGxhY2VtZW50IHwgQ29ycmVjdGlvbkluZGljYXRvciB8
IFJlamVjdGVkQ29ycmVjdGlvbiB8IEF1dG9jb3JyZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhlbXB0
aW9uIHwgRGVsZXRlZEF1dG9jb3JyZWN0aW9uIHwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzKQogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICB9OwpAQCAtOTQsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAg
RG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCk7CiAgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7
CiAgICAgRG9jdW1lbnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgYm9vbCBhY3RpdmVNYXRjaCk7CisgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgUGFzc1JlZlB0cjxEb2N1
bWVudE1hcmtlckRldGFpbHM+KTsKIAogICAgIE1hcmtlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydE9mZnNldDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oCmluZGV4IGUwNjcyZDBkM2QxZmQ4ZGI3YWVhNGJkOTFkMzZmNGM2N2UyYWRhY2Qu
LjRiYzIxMGNlNTAyNjllODlhYTY3YmE1ZTA5YTY2YzJjNzc1Njg0MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CiAgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Cisg
ICAgdm9pZCBhZGRNYXJrZXIoTm9kZSosIGNvbnN0IERvY3VtZW50TWFya2VyJik7CiAgICAgdm9p
ZCBhZGRUZXh0TWF0Y2hNYXJrZXIoUmFuZ2UqLCBib29sIGFjdGl2ZU1hdGNoKTsKIAogICAgIHZv
aWQgY29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBs
ZW5ndGgsIE5vZGUqIGRzdE5vZGUsIGludCBkZWx0YSk7CkBAIC04MCw4ICs4MSw2IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgYWRkTWFya2VyKE5vZGUqLCBjb25zdCBE
b2N1bWVudE1hcmtlciYpOwotCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcj4gTWFya2VyTGlzdDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBNYXJr
ZXJMaXN0Kj4gTWFya2VyTWFwOwogICAgIGJvb2wgcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4
dEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCmluZGV4IDFkZmZi
MDE0ZWVkNWY2YjMxMDQ1Mzc5NzMwZDg2MzVmOTE2ZjFkZjcuLmExZDI1N2ZiMTFmNTBlNThmNmI3
MmVhZDc0MmVmN2UyYTA3NjM0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
RXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCkBAIC01Nyw2
ICs1NywxMSBAQCBQYXNzUmVmUHRyPFRleHRFdmVudD4gVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9w
KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjbwogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEsIFRleHRFdmVudElucHV0RHJvcCkpOwogfQogCitQYXNz
UmVmUHRyPFRleHRFdmVudD4gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oUGFzc1JlZlB0
cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgVmVjdG9yPERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQodmlldywgZGF0YSwgZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKSk7Cit9CisKIFRleHRFdmVudDo6VGV4dEV2ZW50KCkKICAgICA6IG1faW5wdXRU
eXBlKFRleHRFdmVudElucHV0S2V5Ym9hcmQpCiAgICAgLCBtX3Nob3VsZFNtYXJ0UmVwbGFjZShm
YWxzZSkKQEAgLTg1LDYgKzkwLDE2IEBAIFRleHRFdmVudDo6VGV4dEV2ZW50KFBhc3NSZWZQdHI8
QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEsIFBhc3NSZWZQCiB7CiB9CiAK
K1RleHRFdmVudDo6VGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25z
dCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
PiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQorICAgIDogVUlFdmVudChldmVudE5hbWVzKCkudGV4
dElucHV0RXZlbnQsIHRydWUsIHRydWUsIHZpZXcsIDApCisgICAgLCBtX2lucHV0VHlwZShUZXh0
RXZlbnRJbnB1dERpY3RhdGlvbikKKyAgICAsIG1fZGF0YShkYXRhKQorICAgICwgbV9zaG91bGRT
bWFydFJlcGxhY2UoZmFsc2UpCisgICAgLCBtX3Nob3VsZE1hdGNoU3R5bGUoZmFsc2UpCisgICAg
LCBtX2RpY3RhdGlvbkFsdGVybmF0aXZlcyhkaWN0YXRpb25BbHRlcm5hdGl2ZXMpCit7Cit9CisK
IFRleHRFdmVudDo6flRleHRFdmVudCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVGV4dEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKaW5kZXgg
OWIwODc3YWQ0ZmVjYjIxYWRmZDc0OGNhMzFkM2NjODc2Y2Y4MmEwOS4uMWJjZGQ0NTA4M2NhODYx
MzNmMzEzYjM3YTA5ZTU0ZjJhZDAzODUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1RleHRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBUZXh0RXZlbnRfaAogI2RlZmluZSBUZXh0RXZlbnRfaAogCisj
aW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlRleHRF
dmVudElucHV0VHlwZS5oIgogI2luY2x1ZGUgIlVJRXZlbnQuaCIKIApAQCAtNDIsNiArNDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVu
dD4gY3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcs
IGNvbnN0IFN0cmluZyYgZGF0YSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UpOwogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckZyYWdtZW50UGFzdGUoUGFzc1Jl
ZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGF0
YSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSk7CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlRm9yRHJvcChQYXNzUmVmUHRy
PEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGVGb3JEaWN0YXRpb24oUGFzc1JlZlB0cjxBYnN0
cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKIAogICAgICAgICB2aXJ0
dWFsIH5UZXh0RXZlbnQoKTsKICAgICAKQEAgLTU2LDEwICs1OCwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgaXNCYWNrVGFiKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5
cGUgPT0gVGV4dEV2ZW50SW5wdXRCYWNrVGFiOyB9CiAgICAgICAgIGJvb2wgaXNQYXN0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0UGFzdGU7IH0KICAgICAg
ICAgYm9vbCBpc0Ryb3AoKSBjb25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBUZXh0RXZlbnRJ
bnB1dERyb3A7IH0KKyAgICAgICAgYm9vbCBpc0RpY3RhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRUeXBlID09IFRleHRFdmVudElucHV0RGljdGF0aW9uOyB9CiAKICAgICAgICAgYm9vbCBz
aG91bGRTbWFydFJlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNtYXJ0UmVwbGFjZTsg
fQogICAgICAgICBib29sIHNob3VsZE1hdGNoU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZE1hdGNoU3R5bGU7IH0KICAgICAgICAgRG9jdW1lbnRGcmFnbWVudCogcGFzdGluZ0ZyYWdtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXN0aW5nRnJhZ21lbnQuZ2V0KCk7IH0KKyAgICAgICAgY29u
c3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5h
dGl2ZXMoKSBjb25zdCB7IHJldHVybiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlczsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgVGV4dEV2ZW50KCk7CkBAIC02Nyw2ICs3MSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3Piwg
Y29uc3QgU3RyaW5nJiBkYXRhLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0RXZlbnRJbnB1dEtl
eWJvYXJkKTsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29u
c3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LAogICAgICAgICAg
ICAgICAgICAgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSk7
CisgICAgICAgIFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmlu
ZyYgZGF0YSwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0
YXRpb25BbHRlcm5hdGl2ZXMpOwogCiAgICAgICAgIFRleHRFdmVudElucHV0VHlwZSBtX2lucHV0
VHlwZTsKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKQEAgLTc0LDYgKzc5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9wYXN0aW5nRnJh
Z21lbnQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRTbWFydFJlcGxhY2U7CiAgICAgICAgIGJvb2wg
bV9zaG91bGRNYXRjaFN0eWxlOworICAgICAgICBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbj4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZXM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudElucHV0
VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudElucHV0VHlwZS5oCmluZGV4IDk4
YmYzNDMyZDhiNDY5Mzc4MmVhYmZjYzM4MGFhZmVlZGEwMGEyZWUuLjhiZTIzM2M0YmZmMGJhNWY1
ZjJmOTZkNTAzMGQxODhiNWM1NmJhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
ZXh0RXZlbnRJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50SW5w
dXRUeXBlLmgKQEAgLTM1LDYgKzM1LDcgQEAgZW51bSBUZXh0RXZlbnRJbnB1dFR5cGUgewogICAg
IFRleHRFdmVudElucHV0QmFja1RhYiwKICAgICBUZXh0RXZlbnRJbnB1dFBhc3RlLAogICAgIFRl
eHRFdmVudElucHV0RHJvcCwKKyAgICBUZXh0RXZlbnRJbnB1dERpY3RhdGlvbiwKICAgICBUZXh0
RXZlbnRJbnB1dE90aGVyLAogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDRhNTY2NDYxODNjNDU1
YzRmNGIyMDI5NmEwMTllYzBmMjgxYTFmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAibWFya3VwLmgi
CisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUq
IGZyYW1lLCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKiBzcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIqIGRpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcikKKzogbV9mcmFtZShmcmFtZSkKKywgbV9zcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKHNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpCissIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyKGRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcikKK3sK
K30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICByZXNwb25kVG9DYXJldEF0
RW5kT2ZXb3JkKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2FyZXRBdEVuZE9mV29yZChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25z
IG9wdGlvbnMpCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9u
LmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1
cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICAvLyBDcmVhdGluZyBhIFZpc2libGUgcG9zaXRp
b24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJlIGlzIG5vCisgICAgLy8gZ3VhcmFudGVlIHRo
YXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxpZC4KKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRp
b24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25P
ZldvcmQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKHBvc2l0aW9uLmFuY2hv
clR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsK
KyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5tYXJrZXJzRm9yKG5vZGUpOworICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1h
cmtlcnMuc2l6ZSgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291
bnQ7ICsraSkgeworICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vy
c1tpXTsKKyAgICAgICAgaWYgKCFtYXJrZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzID0gZmFsc2U7CisgICAg
ICAgIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci0+cmVzcG9uZFRvTWFya2VyQXRFbmRP
ZldvcmQoKm1hcmtlciwgcG9zaXRpb24sICZzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpOworICAg
ICAgICAKKyAgICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb24sIGhhbmRsaW5nIGEgbWFya2VyIHdv
dWxkIHByaGliaXQgdGhlIHByb3BlciBoYW5kbGluZyBvZiBvdGhlciBtYXJrZXJzLgorICAgICAg
ICAvLyBTbyBpZiBzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMgaXMgc2V0IHRvIHRydWUsIHdlIGJy
ZWFrIHRoZSBsb29wLgorICAgICAgICBpZiAoc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBpZiAoIShvcHRpb25zICYgRnJhbWVT
ZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCkpIHsKKyAgICAgICAgICAgIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLT5yZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCgqbWFya2Vy
LCBwb3NpdGlvbiwgJnNob3VsZElnbm9yZU90aGVyTWFya2Vycyk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3NB
bHRlcm5hdGl2ZVRleHRVSSgpCit7CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAg
ICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+ZGlzbWlzcygpOworfQorCit2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmVzKGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gJm9sZFNlbGVjdGlvbikKK3sKKyAgICBtX3NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rp
b24pOworICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5zdG9wUGVuZGluZ0Fs
dGVybmF0aXZlKCk7Cit9CisgICAgCitGbG9hdFJlY3QgcmFuZ2VCb3VuZGluZ0JveEluUm9vdFZp
ZXcoY29uc3QgU2Nyb2xsVmlldyogdmlldywgY29uc3QgUmFuZ2UqIHJhbmdlKQoreworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHRleHRRdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7CisgICAgRmxv
YXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGJvdW5kaW5n
UmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CisgICAgcmV0dXJuIHZpZXct
PmNvbnRlbnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOworfQorCitQYXNzUmVm
UHRyPFJhbmdlPiByZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBSYW5n
ZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSwgYm9vbCBmb3JTcGVsbGluZ0NvcnJlY3Rpb24pCit7Cisg
ICAgaWYgKCFyYW5nZSB8fCAhZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IHJhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
c2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQ
YXJhZ3JhcGgocmFuZ2UtPmVuZFBvc2l0aW9uKCkpKTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxh
Y2UgdGhlIHdvcmQgYXQgJ3JhbmdlJywgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJh
bmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRo
ZSB2YWx1ZSBvZiAncmFuZ2UnIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAgIC8vIFNvIGJlZm9y
ZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiAncmFuZ2UnCisgICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0
aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIHJlcGxhY2VtZW50U3RhcnRP
ZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRv
IG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQorICAg
IC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgJ3JhbmdlJy4KKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50U3RhcnRP
ZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5z
dGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVS
ZXBsYWNlZCA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgcmVwbGFjZW1lbnRTdGFydE9m
ZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJl
cGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQu
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgc3RhcnQgbG9jYXRpb24gb2Yg
dGhlIHJhbmdlIHRvIGJlIHJlcGxhY2VkLCBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVy
IHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgorICAgIGludCByZXBsYWNlbWVudFN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJlcGxhY2VtZW50U3Rh
cnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJh
bmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhl
IG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxh
Y2VkID0gcmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgIGlmIChmb3JTcGVsbGluZ0NvcnJlY3Rp
b24pCisgICAgICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVh
dGUocmFuZ2VUb0JlUmVwbGFjZWQsIG5ld1RleHQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChy
YW5nZSwgbmV3VGV4dCk7CisgICAgICAgIGlmIChmcmFnbWVudCkgeworICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24ocmFuZ2UsIEZyYW1lU2VsZWN0aW9uOjpEaWN0
YXRpb25UcmlnZ2VyZWQgfCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNlbGVj
dGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSk7CisgICAgICAgICAgICBhcHBseUNvbW1hbmQoUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKSwgZnJhZ21lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nLCBFZGl0QWN0aW9uUGFzdGUpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5n
ZXQoKSwgcmVwbGFjZW1lbnRTdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbmV3VGV4dC5sZW5ndGgo
KSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgorICAg
IFN0cmluZyB0ZXh0QWZ0ZXJSZXBsYWNlbWVudCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdl
LmdldCgpKTsKKyAgICBpZiAodGV4dEFmdGVyUmVwbGFjZW1lbnQgIT0gbmV3VGV4dCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlcGxhY2VtZW50UmFuZ2U7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTY4NzJjMDRkZDlhZjBlNDE5N2M3M2FkYjQzNGFmN2Y3NzQ3OGY5MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAorI2RlZmlu
ZSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5o
IgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlcjsKK2NsYXNzIFJhbmdlOworY2xhc3MgRnJhbWU7CitjbGFzcyBTY3JvbGxWaWV3
OworY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjsKKworY2xhc3MgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSosIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIqLCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIqKTsKKyAgICB2b2lkIHJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0
aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgdm9pZCBkaXNt
aXNzQWx0ZXJuYXRpdmVUZXh0VUkoKTsKKyAgICB2b2lkIHN0b3BQZW5kaW5nQWx0ZXJuYXRpdmVz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7Citwcml2YXRlOgorICAgIHZv
aWQgcmVzcG9uZFRvQ2FyZXRBdEVuZE9mV29yZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKKyAgICAKKyAg
ICBGcmFtZSogbV9mcmFtZTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKiBtX3Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI7CisgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyKiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsKK307CisKK0Zsb2F0UmVj
dCByYW5nZUJvdW5kaW5nQm94SW5Sb290Vmlldyhjb25zdCBTY3JvbGxWaWV3KiwgY29uc3QgUmFu
Z2UqKTsKKworLy8gVXBvbiBzdWNjZXNzLCByZXR1cm4gdmFsdWUgY29udGFpbnMgdGhlIHJhbmdl
IG9mIG5ld1RleHQuIE90aGVyd2lzZSwgaXQgcmV0dXJucyBudWxsLgorUGFzc1JlZlB0cjxSYW5n
ZT4gcmVwbGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgUmFuZ2UqLCBGcmFt
ZSosIGJvb2wgZm9yU3BlbGxpbmdDb3JyZWN0aW9uKTsKK30KKworI2VuZGlmIC8vIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcAppbmRleCA4MzBlYWNmNmZlZWQ2ZmU0ZWIzZDA2NDNlZDAzMWQ5ZDc0
MjQ5MGRlLi4yNDI0Njc3MDZmMzA1YTcwOGEyYzRmZjc5YTU0MGYzNDY3ODdiNTU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNDYx
LDYgKzQ2MSwxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRUZXh0SW50b05v
ZGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZgogICAgICAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUobm9kZSwgb2Zm
c2V0LCB0ZXh0KSk7CiB9CiAKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRX
aXRoTWFya2Vyc0ludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0
LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtl
cnMpCit7CisgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwg
dGV4dCwgbWFya2VycykpOworfQorCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVU
ZXh0RnJvbU5vZGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50KQogewogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKERlbGV0ZUZyb21UZXh0
Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIGNvdW50KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKaW5kZXggZjdkMTc0OTQzOTQwYjVl
OWM1N2YyNTNhMDQ2ZjJmODQ1MThmYzljMC4uYjA3OTc3OWJlNWUwZDg3MmQ5Y2Q4MDg5OGFmODUx
OGRjZmRiNzc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuaApAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IERvY3VtZW50TWFya2VyOwogY2xhc3MgRWRpdGluZ1N0eWxlOwogY2xhc3MgSFRNTEVsZW1lbnQ7
CiBjbGFzcyBTdHlsZWRFbGVtZW50OwpAQCAtODIsNiArODMsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNDcmVhdGVMaW5rQ29tbWFuZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBpc1R5cGluZ0NvbW1hbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaWN0YXRpb25D
b21tYW5kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcHJlc2Vy
dmVzVHlwaW5nU3R5bGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoYm9vbCk7CkBAIC0xMTEsNiArMTEzLDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGJvb2wgdXNlRGVm
YXVsdFBhcmFncmFwaEVsZW1lbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBpbnNlcnRMaW5lQnJlYWso
KTsKICAgICB2b2lkIGluc2VydFRleHRJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25l
ZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCBpbnNlcnRUZXh0V2l0aE1h
cmtlcnNJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2Vycyk7CiAgICAg
dm9pZCBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQ
dHI8RWxlbWVudD4pOwogICAgIHZvaWQgcmViYWxhbmNlV2hpdGVzcGFjZSgpOwogICAgIHZvaWQg
cmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWMyMzUzZGY1ZWUwZWY1MGExYWFiYWNiOGQzNTAzZjZlZTU5ZGQ5ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisKK0RpY3RhdGlvbk1hcmtlckRldGFpbHM6OkRpY3RhdGlvbk1h
cmtlckRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIHVpbnQ2NF90IGRpY3RhdGlv
bkNvbnRleHQpCisgICAgOiBtX2RpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCkKKyAg
ICAsIG1fb3JpZ2luYWxUZXh0KG9yaWdpbmFsVGV4dCkKK3sKK30KKworUGFzc1JlZlB0cjxEaWN0
YXRpb25NYXJrZXJEZXRhaWxzPiBEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBvcmlnaW5hbFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKG9yaWdpbmFsVGV4dCwg
ZGljdGF0aW9uQ29udGV4dCkpOworfQorICAgIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQorCitEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwg
bV90aW1lcih0aGlzLCAmRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjp0aW1lckZpcmVk
KQorICAgICwgbV9pc1VJQWN0aXZlKGZhbHNlKQoreworfQorCit2b2lkIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImIG1hcmtlciwgY29uc3QgUG9zaXRpb24mIGVuZE9mV29yZCwgYm9vbCogc2hvdWxk
SWdub3JlT3RoZXJNYXJrZXJzKQoreworICAgIGlmIChtYXJrZXIudHlwZSgpICE9IERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSkgIT0gZW5kT2ZXb3JkLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0g
ZW5kT2ZXb3JkLmNvbnRhaW5lck5vZGUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisKKyAgICBjb25zdCBEaWN0YXRpb25NYXJr
ZXJEZXRhaWxzKiBtYXJrZXJEZXRhaWxzID0gc3RhdGljX2Nhc3Q8Y29uc3QgRGljdGF0aW9uTWFy
a2VyRGV0YWlscyo+KG1hcmtlci5kZXRhaWxzKCkpOworICAgIGlmICghbWFya2VyRGV0YWlscykK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChjdXJyZW50V29yZCAhPSBtYXJrZXJEZXRhaWxzLT5v
cmlnaW5hbFRleHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8u
cmFuZ2VPZkRpY3RhdGVkVGV4dCA9IHdvcmRSYW5nZTsKKyAgICBtX2FsdGVybmF0aXZlVUlJbmZv
LmRpY3RhdGlvbkNvbnRleHQgPSBtYXJrZXJEZXRhaWxzLT5kaWN0YXRpb25Db250ZXh0KCk7Cisg
ICAgY29uc3QgZG91YmxlIGRpY3RhdGlvbkFsdGVybmF0aXZlVUlEZWxheSA9IDAuMzsKKyAgICBt
X3RpbWVyLnN0YXJ0T25lU2hvdChkaWN0YXRpb25BbHRlcm5hdGl2ZVVJRGVsYXkpOworICAgICpz
aG91bGRJZ25vcmVPdGhlck1hcmtlcnMgPSB0cnVlOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcjo6c3RvcFRpbWVyKCkKK3sKKyAgICBtX3RpbWVyLnN0b3AoKTsKKyAg
ICBtX2FsdGVybmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRleHQuY2xlYXIoKTsKKyAgICBt
X2FsdGVybmF0aXZlVUlJbmZvLmRpY3RhdGlvbkNvbnRleHQgPSAwOworfQorCit2b2lkIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6ZGlzbWlzcygpCit7CisgICAgaWYgKCFtX2lzVUlB
Y3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzVUlBY3RpdmUgPSBmYWxzZTsKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRp
dmVVSSgpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c3RvcFBl
bmRpbmdBbHRlcm5hdGl2ZSgpCit7CisgICAgc3RvcFRpbWVyKCk7CisgICAgZGlzbWlzcygpOwor
fQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6dGltZXJGaXJlZChUaW1l
cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI+KikKK3sKKyAgICBpZiAoIW1fYWx0ZXJu
YXRpdmVVSUluZm8ucmFuZ2VPZkRpY3RhdGVkVGV4dCB8fCAhbV9hbHRlcm5hdGl2ZVVJSW5mby5k
aWN0YXRpb25Db250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcmFuZ2VCb3VuZGluZ0JveEluUm9vdFZpZXcobV9mcmFtZS0+dmlldygpLCBtX2FsdGVy
bmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRleHQuZ2V0KCkpOworICAgIG1faXNVSUFjdGl2
ZSA9IHRydWU7CisgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkgJiYgY2xpZW50KCkpCisg
ICAgICAgIGNsaWVudCgpLT5zaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShib3VuZGluZ0JveCwg
bV9hbHRlcm5hdGl2ZVVJSW5mby5kaWN0YXRpb25Db250ZXh0KTsKK30KKworRWRpdG9yQ2xpZW50
KiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmNsaWVudCgpCit7CisgICAgcmV0dXJu
IG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOwor
fQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRB
bHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlKQoreworICAgIFJhbmdlKiByYW5n
ZVRvUmVwbGFjZSA9IG1fYWx0ZXJuYXRpdmVVSUluZm8ucmFuZ2VPZkRpY3RhdGVkVGV4dC5nZXQo
KTsKKyAgICBpZiAoIXJhbmdlVG9SZXBsYWNlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmFu
Z2VUb1JlcGxhY2UtPm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9p
c1VJQWN0aXZlID0gZmFsc2U7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0g
cmVwbGFjZVRleHRJblJhbmdlKGFsdGVybmF0aXZlLCByYW5nZVRvUmVwbGFjZSwgbV9mcmFtZSwg
ZmFsc2UpOworICAgIGlmIChyZXBsYWNlbWVudFJhbmdlKSB7CisgICAgICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICAgICAgbWFya2VyQ29udHJv
bGxlci0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICB9CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5mby5y
YW5nZU9mRGljdGF0ZWRUZXh0LmNsZWFyKCk7CisgICAgbV9hbHRlcm5hdGl2ZVVJSW5mby5kaWN0
YXRpb25Db250ZXh0ID0gMDsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXI6OnJlbW92ZUFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciogbWFy
a2VyKQoreworICAgIGlmICghY2xpZW50KCkgfHwgIW1hcmtlciB8fCBtYXJrZXItPnR5cGUoKSAh
PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKiBtYXJrZXJEZXRhaWxzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgRGljdGF0aW9uTWFya2VyRGV0YWlscyo+KG1hcmtlci0+ZGV0YWlscygp
KTsKKyAgICBjbGllbnQoKS0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKG1hcmtlckRldGFp
bHMtPmRpY3RhdGlvbkNvbnRleHQoKSk7Cit9CisjZW5kaWYgLy8gVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NjYzOTA5ZjQ0ZTg2YTE3
ZTQ5YTU1ZTI0YzJjOTU1MWY5ZWU0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsOTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCisjZGVmaW5lIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQorI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIDsKKyNlbHNl
CisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgZnVuY3Rpb25Cb2R5CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFZGl0b3JDbGllbnQ7CitjbGFzcyBG
cmFtZTsKKworY2xhc3MgRGljdGF0aW9uTWFya2VyRGV0YWlscyA6IHB1YmxpYyBEb2N1bWVudE1h
cmtlckRldGFpbHMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERpY3RhdGlvbk1h
cmtlckRldGFpbHM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgdWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCk7CisgICAgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQoKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbmFsVGV4dDsgfQorICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2RpY3RhdGlvbkNvbnRleHQ7IH0KK3ByaXZhdGU6CisgICAg
RGljdGF0aW9uTWFya2VyRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgdWludDY0
X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgdWludDY0X3QgbV9kaWN0YXRpb25Db250ZXh0Owor
ICAgIFN0cmluZyBtX29yaWdpbmFsVGV4dDsKK307CisKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGlj
OgorICAgIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcihGcmFtZSopIFVOTEVTU19FTkFC
TEVEKHsgfSkKKworICAgIHZvaWQgcmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9j
dW1lbnRNYXJrZXImLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZXb3JkLCBib29sKiBzaG91bGRJZ25v
cmVPdGhlck1hcmtlcnMpIFVOTEVTU19FTkFCTEVEKHtVTlVTRURfUEFSQU0oZW5kT2ZXb3JkKTsg
VU5VU0VEX1BBUkFNKHNob3VsZElnbm9yZU90aGVyTWFya2Vycyk7fSkKKworICAgIHZvaWQgZGlz
bWlzcygpIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHN0b3BQZW5kaW5nQWx0ZXJuYXRp
dmUoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZEFsdGVybmF0
aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKGFsdGVybmF0aXZlKTsgfSkKKyAgICB2b2lkIHJlbW92ZUFsdGVybmF0aXZlc0Zvck1hcmtl
cihjb25zdCBEb2N1bWVudE1hcmtlciopIFVOTEVTU19FTkFCTEVEKHsgfSkKKyNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKK3ByaXZhdGU6CisgICAgc3RydWN0IERpY3RhdGlvbkFsdGVy
bmF0aXZlVUlJbmZvIHsgCisgICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlVUlJbmZvKCkgOiBk
aWN0YXRpb25Db250ZXh0KDApIHsgfQorICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZEaWN0
YXRlZFRleHQ7CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQ7CisgICAgfTsKKwor
ICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4qKTsKKyAgICB2b2lkIHN0b3BUaW1lcigpOwor
CisgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgVGltZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyPiBtX3RpbWVyOworICAgIERpY3RhdGlvbkFsdGVybmF0aXZlVUlJbmZvIG1fYWx0ZXJu
YXRpdmVVSUluZm87CisgICAgYm9vbCBtX2lzVUlBY3RpdmU7CisjZW5kaWYKK307CisKKyN1bmRl
ZiBVTkxFU1NfRU5BQkxFRAorCit9CisKKyNlbmRpZiAvLyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9u
QWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQxOGQyZGNhN2IwNWE1Zjg2Y2Nm
NmY2ZjI1YWJlNTI4NjAzN2NmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbjo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbih1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVuZ3RoLCB1
aW50NjRfdCBjb250ZXh0KQorOiByYW5nZVN0YXJ0KHN0YXJ0KQorLCByYW5nZUxlbmd0aChsZW5n
dGgpCissIGRpY3RhdGlvbkNvbnRleHQoY29udGV4dCkKK3sgfQorICAgIAorRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbigpCis6IHJhbmdl
U3RhcnQoMCkKKywgcmFuZ2VMZW5ndGgoMCkKKywgZGljdGF0aW9uQ29udGV4dCgwKQoreyB9CisK
K0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb246OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24oY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYW5vdGhlcikKKzogcmFuZ2VT
dGFydChhbm90aGVyLnJhbmdlU3RhcnQpCissIHJhbmdlTGVuZ3RoKGFub3RoZXIucmFuZ2VMZW5n
dGgpCissIGRpY3RhdGlvbkNvbnRleHQoYW5vdGhlci5kaWN0YXRpb25Db250ZXh0KQoreyB9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNiYTYwMTVhZTc1MmMzZGI1ODQ2ZmYzYjVlZTNmYWVm
ZGNkNjMwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25faAorI2RlZmluZSBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uX2gKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MSU9OKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhbHRl
cm5hdGl2ZSBkaWN0YXRpb24gdGV4dC4KKyNkZWZpbmUgV1RGX1VTRV9ESUNUQVRJT05fQUxURVJO
QVRJVkVTIDEKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTElPTikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IERpY3Rh
dGlvbkFsdGVybmF0aXZlTG9jYXRpb24geworICAgIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24odWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgY29udGV4dCk7Cisg
ICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbigpOworICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24oY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYW5vdGhlcik7
CisgICAgdWludDY0X3QgcmFuZ2VTdGFydDsKKyAgICB1aW50NjRfdCByYW5nZUxlbmd0aDsKKyAg
ICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0OworfTsKKworfQorCisjZW5kaWYgLy8gRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRp
b25Db21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZGFmYjVlNWYyZTdjMDIxYjdlMGVlNjVjYWQ4ZGYy
ZDFlMGY5ZTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0
YXRpb25Db21tYW5kLmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RGljdGF0aW9uQ29tbWFuZC5oIgorCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQu
aCIKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgiCisjaW5j
bHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGljdGF0aW9uQ29tbWFuZDo6RGljdGF0aW9uQ29tbWFu
ZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBhbHRlcm5hdGl2ZXMpCisgICAgOiBDb21wb3Np
dGVFZGl0Q29tbWFuZChkb2N1bWVudCkKKyAgICAsIG1fdGV4dFRvSW5zZXJ0KHRleHQpCisgICAg
LCBtX2FsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpCit7Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29t
bWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGFsdGVybmF0aXZlcywg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKQoreworICAgIFJl
ZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUp
OworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBib29sIGNoYW5nZVNlbGVjdGlvbiA9IGN1cnJlbnRT
ZWxlY3Rpb24gIT0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uOworCisgICAgU3RyaW5nIG5ld1RleHQg
PSB0ZXh0OworICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24u
c3RhcnQoKS5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpKSB7CisgICAgICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50LiBUaGUgZXZlbnQgaGFuZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vzc2FyeS4K
KyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3Jl
YXRlKHRleHQpOworICAgICAgICAgICAgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkt
PmRpc3BhdGNoRXZlbnQoZXZ0LCBlYyk7CisgICAgICAgICAgICBuZXdUZXh0ID0gZXZ0LT50ZXh0
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8RGljdGF0aW9uQ29tbWFuZD4gY21k
OworICAgIGlmIChuZXdUZXh0ID09IHRleHQpCisgICAgICAgIGNtZCA9IERpY3RhdGlvbkNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCwgbmV3VGV4dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICBlbHNlCisg
ICAgICAgIC8vIElmIHRoZSB0ZXh0IHdhcyBtb2RpZmllZCBiZWZvcmUgaW5zZXJ0aW9uLCB0aGUg
bG9jYXRpb24gb2YgZGljdGF0aW9uIGFsdGVybmF0aXZlcworICAgICAgICAvLyB3aWxsIG5vdCBi
ZSB2YWxpZCBhbnltb3JlLiBXZSB3aWxsIGp1c3QgZHJvcCB0aGUgYWx0ZXJuYXRpdmVzLgorICAg
ICAgICBjbWQgPSBEaWN0YXRpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIG5ld1RleHQsIFZl
Y3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPigpKTsKKworICAgIGlmIChjaGFuZ2VT
ZWxlY3Rpb24pIHsKKyAgICAgICAgY21kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25G
b3JJbnNlcnRpb24pOworICAgICAgICBjbWQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25G
b3JJbnNlcnRpb24pOworICAgIH0KKyAgICBhcHBseUNvbW1hbmQoY21kKTsKKyAgICBpZiAoY2hh
bmdlU2VsZWN0aW9uKSB7CisgICAgICAgIGNtZC0+c2V0RW5kaW5nU2VsZWN0aW9uKGN1cnJlbnRT
ZWxlY3Rpb24pOworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihjdXJy
ZW50U2VsZWN0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgbmV3bGluZTsKKyAg
ICB3aGlsZSAoKG5ld2xpbmUgPSBtX3RleHRUb0luc2VydC5maW5kKCdcbicsIG9mZnNldCkpICE9
IG5vdEZvdW5kKSB7CisgICAgICAgIGlmIChuZXdsaW5lICE9IG9mZnNldCkKKyAgICAgICAgICAg
IGluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMob2Zmc2V0LCBuZXdsaW5lIC0gb2Zmc2V0KTsK
KyAgICAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7CisgICAgICAgIG9mZnNldCA9IG5l
d2xpbmUgKyAxOworICAgIH0KKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgaW5zZXJ0VGV4dFJ1
bldpdGhvdXROZXdsaW5lcygwLCBtX3RleHRUb0luc2VydC5sZW5ndGgoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fdGV4dFRvSW5zZXJ0Lmxlbmd0aCgpOworICAg
ICAgICBpZiAobGVuZ3RoICE9IG9mZnNldCkKKyAgICAgICAgICAgIGluc2VydFRleHRSdW5XaXRo
b3V0TmV3bGluZXMob2Zmc2V0LCBsZW5ndGggLSBvZmZzZXQpOworICAgIH0KK30KKwordm9pZCBE
aWN0YXRpb25Db21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKHNpemVfdCBsaW5l
U3RhcnQsIHNpemVfdCBsaW5lTGVuZ3RoKQoreworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4g
ZG9jdW1lbnRNYXJrZXJzOworICAgIGNvbGxlY3REaWN0YXRpb25NYXJrZXJzSW5SYW5nZShsaW5l
U3RhcnQsIGxpbmVMZW5ndGgsIGRvY3VtZW50TWFya2Vycyk7CisgICAgUmVmUHRyPEluc2VydFRl
eHRDb21tYW5kPiBjb21tYW5kID0gSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBtX3RleHRUb0luc2VydC5zdWJzdHJpbmcobGluZVN0YXJ0LCBsaW5lTGVuZ3RoKSwgZG9jdW1l
bnRNYXJrZXJzKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kLCBlbmRpbmdT
ZWxlY3Rpb24oKSk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yKCkKK3sKKyAgICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24o
ZW5kaW5nU2VsZWN0aW9uKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBseUNvbW1hbmRU
b0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjcmVhdGUoZG9jdW1l
bnQoKSkpOworfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6OmNvbGxlY3REaWN0YXRpb25NYXJr
ZXJzSW5SYW5nZShzaXplX3QgcmFuZ2VTdGFydCwgc2l6ZV90IHJhbmdlTGVuZ3RoLCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbiYgYWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlc1tpXTsKKyAgICAg
ICAgaWYgKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgPj0gcmFuZ2VTdGFydCAmJiAoYWx0ZXJuYXRp
dmUucmFuZ2VTdGFydCArIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoKSA8PSByYW5nZVN0YXJ0ICsg
cmFuZ2VMZW5ndGgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hcmtlclN0YXJ0T2Zmc2V0ID0g
YWx0ZXJuYXRpdmUucmFuZ2VTdGFydCAtIHJhbmdlU3RhcnQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCBtYXJrZXJFbmRPZmZzZXQgPSBtYXJrZXJTdGFydE9mZnNldCArIGFsdGVybmF0aXZlLnJhbmdl
TGVuZ3RoOworICAgICAgICAgICAgbWFya2Vycy5hcHBlbmQoRG9jdW1lbnRNYXJrZXIoRG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyU3RhcnRPZmZzZXQsIG1hcmtl
ckVuZE9mZnNldCwgRGljdGF0aW9uTWFya2VyRGV0YWlsczo6Y3JlYXRlKG1fdGV4dFRvSW5zZXJ0
LnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0
aCksIGFsdGVybmF0aXZlLmRpY3RhdGlvbkNvbnRleHQpKSk7CisgICAgICAgICAgICBtYXJrZXJz
LmFwcGVuZChEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbiwgbWFya2VyU3RhcnRPZmZzZXQsIG1hcmtlckVuZE9mZnNldCkpOworICAgICAgICB9Cisg
ICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlv
bkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE1MWYwYTM5YmNmOGVhMWNiZWNlZDFhZjVhMjRmODc1ZjZmNWEzN2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRGljdGF0aW9uQ29tbWFuZF9oCisjZGVmaW5lIERpY3RhdGlvbkNvbW1h
bmRfaAorCisjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJEaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRG9jdW1lbnRNYXJrZXI7CisKK2NsYXNzIERpY3RhdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29t
cG9zaXRlRWRpdENvbW1hbmQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluc2VydFRleHQo
RG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbj4gYWx0ZXJuYXRpdmVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAg
dmlydHVhbCBib29sIGlzRGljdGF0aW9uQ29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
K3ByaXZhdGU6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGljdGF0aW9uQ29tbWFuZD4gY3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGFsdGVybmF0aXZlcykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRGljdGF0aW9uQ29tbWFuZChkb2N1bWVudCwgdGV4dCwgYWx0
ZXJuYXRpdmVzKSk7CisgICAgfQorCisgICAgRGljdGF0aW9uQ29tbWFuZChEb2N1bWVudCosIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24+JiBhbHRlcm5hdGl2ZXMpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CisK
KyAgICB2b2lkIGluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoc2l6ZV90IGxpbmVTdGFydCwg
c2l6ZV90IGxpbmVMZW5ndGgpOworICAgIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7
CisgICAgdm9pZCBjb2xsZWN0RGljdGF0aW9uTWFya2Vyc0luUmFuZ2Uoc2l6ZV90IHJhbmdlU3Rh
cnQsIHNpemVfdCByYW5nZUxlbmd0aCwgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2Vycyk7
CisKKyAgICBTdHJpbmcgbV90ZXh0VG9JbnNlcnQ7CisgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24+IG1fYWx0ZXJuYXRpdmVzOworfTsKK30KKworI2VuZGlmIC8vIERpY3Rh
dGlvbkNvbW1hbmRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDcyZTIxZmEyNGE1
ODU1OTE0ZmNiOGU0ODNjOTJmNGUzNzZhYmVhYjkuLmRmZWVjYzRjNWFkZTVhMGM0YmZmYmEwMjNj
NTVjZmYxMWUyZTE0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXBwbHlT
dHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgpAQCAtNDEsNiArNDIsOCBAQAogI2luY2x1ZGUgIkNy
ZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEaWN0YXRpb25Db21tYW5kLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCkBAIC00NzYsMTMgKzQ3OSwxMyBA
QCBib29sIEVkaXRvcjo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCogZWxl
bWVudCkgY29uc3QKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFNob3dE
ZWxldGVJbnRlcmZhY2UoZWxlbWVudCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3ZvaWQg
RWRpdG9yOjpub3RpZnlDb21wb25lbnRzT25DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlv
bnMgb3B0aW9ucykKIHsKICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUpOwogICAgIHNldFN0YXJ0TmV3S2lsbFJpbmdT
ZXF1ZW5jZSh0cnVlKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5y
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwg
b3B0aW9ucyk7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQpAQCAtNzg0LDggKzc4NywxMCBA
QCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29t
bWFuZD4gY21kKQogCiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQXBwbGllZEVk
aXRpbmcoY21kLmdldCgpKTsKIAorICAgIAogICAgIC8vIERvbid0IGNsZWFyIHRoZSB0eXBpbmcg
c3R5bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2UuICBXZSBkbyB0aG9zZSB0aGluZ3MgZWxz
ZXdoZXJlIGlmIG5lY2Vzc2FyeS4KLSAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3
U2VsZWN0aW9uLCBmYWxzZSwgZmFsc2UpOworICAgIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMgPSBjbWQtPmlzRGljdGF0aW9uQ29tbWFuZCgpID8gRnJhbWVTZWxl
Y3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCA6IDA7CisgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJD
b21tYW5kKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CiAKICAgICBpZiAoIWNtZC0+cHJlc2VydmVz
VHlwaW5nU3R5bGUoKSkKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyVHlwaW5n
U3R5bGUoKTsKQEAgLTgxMSw3ICs4MTYsNyBAQCB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IGNtZCkKICAgICBkaXNwYXRjaEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1l
bnQoKSwgY21kLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+c3RhcnRpbmdTZWxlY3Rpb24oKSk7Ci0gICAg
Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgdHJ1ZSwgdHJ1ZSk7Cisg
ICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OkNsb3NlVHlwaW5nIHwgRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5bGUpOwogICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoY21kLmdldCgp
KTsKICAgICAKICAgICBtX2xhc3RFZGl0Q29tbWFuZCA9IDA7CkBAIC04MjcsNyArODMyLDcgQEAg
dm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBv
c2l0aW9uPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNt
ZC0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNtZC0+ZW5kaW5nUm9vdEVkaXRhYmxl
RWxlbWVudCgpKTsKICAgICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQt
PmVuZGluZ1NlbGVjdGlvbigpKTsKLSAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3
U2VsZWN0aW9uLCB0cnVlLCB0cnVlKTsKKyAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQo
bmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNlbGVjdGlv
bjo6Q2xlYXJUeXBpbmdTdHlsZSk7CiAgICAgCiAgICAgbV9sYXN0RWRpdENvbW1hbmQgPSAwOwog
ICAgIGlmIChjbGllbnQoKSkKQEAgLTg0NSw2ICs4NTAsOCBAQCBFZGl0b3I6OkVkaXRvcihGcmFt
ZSogZnJhbWUpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykpCiAgICAg
LCBtX3NwZWxsQ2hlY2tlcihhZG9wdFB0cihuZXcgU3BlbGxDaGVja2VyKGZyYW1lKSkpCiAgICAg
LCBtX3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0UHRyKG5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyKGZyYW1lKSkpCisgICAgLCBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcihh
ZG9wdFB0cihuZXcgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKGZyYW1lKSkpCisgICAg
LCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIoZnJhbWUsIG1fc3BlbGxpbmdDb3JyZWN0b3IuZ2V0KCksIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLmdldCgpKSkpCiAgICAgLCBtX2FyZU1hcmtlZFRleHRNYXRj
aGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3Io
RWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXYpCiB7CkBAIC04NzIsNiArODc5LDExIEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0KQogICAgIHJldHVybiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVGV4dElu
cHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAKK2Jvb2wg
RWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcywg
RXZlbnQqIHRyaWdnZXJpbmdFdmVudCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQodGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRp
dmVzLCB0cmlnZ2VyaW5nRXZlbnQpOworfQorCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhv
dXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRl
ZFRleHQsIFRleHRFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQogewogICAgIGlmICh0ZXh0LmlzRW1w
dHkoKSkKQEAgLTkwNiwxMiArOTE4LDE2IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91
dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAg
ICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gc2VsZWN0aW9uU3RhcnQtPmRvY3Vt
ZW50KCk7CiAKICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdGV4dAotICAgICAgICAgICAgVHlw
aW5nQ29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKLSAgICAgICAgICAgIGlmIChzZWxlY3RJ
bnNlcnRlZFRleHQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdDb21tYW5kOjpT
ZWxlY3RJbnNlcnRlZFRleHQ7Ci0gICAgICAgICAgICBpZiAoYXV0b2NvcnJlY3Rpb25XYXNBcHBs
aWVkKQotICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3I7Ci0gICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBzZWxlY3Rpb24sIG9wdGlvbnMsIHRyaWdnZXJpbmdF
dmVudCAmJiB0cmlnZ2VyaW5nRXZlbnQtPmlzQ29tcG9zaXRpb24oKSA/IFR5cGluZ0NvbW1hbmQ6
OlRleHRDb21wb3NpdGlvbkNvbmZpcm0gOiBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25O
b25lKTsKKyAgICAgICAgICAgIGlmICh0cmlnZ2VyaW5nRXZlbnQtPmlzRGljdGF0aW9uKCkpCisg
ICAgICAgICAgICAgICAgRGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudC5nZXQo
KSwgdGV4dCwgdHJpZ2dlcmluZ0V2ZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoKSwgc2VsZWN0
aW9uKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6
Ok9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdEluc2VydGVk
VGV4dCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdDb21tYW5kOjpTZWxl
Y3RJbnNlcnRlZFRleHQ7CisgICAgICAgICAgICAgICAgaWYgKGF1dG9jb3JyZWN0aW9uV2FzQXBw
bGllZCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdDb21tYW5kOjpSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsKKyAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBzZWxlY3Rpb24sIG9wdGlvbnMsIHRy
aWdnZXJpbmdFdmVudCAmJiB0cmlnZ2VyaW5nRXZlbnQtPmlzQ29tcG9zaXRpb24oKSA/IFR5cGlu
Z0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkNvbmZpcm0gOiBUeXBpbmdDb21tYW5kOjpUZXh0Q29t
cG9zaXRpb25Ob25lKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gUmV2ZWFsIHRo
ZSBjdXJyZW50IHNlbGVjdGlvbgogICAgICAgICAgICAgaWYgKEZyYW1lKiBlZGl0ZWRGcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpKQpAQCAtMjIyNSw3ICsyMjQxLDEyIEBAIHZvaWQgRWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZT
ZWxlY3Rpb25BCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
ICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHN0
YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2YWxlbnQoKSwgZW5kT2ZMYXN0V29yZC5kZWVwRXF1aXZh
bGVudCgpKTsKIAotICAgIGRvY3VtZW50LT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6Q29y
cmVjdGlvbkluZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyKTsKKyAgICAvLyBXaGVuIHdlIHJlbW92ZSBkaWN0YXRpb24gbWFya2Vycywgd2UgYWxzbyBu
ZWVkIHRvIHRlbGwgY2xpZW50IHRvIHJlbW92ZSBhbnkgZGljdGF0aW9uIGFsdGVybmF0aXZlcyBh
c3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIAorICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+
IGRpY3RhdGlvbk1hcmtlcnMgPSBkb2N1bWVudC0+bWFya2VycygpLT5tYXJrZXJzSW5SYW5nZSh3
b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGljdGF0aW9uTWFya2Vycy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPnJlbW92ZUFsdGVybmF0
aXZlc0Zvck1hcmtlcihkaWN0YXRpb25NYXJrZXJzW2ldKTsKKworICAgIGRvY3VtZW50LT5tYXJr
ZXJzKCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciB8IERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFs
dGVybmF0aXZlcywgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7CiAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+Y2xlYXJEZXNjcmlwdGlv
bk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50KTsKIH0KIApAQCAtMjM2NiwxMCArMjM4NywxNCBAQCB2b2lkIEVkaXRv
cjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikK
ICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29y
cmVjdGlvbik7CiB9CiAKK3ZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVy
bmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUpCit7CisgICAgbV9kaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXItPmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUp
OworfQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpCit2
b2lkIEVkaXRvcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKCkKIHsKLSAgICBtX3NwZWxsaW5n
Q29ycmVjdG9yLT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25v
cmVkKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRpc21pc3NBbHRlcm5hdGl2
ZVRleHRVSSgpOwogfQogCiBib29sIEVkaXRvcjo6aW5zaWRlVmlzaWJsZUFyZWEoY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMjUxMCw3ICsyNTM1LDcgQEAgUGFzc1JlZlB0cjxS
YW5nZT4gRWRpdG9yOjpuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiBjdXJyZW50UmFuZ2UsIGNvbnN0
IFN0cmluZyYgdGEKICAgICByZXR1cm4gZmlyc3RWaXNpYmxlUmFuZ2UodGFyZ2V0LCBvcHRpb25z
KTsKIH0KIAotdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xl
YXJUeXBpbmdTdHlsZSkKK3ZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIC8vIElmIHRoZSBuZXcgc2VsZWN0aW9u
IGlzIG9ycGhhbmVkLCB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChu
ZXdTZWxlY3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09y
cGhhbigpKQpAQCAtMjUyMSwxNCArMjU0Niw4IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rp
b25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBiCiAg
ICAgLy8gVGhlIG9sZCBzZWxlY3Rpb24gY2FuIGJlIGludmFsaWQgaGVyZSBhbmQgY2FsbGluZyBz
aG91bGRDaGFuZ2VTZWxlY3Rpb24gY2FuIHByb2R1Y2Ugc29tZSBzdHJhbmdlIGNhbGxzLgogICAg
IC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTcyOTMxNT4gU29tZSBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlIGNvbnRhaW4gUmFuZ2VzIGZvciBzZWxlY3Rpb25zIHRoYXQgYXJlIG5vIGxvbmdl
ciB2YWxpZAogICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdT
ZWxlY3Rpb24gPT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwotICAgIGlmIChz
ZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpIHsKLSAgICAgICAgRnJhbWVTZWxl
Y3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAgICAgIGlmIChjbG9z
ZVR5cGluZykKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlw
aW5nOwotICAgICAgICBpZiAoY2xlYXJUeXBpbmdTdHlsZSkKLSAgICAgICAgICAgIG9wdGlvbnMg
fD0gRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5bGU7CisgICAgaWYgKHNlbGVjdGlvbkRp
ZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwotICAgIH0KIAogICAgIC8vIFNv
bWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhv
dXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhh
bXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlz
IG1hcmtlZCBieSBeKToKQEAgLTI2MTUsNyArMjYzNCw4IEBAIHZvaWQgRWRpdG9yOjp0ZXh0Rmll
bGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZSkKIAogdm9pZCBFZGl0b3I6OnRleHRGaWVsZERp
ZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKIHsKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJ
Z25vcmVkKCk7CisgICAgZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKCk7CisgICAgbV9kaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmRpc21pc3MoKTsKICAgICBpZiAoY2xpZW50KCkpCiAg
ICAgICAgIGNsaWVudCgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGUpOwogfQpAQCAtMjg4NSw3
ICsyOTA1LDcgQEAgdm9pZCBFZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQoYm9vbCBmbGFnKQogCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRT
ZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3Rv
cFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5zdG9wUGVuZGluZ0FsdGVybmF0aXZlcyhvbGRTZWxlY3Rpb24pOwogCiAgICAg
Ym9vbCBjbG9zZVR5cGluZyA9IG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmc7
CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRoaXMtPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0yOTM1LDcgKzI5NTUsNyBAQCB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24sIEZyYQogICAgIGlmICghaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVN
YXJrZXJzKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKIAotICAgIHJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAgICBub3RpZnlDb21wb25lbnRzT25DaGFuZ2VkU2Vs
ZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9CiAKIHN0YXRpYyBOb2RlKiBmaW5kRmly
c3RNYXJrYWJsZShOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggM2MyNTQ0
YTcxNmNhZmQ4ZDhkMzRhOWYzMjBhYmE1OTg1MWZiN2E2Zi4uYTRhMTU2ZTIwMGU2ZjU3ZmJlOTc3
ZGFmNTI3OTA5NTY0YTZiMGI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKICNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRl
ICJFZGl0aW5nQmVoYXZpb3IuaCIKQEAgLTQ2LDkgKzQ3LDExIEBAIHR5cGVkZWYgaW50IE5TV3Jp
dGluZ0RpcmVjdGlvbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOwogY2xhc3MgQ2xpcGJvYXJkOwogY2xhc3MgQ29tcG9zaXRlRWRpdENv
bW1hbmQ7CiBjbGFzcyBEZWxldGVCdXR0b25Db250cm9sbGVyOworY2xhc3MgRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOwogY2xhc3MgRWRpdG9yQ2xpZW50OwpAQCAtMTMyLDggKzEzNSw3IEBAIHB1
YmxpYzoKICAgICBib29sIHNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKSBj
b25zdDsKICAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9v
bCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqLCBSYW5nZSopOwotICAgIAotICAg
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24pOworCiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKIAogICAgIGJvb2wgc2VsZWN0aW9u
U3RhcnRIYXNTdHlsZShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7
CkBAIC0yMDMsNiArMjA1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBT
dHJpbmcmLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KTsKICAgICBib29sIGluc2VydFRleHRGb3JD
b25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpOwogICAgIGJvb2wgaW5zZXJ0
VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0SW5z
ZXJ0ZWRUZXh0LCBUZXh0RXZlbnQqIHRyaWdnZXJpbmdFdmVudCk7CisgICAgYm9vbCBpbnNlcnRE
aWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZl
bnQpOwogICAgIGJvb2wgaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgYm9vbCBpbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IoKTsKICAgICAKQEAgLTMyMiw3ICszMjUsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgLy8gSWYgdXNlciBjb25maXJtZWQg
YSBjb3JyZWN0aW9uIGluIHRoZSBjb3JyZWN0aW9uIHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBub24t
emVybyBsZW5ndGgsIG90aGVyd2lzZSBpdCBtZWFucyB0aGF0IHVzZXIgaGFzIGRpc21pc3NlZCB0
aGUgcGFuZWwuCiAgICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3Ry
aW5nJiBjb3JyZWN0aW9uKTsKLSAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9y
ZWQoKTsKKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZSk7CisgICAgdm9pZCBkaXNtaXNzQWx0ZXJuYXRpdmVUZXh0VUko
KTsKIAogICAgIHZvaWQgcGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOwogICAgIHZvaWQgcGFzdGVB
c1BsYWluVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNtYXJ0UmVwbGFjZSk7CkBAIC00MDIsNiAr
NDA2LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7CiAgICAg
T3duUHRyPFNwZWxsQ2hlY2tlcj4gbV9zcGVsbENoZWNrZXI7CiAgICAgT3duUHRyPFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fc3BlbGxpbmdDb3JyZWN0b3I7CisgICAgT3duUHRyPERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI7CisgICAgT3duUHRyPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+IG1fYWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fbWFyazsKICAgICBib29s
IG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsKICAgICBFZGl0b3JQYXJhZ3JhcGhT
ZXBhcmF0b3IgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yOwpAQCAtNDIzLDcgKzQyOSw4IEBA
IHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbGFzdFZpc2libGVSYW5nZShjb25zdCBT
dHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVS
YW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKIAotICAgIHZvaWQgY2hh
bmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKKyAgICB2b2lk
IGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKKyAgICB2b2lk
IG5vdGlmeUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CiAK
ICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBiNGQ5MmUzM2IyNDc3NWQ3YTMz
YTZkY2ZkY2Y0NzViOWY2N2I0YzQzLi4xNTJiMjA0ZTdkM2I2OTBiZTcxNzRjNjA5Yjk5MTAwMWU1
MjNkOTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0xMTgs
NiArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBDbGVhclR5cGluZ1N0eWxlID0gMSA8PCAyLAog
ICAgICAgICBTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQgPSAxIDw8IDMsCiAgICAgICAgIERvTm90
U2V0Rm9jdXMgPSAxIDw8IDQsCisgICAgICAgIERpY3RhdGlvblRyaWdnZXJlZCA9IDEgPDwgNQog
ICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBTZXRTZWxlY3Rpb25PcHRpb25zOyAvLyBVbmlv
biBvZiB2YWx1ZXMgaW4gU2V0U2VsZWN0aW9uT3B0aW9uIGFuZCBFVXNlclRyaWdnZXJlZAogICAg
IHN0YXRpYyBpbmxpbmUgRVVzZXJUcmlnZ2VyZWQgc2VsZWN0aW9uT3B0aW9uc1RvVXNlclRyaWdn
ZXJlZChTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCBlMDk2NWUwZjY1
NWY2NzA2YjcwNGNmNThmYjg0ZThlNmQyN2U5ODE2Li42ZGI0N2M5ZmUyYTRkNDg4NDEzMWMxM2Y1
ZWM4YWZhNDVlMDAwNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTQ1LDYgKzQ2LDIyIEBAIEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0
cjxUZXh0PiBub2RlLCB1bnNpCiAgICAgQVNTRVJUKCFtX3RleHQuaXNFbXB0eSgpKTsKIH0KIAor
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChQYXNz
UmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQorICAgIDogU2ltcGxlRWRpdENv
bW1hbmQobm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9vZmZz
ZXQob2Zmc2V0KQorICAgICwgbV90ZXh0KHRleHQpCit7CisgICAgQVNTRVJUKG1fbm9kZSk7Cisg
ICAgQVNTRVJUKG1fb2Zmc2V0IDw9IG1fbm9kZS0+bGVuZ3RoKCkpOworICAgIEFTU0VSVCghbV90
ZXh0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtl
cnNbaV07CisgICAgICAgIG1fbWFya2Vycy5hcHBlbmQoRG9jdW1lbnRNYXJrZXIobWFya2VyLnR5
cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBvZmZzZXQsIG1hcmtlci5lbmRPZmZzZXQoKSAr
IG9mZnNldCwgbWFya2VyLmRldGFpbHMoKSkpOworICAgIH0KK30KKyAgICAKIHZvaWQgSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgaWYgKCFtX25vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpKQpAQCAtNTksNiArNzYsMTAgQEAgdm9pZCBJbnNlcnRJbnRvVGV4dE5v
ZGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIG1fbm9kZS0+
aW5zZXJ0RGF0YShtX29mZnNldCwgbV90ZXh0LCBlYyk7CiAKKyAgICBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBkb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21hcmtlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1h
cmtlckNvbnRyb2xsZXItPmFkZE1hcmtlcihtX25vZGUuZ2V0KCksIG1fbWFya2Vyc1tpXSk7CisK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAg
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5ub2RlVGV4dENoYW5nZU5vdGlmaWNhdGlvbiht
X25vZGUtPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dEluc2VydGVkLCBtX29mZnNl
dCwgbV90ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmgKaW5kZXggZjY4NTQ3MjFiYTFhMWI1YjkzNTc4Zjc5Y2E3ODk1MjZj
MTg2MzFlMy4uNTIyZTFlMmFkNzY4NzRkNzk4N2M2YzNhOGUzYTJjMDA5YTY5ZTk4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgK
QEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVu
dE1hcmtlcjsKIGNsYXNzIFRleHQ7CiAKIGNsYXNzIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQg
OiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewpAQCAtMzksOCArNDAsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQobm9k
ZSwgb2Zmc2V0LCB0ZXh0KSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cj4mIG1hcmtlcnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQobm9kZSwgb2Zmc2V0LCB0ZXh0LCBtYXJrZXJzKSk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0
PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNl
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJr
ZXJzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRvVW5hcHBseSgpIE9WRVJSSURFOwpAQCAtNTIsNiArNTksNyBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxUZXh0PiBtX25vZGU7CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CiAgICAgU3Ry
aW5nIG1fdGV4dDsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1fbWFya2VyczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKaW5kZXggMzlmYTJhODk3ZmI2YzJhN2E3NWM3YWY1ZDM2ODI5YTA1YzQz
NjYwMi4uOTNlOWIxMzI3ZTQyN2ZlNzA4MDM3YjZhNWZjMTJkYjk3ZjA3MGM4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJFZGl0aW5nVGV4dC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpAQCAtNDYsNiArNDcs
MTUgQEAgSW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRDb21tYW5kKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib28KIHsKIH0KIAorSW5zZXJ0VGV4dENvbW1hbmQ6
Okluc2VydFRleHRDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQorICAgIDogQ29tcG9zaXRl
RWRpdENvbW1hbmQoZG9jdW1lbnQpCisgICAgLCBtX3RleHQodGV4dCkKKyAgICAsIG1fc2VsZWN0
SW5zZXJ0ZWRUZXh0KGZhbHNlKQorICAgICwgbV9yZWJhbGFuY2VUeXBlKFJlYmFsYW5jZUxlYWRp
bmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzKQorICAgICwgbV9tYXJrZXJzKG1hcmtlcnMpCit7Cit9
CisKIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjpwb3NpdGlvbkluc2lkZVRleHROb2RlKGNv
bnN0IFBvc2l0aW9uJiBwKQogewogICAgIFBvc2l0aW9uIHBvcyA9IHA7CkBAIC0xNjUsNyArMTc1
LDEwIEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBSZWZQdHI8
VGV4dD4gdGV4dE5vZGUgPSBzdGFydFBvc2l0aW9uLmNvbnRhaW5lclRleHQoKTsKICAgICAgICAg
Y29uc3QgdW5zaWduZWQgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKTsKIAotICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dE5vZGUsIG9mZnNldCwgbV90
ZXh0KTsKKyAgICAgICAgaWYgKG1fbWFya2Vycy5zaXplKCkpCisgICAgICAgICAgICBpbnNlcnRU
ZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSh0ZXh0Tm9kZSwgb2Zmc2V0LCBtX3RleHQsIG1fbWFya2Vy
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0Tm9k
ZSwgb2Zmc2V0LCBtX3RleHQpOwogICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHRO
b2RlLCBvZmZzZXQgKyBtX3RleHQubGVuZ3RoKCkpOwogCiAgICAgICAgIGlmIChtX3JlYmFsYW5j
ZVR5cGUgPT0gUmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAppbmRleCAxYWRiYTQ0YWUyNzcw
NWI2MDFhYTJkMWFiNDI1YWY2NTQ3NTg0OWJkLi40Y2QwZmUwMDUxNzYxMTRhYzAyNGM5OWE1Mjhj
ZmQyYjZiMGM5OGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRl
eHRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9j
dW1lbnRNYXJrZXI7CisKIGNsYXNzIEluc2VydFRleHRDb21tYW5kIDogcHVibGljIENvbXBvc2l0
ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKICAgICBlbnVtIFJlYmFsYW5jZVR5cGUgewpAQCAtNDMs
OSArNDUsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydFRl
eHRDb21tYW5kKGRvY3VtZW50LCB0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQsIHJlYmFsYW5jZVR5
cGUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4g
Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCwgdGV4dCwgbWFya2VycykpOworICAg
IH0KKwogcHJpdmF0ZToKIAogICAgIEluc2VydFRleHRDb21tYW5kKERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgUmViYWxhbmNlVHlwZSk7Cisg
ICAgSW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOwogCiAgICAgdm9pZCBkZWxldGVDaGFy
YWN0ZXIoKTsKIApAQCAtNjEsNiArNjksNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3RleHQ7
CiAgICAgYm9vbCBtX3NlbGVjdEluc2VydGVkVGV4dDsKICAgICBSZWJhbGFuY2VUeXBlIG1fcmVi
YWxhbmNlVHlwZTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1fbWFya2VyczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDRmZmRjN2Y5NTZjMDk3
NzYzZDJiM2U0YTEyMDg3ZDZmMDQ3NDcxY2EuLmEwZTc1NTgzZmNmMTBjNjg2ZjA1NjM0ZTRhZjVm
MjE0OTliMTBkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKIAor
I2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDb21wb3Np
dGVFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCkBAIC0z
NCw3ICszNiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5n
SGVscGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC0xNTUsNyArMTU2LDcgQEAg
Ym9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dl
ZChQYXNzUmVmUHRyPFJhbmdlPiBtaXMKIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50KQogewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVj
dEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3ggPSByYW5nZUJvdW5kaW5nQm94SW5Sb290VmlldyhtX2ZyYW1lLT52aWV3KCksIHJhbmdlVG9S
ZXBsYWNlLmdldCgpKTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5U
ZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKQEAgLTE5OSw0MyArMjAwLDkgQEAgdm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3Qg
VmVjdG9yPERvY3VtZW4KICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAg
ICBpZiAoZWMpCisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gcmVwbGFjZVRl
eHRJblJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpLCBtX2ZyYW1lLCB0cnVlKTsK
KyAgICBpZiAoIXJlcGxhY2VtZW50UmFuZ2UpCiAgICAgICAgIHJldHVybjsKLQotICAgIHNldFN0
YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJh
Z3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0
aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5n
ZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLT5lbmRQb3NpdGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3Jk
IGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRo
YXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFj
ZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgot
ICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRv
IHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAotICAgIC8vIHJl
bGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGgu
IFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3Jl
IHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBm
aXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9m
IHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCi0g
ICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0
Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZS
YW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9C
ZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIGlmIChl
YykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBv
ZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBs
YWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2Ug
dGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCBy
YW5nZSBhcm91bmQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAg
YXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVS
ZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7Ci0gICAg
c2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJl
cGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBo
LCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKLQot
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5l
d1RleHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBs
YWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CiAg
ICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtMjk4LDcgKzI2NSw3IEBAIHZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxT
cGVsbGluZ0NvcnJlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3
UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KSk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJv
b3RWaWV3KG1fZnJhbWUtPnZpZXcoKSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLmdldCgpKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+KCkpOwogICAgIH0KQEAgLTMxNiw3ICsyODMsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdD
b3JyZQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7
CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0g
cm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmdldCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmFuZ2VCb3VuZGlu
Z0JveEluUm9vdFZpZXcobV9mcmFtZS0+dmlldygpLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHko
KSkKICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlv
blBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKICAgICB9CkBAIC0z
NjAsNzEgKzMyNywyNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcgogYm9vbCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGlu
Z0NvcnJlY3Rpb25FbmFibGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0
Ci17Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlmICghdmll
dykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRl
eHRRdWFkczsKLSAgICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0
IGJvdW5kaW5nUmVjdDsKLSAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51
bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0gICAgcmV0dXJuIHZpZXctPmNvbnRl
bnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOwotfSAgICAgICAgCit9ICAgICAg
CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit2b2lkIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0
IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQb3NpdGlv
biwgYm9vbCogc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKQogewotICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwot
ICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQg
d29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhl
IG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJl
dmVydCB0aGUKLSAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0
IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUg
bmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3Vy
cmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rp
b24pCisgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRp
b24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBWaXNp
YmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7
Ci0gICAgCi0gICAgLy8gQ3JlYXRpbmcgYSBWaXNpYmxlIHBvc2l0aW9uIHRyaWdnZXJzIGEgbGF5
b3V0IGFuZCB0aGVyZSBpcyBubwotICAgIC8vIGd1YXJhbnRlZSB0aGF0IHRoZSBzZWxlY3Rpb24g
aXMgc3RpbGwgdmFsaWQuCi0gICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uLmlzTnVsbCgpKQorICAg
IE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCks
IG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwor
ICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAg
IGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9z
aXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24g
IT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHBv
c2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocG9z
aXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJO
b2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50
ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJz
W2ldOwotICAgICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZmZzZXQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICBTdHJpbmcgY3Vy
cmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKCFjdXJy
ZW50V29yZC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7Ci0gICAg
ICAgIGlmIChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCi0gICAg
ICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci0+ZGVzY3Jp
cHRpb24oKTsKLSAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJy
ZWFrOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRS
YW5nZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50
V29yZDsKKyAgICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
CisgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CisgICAgZWxzZSB7CisgICAgICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbigp
OworICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVJldmVyc2lvbik7CiAgICAgfQorICAgICpzaG91bGRJZ25vcmVPdGhlck1hcmtl
cnMgPSB0cnVlOwogfQogCiB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3Bv
bmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aAppbmRleCBkZmQwNjA4YjIzN2YyMDU2OWJjYjE1MjFmZDU4ZDM0NGFmYWRjZWM3Li5iMmE2MmRh
YWYxZmY2Y2EwYzRlMTkyNjViMTljNTNhNTc1ZmI4NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApAQCAtODEsNyAr
ODEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKSBVTkxF
U1NfRU5BQkxFRCh7fSkKIAogICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICBTdHJpbmcgZGlzbWlzc1Nvb24o
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1
cm4gU3RyaW5nKCk7IH0pCiAgICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9S
ZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudCk7IH0pCiAK
ICAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+JikgVU5MRVNTX0VOQUJMRUQoe30pCkBAIC05MSw3ICs5MCw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsg
VU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQogICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVk
aXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAgICAgdm9p
ZCByZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qKSBVTkxF
U1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKIAogICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBV
TlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKICAgICB2b2lkIGFwcGx5UGVuZGluZ0NvcnJl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKQEAgLTEx
NCwxNiArMTEyLDIwIEBAIHB1YmxpYzoKICAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9C
ZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdl
VG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3Ry
aW5nVG9CZVJlcGxhY2VkKTsgcmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVsZXRlZEF1dG9j
b3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsg
fSkKIAorICAgIHZvaWQgcmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRN
YXJrZXImLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24sIGJvb2wqIHNob3VsZEln
bm9yZU90aGVyTWFya2VycykgVU5MRVNTX0VOQUJMRUQoe1VOVVNFRF9QQVJBTShlbmRPZldvcmRQ
b3NpdGlvbik7IFVOVVNFRF9QQVJBTShzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpO30pCisKICNp
ZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwogCi0gICAgYm9vbCBzaG91bGRTdGFy
dFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGludCBlbmRPZmZzZXQpIGNv
bnN0CisgICAgYm9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiBt
YXJrZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKCgobWFy
a2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXItPmRl
c2NyaXB0aW9uKCkuaXNOdWxsKCkpIAotICAgICAgICAgICAgICAgICB8fCBtYXJrZXItPnR5cGUo
KSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2Vy
LT5lbmRPZmZzZXQoKSkgPT0gZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuICgoKG1hcmtlci50
eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRp
b24oKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNl
dCgpKSA9PSBlbmRPZmZzZXQpOwogICAgIH0KIAorICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKwogICAgIEVkaXRvckNsaWVudCogY2xp
ZW50KCk7CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7CiAgICAgRmxvYXRS
ZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA5YWUzOTU1NDFhODNjNWUyNGIwOWZl
NGI0NWMwYTlhZmIxMmZhNzhmLi5iZmZkMjI3MmRjNzdiY2FkYzZiNDlhYjljZjkyOGY2ZjJlM2Uy
ZjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTQ4LDE4
ICs0OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotc3RhdGljIGJvb2wgY2FuQXBwZW5kTmV3TGluZUZlZWQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQotewotICAgIE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24ucm9vdEVkaXRh
YmxlRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBub2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7Ci0gICAgcmV0dXJuIGV2ZW50
LT50ZXh0KCkubGVuZ3RoKCk7Ci19Ci0KIFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9j
dW1lbnQgKmRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uc3QgU3RyaW5n
ICZ0ZXh0VG9JbnNlcnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKICAgICA6IENvbXBvc2l0
ZUVkaXRDb21tYW5kKGRvY3VtZW50KQogICAgICwgbV9jb21tYW5kVHlwZShjb21tYW5kVHlwZSkK
QEAgLTM4Nyw3ICszNzUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRo
b3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiB7Ci0gICAgaWYgKCFjYW5BcHBlbmROZXdMaW5l
RmVlZChlbmRpbmdTZWxlY3Rpb24oKSkpCisgICAgaWYgKCFjYW5BcHBlbmROZXdMaW5lRmVlZFRv
U2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3Vt
ZW50KCkpKTsKQEAgLTM5Niw3ICszODQsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExp
bmVCcmVhaygpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KCkKIHsKLSAgICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkKGVuZGluZ1NlbGVjdGlvbigpKSkK
KyAgICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggODZmNTI5YjZhNDVi
ODYzNGI3N2Y2Zjk0YTIzOTdlODNlNjdiMzk0ZC4uMjdiNzgwMTQ5ZmM0ZjM5NzcyZDY4NTM1YmM2
MDE2NDI2NDI0ZjE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rp
b24uY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVNlbGVjdGlvbi5oIgogCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgpAQCAtNjA4LDYgKzYwOSwxOCBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0
aW9uOjpub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91
bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IDA7CiB9CiAKK2Jvb2wgY2FuQXBwZW5kTmV3TGlu
ZUZlZWRUb1NlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7Cisg
ICAgTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8QmVmb3JlVGV4dElu
c2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZShTdHJp
bmcoIlxuIikpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG5vZGUtPmRpc3BhdGNo
RXZlbnQoZXZlbnQsIGVjKTsKKyAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5ndGgoKTsKK30K
KwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9u
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXgg
OGM4MTBkYTRkZDE5N2UzMWNmNmE1ZjZmOGI4Yjg4MjYyOTdiYjdlZi4uYjJjM2NlNGQ5ZjVjOGRi
NWJkNGZiNWEyZjNhMGUyMzYyYTcxYjU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlU2VsZWN0aW9uLmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGEsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGIpCiAg
ICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorYm9vbCBjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4
IDJiMjZhMDY5OGVmM2NhZjg1OWIwZjgxYmI1OWUzNmY2NTg1NjBmMWUuLjU0NzY2MGZjYTkyYjVh
NjgzOWM5MDhhMDAxMGQ2MzY1NTNlNzllNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKQEAgLTUyNSw2ICs1MjUsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIHsgfQogI2VuZGlmCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCisgICAgdmlydHVhbCB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZs
b2F0UmVjdCYsIHVpbnQ2NF90KSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRp
b25BbHRlcm5hdGl2ZVVJKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaWN0YXRpb25B
bHRlcm5hdGl2ZXModWludDY0X3QpIHsgfTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1h
ckRldGFpbCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxp
bmdVSShib29sKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDRlY2Q1NjU4
NGQzM2ZmYzY0OTY2NzYyZTE2NjU3NWFkNmVjMDA2ZTQuLjJjZmNmMTE5ZWRhY2QwZjFhZjEzNzNm
ZTI1MTdhZTdkZTJhODdjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9y
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBFZGl0b3JDbGllbnRfaAogI2RlZmluZSBFZGl0b3JDbGllbnRf
aAogCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRB
Y3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTE1OCw2ICsxNTksMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSA9IDA7CiAjZW5kaWYKIAorI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQorICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJu
YXRpdmVVSShjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2
NF90IGRpY3RhdGlvbkNvbnRleHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rh
dGlvbkFsdGVybmF0aXZlVUkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3RhdGlv
bkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9IDA7CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhNzFlODUxNTQ2ZmMyMGFiODdjYTc3MjA1
NTYxNzRmYzY2NjJlZTdjLi4wYmYxYmRlMGJlMjU5ZTQyY2RiM2NlNmFkMjc4ZmVlZDg0NWFjYTli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMTg4LDYgKzMxODgsMjkg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYg
dGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmUKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZl
bnQsIGVjKTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CisKK2Jvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVEaWN0YXRpb25JbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25B
bHRlcm5hdGl2ZXMsIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQpCit7CisgICAgaWYgKCFtX2ZyYW1l
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRXZlbnRUYXJnZXQqIHRhcmdldDsKKyAgICBp
ZiAodW5kZXJseWluZ0V2ZW50KQorICAgICAgICB0YXJnZXQgPSB1bmRlcmx5aW5nRXZlbnQtPnRh
cmdldCgpOworICAgIGVsc2UKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXROb2RlRm9yRG9j
dW1lbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkp
CisgICAgICAgIHZpZXctPnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKKworICAgIFJlZlB0
cjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24obV9mcmFt
ZS0+ZG9tV2luZG93KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgZXZlbnQt
PnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOworCisgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsKKyAgICByZXR1cm4g
ZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7Cit9CiAgICAgCiBib29sIEV2ZW50SGFuZGxlcjo6aXNL
ZXlib2FyZE9wdGlvblRhYihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCmluZGV4IDcwMWZhMmJmOTQ1NTU0OTc0YmQ5ZGY0NmE0NzYxOTM3OTczMDUz
NWIuLjgxZThkZDBhMGNiMjY3NDgwMTAwNGM5Njg3YmQxZTY3NjczZjI2MGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBFdmVudEhhbmRs
ZXJfaAogI2RlZmluZSBFdmVudEhhbmRsZXJfaAogCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSAiRHJh
Z1N0YXRlLmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKQEAgLTE4Niw2ICsxODcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRF
dmVudCopOwogCiAgICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRl
eHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQgPSAwLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0
RXZlbnRJbnB1dEtleWJvYXJkKTsKKyAgICBib29sIGhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcywgRXZlbnQqIHVuZGVybHlpbmdFdmVudCk7CiAg
ICAgdm9pZCBkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKFRleHRFdmVudCopOwogCiAjaWYg
RU5BQkxFKERSQUdfU1VQUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggZDVjMTc2ZDIxZTJi
NjE2YTUwMWVlMTQ0OWRiMmUwNTZiMmI4ZGE4NS4uMWQ1OWM2ZWRmMDc1Zjk2OWFmZTE3ZjYxNmU1
MzEyYmUyNjdmMzEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTkxNiw3ICs5MTYsNyBAQCB2
b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9y
LCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZWRpdG9yLmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAg
ICBtX2VkaXRvci5kaXNtaXNzQWx0ZXJuYXRpdmVUZXh0VUkoKTsKIAogI2lmIEVOQUJMRShTVkcp
CiAgICAgLy8gUmVzcGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBz
dGFuZGFsb25lIFNWRyBkb2N1bWVudHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY3YmVmNGY5NTg5NThmMmJkNzEyNDU5
ODI1N2ZjZDc5Y2ViMWZkYzkuLmQxZTAzY2NhZjRmMGE3OGY5NGY3YWUzZjQxOTM2YWVlYTBmY2E1
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCkBAIC0zNTIsMTIgKzM1MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5k
aW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpOwogCiAgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZyk7Ci0gICAgICAg
IGVudW0gVGV4dENoZWNraW5nTGluZVN0eWxlIHsKLSAgICAgICAgICAgIFRleHRDaGVja2luZ1Nw
ZWxsaW5nTGluZVN0eWxlLAotICAgICAgICAgICAgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHls
ZSwKLSAgICAgICAgICAgIFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlCisgICAgICAg
IGVudW0gVGV4dE1hcmtlckxpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0TWFya2VyU3BlbGxp
bmdMaW5lU3R5bGUsCisgICAgICAgICAgICBUZXh0TWFya2VyR3JhbW1hckxpbmVTdHlsZSwKKyAg
ICAgICAgICAgIFRleHRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlLAor
ICAgICAgICAgICAgVGV4dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZQogICAg
ICAgICB9OwotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlKTsKKyAgICAgICAgdm9p
ZCBkcmF3TGluZUZvclRleHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBU
ZXh0TWFya2VyTGluZVN0eWxlKTsKIAogICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdDsKICAgICAgICAgdm9pZCBzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGJhODg2YTAzYzJjOTA2MjIzNDMzYTMzYzAyZTY0MDUz
Nzc2OTM5MGYuLjFhYjE1ZWNkNmE1MmYzNTM2MWU2ZDFlYzQwZDgzYmNkZWNhNzBhMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTY4Miw3ICs2ODIsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxv
YXQgd2lkdGgsIGJvbwogI2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2VuZGlmCiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEZsb2F0
UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkxLDEw
ICs2OTEsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2kKICAgICBjYWlyb19zYXZlKGNyKTsK
IAogICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGlu
ZVN0eWxlOgorICAgIGNhc2UgVGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBj
YWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJrZXJHcmFt
bWFyTGluZVN0eWxlOgogICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwgMCwgMSwgMCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQppbmRleCBh
Y2VkOTZiMmY0ZTdmZmMzODNjZWZlNzFkYjc5YTY2YTlhYzY2ODIyLi4zMDMwZDZiNmJiMjgxNDgy
MzA4Zjc1MWZhMmIzOTYxMzI4YTc2ZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KQEAgLTk5LDcg
Kzk5LDcgQEAgc3RhdGljIE5TQ29sb3IqIGNyZWF0ZVBhdHRlcm5Db2xvcihOU1N0cmluZyogZmly
c3RDaG9pY2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2gKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBp
cyBhIHN0YW5kYXJkIHBsYXRmb3JtIGNvbXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5k
YXJkIHBsYXRmb3JtIGFydHdvcmsgZm9yIHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
d2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdp
ZHRoLCBUZXh0TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZAogICAgIGJvb2wgdXNpbmdEb3Q7CiAgICAgTlNDb2xvciAqcGF0dGVybkNvbG9y
OwogICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdTcGVsbGlu
Z0xpbmVTdHlsZToKKyAgICAgICAgY2FzZSBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBj
b2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxz
ZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZAogICAgICAgICAg
ICAgcGF0dGVybkNvbG9yID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5l
U3R5bGU6CisgICAgICAgIGNhc2UgVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6CiAgICAgICAg
IHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBwYXR0ZXJuIGNvbG9yLgog
ICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFyID0gZmFsc2U7CkBAIC0x
MzEsNyArMTMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNr
aW5nKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWQKICAgICAgICAgfQogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgICAgICAvLyBUbyBzdXBwb3J0IGNvcnJlY3Rp
b24gcGFuZWwuCi0gICAgICAgIGNhc2UgVGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGU6
CisgICAgICAgIGNhc2UgVGV4dE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5
bGU6CisgICAgICAgIGNhc2UgVGV4dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHls
ZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0
ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAppbmRleCA0NDE3ZDdiODEx
NzYyMzFiZTc0ZTFjNmViYzE0YWNiNjM4ZGMxZTVkLi5hM2IwZDJkYjk4YjhhZWZmOTQ2NjU2Y2U3
YTE5NzIzYTAxNDM4NmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcApAQCAt
MjQ2LDcgKzI0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29u
c3QgSW50UG9pbnQmIG9yaWdpbiwgaW50IHdpZHRoLCBib29sIHByCiAgICAgVU5VU0VEX1BBUkFN
KHByaW50aW5nKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGludCB3aWR0aCwgVGV4dENoZWNraW5nTGlu
ZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtl
cihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCmluZGV4IGFhNDllMmRkZmYyMmM4NDRkYWM0NmFiOGRkNmQ0NDgxNTE0
YjJiMzcuLjg5OTcyNTRkOThlNzAzNjA4MTliZGQ4YTllZjJjM2YyN2ZmYWQ4OTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAKQEAgLTk3NSw3ICs5NzUsNyBAQCBzdGF0aWMgdm9pZCBkcmF3RXJyb3JVbmRl
cmxpbmUoUVBhaW50ZXIgKnBhaW50ZXIsIHFyZWFsIHgsIHFyZWFsIHksIHFyZWFsIHdpZHRoLAog
fQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25z
dCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUg
c3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0
IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5
bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
OTg0LDEwICs5ODQsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2kKICAgICBjb25zdCBRUGVu
IG9yaWdpbmFsUGVuID0gcGFpbnRlci0+cGVuKCk7CiAKICAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0g
ICAgY2FzZSBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJr
ZXJTcGVsbGluZ0xpbmVTdHlsZToKICAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpyZWQpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU6Cisg
ICAgY2FzZSBUZXh0TWFya2VyR3JhbW1hckxpbmVTdHlsZToKICAgICAgICAgcGFpbnRlci0+c2V0
UGVuKFF0OjpncmVlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNr
aWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAppbmRleCA0Zjc5Y2ZiMGI1ZTY5YzVjNTRlNzNiZDBlMmNiYTlhMzk1YWY2
NWViLi45OTI3NjdlMzE1MGJiOTlmNDlmZWVhMDFiZTdmNzk1ZDQyNTcxZDQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNr
aWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50
MikKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVz
X1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgs
IFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLCBUZXh0
TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IGYzYTkxOWQ3MTNi
YTZlNzM0NmQ1ZTMxYWEwNjIxNDdlNjU5ZTQyM2QuLjRlYzc2OGYzYmIzMGE0ZDk2MWY4Yjk5NGE2
ZGYxZTE1YTJjMzZlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMTgxLDEyICsx
ODEsMTIgQEAgc3RhdGljIGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9yKCkgewogICAg
IHJldHVybiBncmFtbWFyQ29sb3I7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRl
eHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBUZXh0
TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSAhPSBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xp
bmVTdHlsZSAmJiBzdHlsZSAhPSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlKQorICAgIGlm
IChzdHlsZSAhPSBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGUgJiYgc3R5bGUgIT0gVGV4dE1h
cmtlckdyYW1tYXJMaW5lU3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNlIGFy
ZSB0aGUgc2FtZSBmb3IgbWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1tYXIKQEAgLTIwOSw3ICsyMDks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAot
ICAgIGNvbnN0IENvbG9yJiBwYXR0ZXJuQ29sb3IgPSBzdHlsZSA9PSBUZXh0Q2hlY2tpbmdHcmFt
bWFyTGluZVN0eWxlID8gZ3JhbW1hclBhdHRlcm5Db2xvcigpIDogc3BlbGxpbmdQYXR0ZXJuQ29s
b3IoKTsKKyAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUgPT0gVGV4dE1hcmtl
ckdyYW1tYXJMaW5lU3R5bGUgPyBncmFtbWFyUGF0dGVybkNvbG9yKCkgOiBzcGVsbGluZ1BhdHRl
cm5Db2xvcigpOwogICAgIHNldENHU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVybkNvbG9yKTsK
IAogICAgIHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgcG9pbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3ND
b250ZXh0V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
R3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCmluZGV4IDk2YmMzZGM1NTQ3MGU4ZTdlMzg3MDlkYmRl
MzIyNjQ0OWE4NmM1YTAuLjM4NTFkZDk0ZWI0ZmMwZmFhM2UzMDRjODczZmNiNWExNTJjM2ZmNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBo
aWNzQ29udGV4dFdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3Jp
Z2luLCBmbG9hdCB3aWR0aCwgYm9vCiAgICAgc2V0U3Ryb2tlU3R5bGUob2xkU3R5bGUpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQm
LCBmbG9hdCB3aWR0aCwgVGV4dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCmluZGV4IDQ1MjYzOGIwMTAzOGU3YjcyNWM3
MzJhOTcyYWI2NjdlMTA2ZTg0MjYuLjkwM2Q5ZWRhZDE0ODcyNjc0YTQ1ZDg2NzQwMDk5MjA2ZWI0
NTI4NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dy
YXBoaWNzQ29udGV4dFd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKQEAgLTQ0MiwxMyArNDQyLDEzIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aWR0aCwgYm9vCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9h
dCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0
IHdpZHRoLCBUZXh0TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUp
IHsKLSAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgIGNhc2UgVGV4
dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBl
bih3eFBlbigqd3hSRUQsIDIsIHd4TE9OR19EQVNIKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJrZXJHcmFt
bWFyTGluZVN0eWxlOgogICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hH
UkVFTiwgMiwgd3hMT05HX0RBU0gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA3YTZjNTYxNDky
NjQ1MmY1MGU2NGFkNjlkZGVjYjFjYjBhZDI2NTlmLi40YmJhYTk4Yjk4NDU4NDk3MDljNWYyZjFh
NWYwOTI1YWRkYTI1OGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCkBAIC05ODMsMjIgKzk4MywyNCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVj
b3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAg
ICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CiB9CiAKLXN0YXRpYyBHcmFwaGljc0NvbnRleHQ6
OlRleHRDaGVja2luZ0xpbmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBl
KERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCitzdGF0aWMgR3JhcGhpY3ND
b250ZXh0OjpUZXh0TWFya2VyTGluZVN0eWxlIHRleHRNYXJrZXJMaW5lU3R5bGVGb3JNYXJrZXJU
eXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCiB7CiAgICAgc3dpdGNo
IChtYXJrZXJUeXBlKSB7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6Ci0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxl
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0TWFya2VyU3BlbGxpbmdMaW5l
U3R5bGU7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZTsKKyAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU7CiAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKLSAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGU7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxh
Y2VtZW50TGluZVN0eWxlOworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlczoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlckRpY3Rh
dGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNr
aW5nU3BlbGxpbmdMaW5lU3R5bGU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRl
eHRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZTsKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNwZWxsaW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihHcmFwaGljc0NvbnRl
eHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJr
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQog
ewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFya2VycyAoNTMyNzg4NykK
ICAgICBpZiAodGV4dFJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCkpCkBAIC0xMDYz
LDcgKzEwNjUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJN
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYQogICAgICAgICAvLyBJbiBsYXJn
ZXIgZm9udHMsIHRob3VnaCwgcGxhY2UgdGhlIHVuZGVybGluZSB1cCBuZWFyIHRoZSBiYXNlbGlu
ZSB0byBwcmV2ZW50IGEgYmlnIGdhcC4KICAgICAgICAgdW5kZXJsaW5lT2Zmc2V0ID0gYmFzZWxp
bmUgKyAyOwogICAgIH0KLSAgICBwdC0+ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoRmxvYXRQb2lu
dChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQp
LCB3aWR0aCwgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJrZXItPnR5cGUo
KSkpOworICAgIHB0LT5kcmF3TGluZUZvclRleHRNYXJrZXIoRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgdGV4
dE1hcmtlckxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpKTsKIH0KIAogdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKQEAgLTExMzAsNiArMTEzMiw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbklu
ZGljYXRvcjoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50Ogor
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgog
ICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNTMsMTYgKzExNTYsMTcgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0
LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICAvLyBtYXJrZXIgaW50ZXJzZWN0cyB0aGlzIHJ1
bi4gIFBhaW50IGl0LgogICAgICAgICBzd2l0Y2ggKG1hcmtlci0+dHlwZSgpKSB7CiAgICAgICAg
ICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpTcGVsbGluZzoKLSAgICAgICAgICAgICAgICBwYWlu
dFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZv
bnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nR3JhbW1hckRpY3RhdGlv
bk1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFt
bWFyOgotICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJv
eE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcGFp
bnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRpb25NYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBz
dHlsZSwgZm9udCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2g6CiAgICAgICAgICAgICAgICAgcGFpbnRUZXh0
TWF0Y2hNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0
aW9uSW5kaWNhdG9yOgotICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJr
ZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOworICAgICAgICAg
ICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgICAgICAg
ICAgICAgIHBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKHB0LCBib3hPcmlnaW4s
IG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgogICAgICAgICAgICAg
ICAgIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIobWFya2VyLCBzdHlsZSwgZm9udCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA1ODk3MmQxMzRk
ZjI0MWJjODIyZGFiZjExYjBiYWI2M2EwODg5Njc4Li40OGI0MzA4OTdjYjA4NTY0OTMzYmM3Y2Ux
M2E1ZjVlMGU4MmJkYjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmgKQEAgLTE4Miw3ICsxODIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgaW50IGRlY29yYXRpb24sIGNvbnN0IFNoYWRvd0RhdGEqKTsKICAgICB2b2lkIHBhaW50U2Vs
ZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVu
ZGVyU3R5bGUqLCBjb25zdCBGb250Jik7Ci0gICAgdm9pZCBwYWludFNwZWxsaW5nT3JHcmFtbWFy
TWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9j
dW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOwor
ICAgIHZvaWQgcGFpbnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRpb25NYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRl
clN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7CiAgICAgdm9pZCBwYWludFRleHRN
YXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CiAgICAgdm9pZCBj
b21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5
bGUqLCBjb25zdCBGb250Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCBmMmYxMDk4MDQyNDA3NjdkMjUyYTU5Njg1NDdlNjEyMzU2Njk5NjI5Li5mNjAzNzY0ZmJjYmM2
OWY5N2IwMTVkNzg5YzRjYzZjZDNiYmZlNzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC05Niw2ICs5Niw4IEBAIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJvbShjb25z
dCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlCiAgICAgICAg
IHJlc3VsdCA9ICBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbjsKICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJrZXJUeXBlLCAiRGVsZXRlZEF1dG9jb3JyZWN0
aW9uIikpCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1hcmtlclR5cGUsICJEaWN0
YXRpb25BbHRlcm5hdGl2ZXMiKSkKKyAgICAgICAgcmVzdWx0ID0gRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlczsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YzhkZTc1NWI2Y2Q2MjZjMTE4NDE1N2JmMGEzMjg1MmNmMTI0MWNmMS4uMzRmZGE1MDE4ZjFlNTEy
OGZiZjZlNzJmM2ZiMzE4OTJjODFiY2QxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNzAsNiArMzcwLDEwIEBACiAJCUNEOEVBQzcz
MTFDQUM5QTMwMDc3NDA3NSAvKiBJT0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhFQUM3MjExQ0FDOUEzMDA3NzQwNzUgLyog
SU9LaXQuZnJhbWV3b3JrICovOyB9OwogCQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlci5oICovOyB9OwogCQlDREE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREE2MkFFMTEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXIubW0gKi87IH07CisJCUNFN0ZCODFDMTUyMjM1NDEwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENFN0ZCODE4MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0U3RkI4MUQxNTIyMzU0MTAwQkQxRUE5IC8qIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODE5MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gKi87IH07CisJCUNFN0ZCODFFMTUyMjM1NDEwMEJEMUVB
OSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODFBMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLzsgfTsKKwkJQ0U3RkI4MUYxNTIyMzU0MTAwQkQxRUE5IC8q
IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZCODFCMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UubW0gKi87IH07CiAJCUREN0NERUU3MEEyM0JBOUUwMDA2OTkyOCAvKiBX
ZWJUeXBlc0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBERDdDREVFNjBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICov
OyB9OwogCQlERDg5NjgyMDA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREODk2ODFF
MDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5oICovOyB9OwogCQlERDg5
NjgyMTA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDg5NjgxRjA5QUE4NzI0MDA5
N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkubW0gKi87IH07CkBAIC02OTksNiArNzAzLDEw
IEBACiAJCUNEOEVBQzcyMTFDQUM5QTMwMDc3NDA3NSAvKiBJT0tpdC5mcmFtZXdvcmsgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1l
d29yazsgbmFtZSA9IElPS2l0LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0lPS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
Q0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAv
KiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRTdGQjgxODE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRTdGQjgxOTE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
RTdGQjgxQTE1MjIzNTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTdGQjgxQjE1MjIzNTQxMDBCRDFFQTkg
LyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlERDdDREVFNjBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUeXBlc0ludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUREODk2ODFFMDlBQTg3MjQwMDk3RTdG
MCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVsZW1lbnREaWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlERDg5NjgxRjA5
QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVsZW1lbnREaWN0
aW9uYXJ5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKQEAgLTEyOTQsNiArMTMwMiwxMCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjgy
OTU4RDExMzI3MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovLAogCQkJCUI4Mjk1
OEQyMTMyNzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gKi8sCisJCQkJQ0U3RkI4
MTgxNTIyMzU0MDAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICov
LAorCQkJCUNFN0ZCODE5MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIubW0gKi8sCisJCQkJQ0U3RkI4MUExNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5oICovLAorCQkJCUNFN0ZCODFCMTUyMjM1NDEwMEJEMUVBOSAvKiBU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8sCiAJCQkJQjY4MDQ5NzEwRkZCQ0VDMTAwOUY3
RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUuaCAqLywKIAkJCQlCNjgwNDk3MjBGRkJDRUMxMDA5
RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5tbSAqLywKIAkJCQlBNURFRkMxMTExRDUzNDRC
MDA4ODUyNzMgLyogV2ViQXBwbGljYXRpb25DYWNoZVF1b3RhTWFuYWdlci5oICovLApAQCAtMTY0
Myw2ICsxNjU1LDggQEAKIAkJCQk0MUY0NDg0RjEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vy
c1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMkUyRkU1MTRFNDgxODIwMDdDQ0ExOCAv
KiBXZWJOb3RpZmljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMkUyRkU5MTRFNDgyMTUw
MDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0U3RkI4MUMxNTIyMzU0MTAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U3RkI4MUUxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDMwLDYgKzIwNDQsOCBA
QAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxRjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMkUyRkU2MTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJO
b3RpZmljYXRpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlDRTdGQjgxRDE1MjIzNTQxMDBCRDFF
QTkgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJQ0U3RkI4MUYxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OTgxNmE4NzYwODllYjM1NzllMGEyNzJmMjRjMDgzM2M3OGUyYTdkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKyNkZWZpbmUgRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKK09CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOworT0JK
Q19DTEFTUyBXZWJWaWV3OworCitjbGFzcyBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjsKKwor
Y2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoKSB7IH0KKyAgICAvLyBSZXR1cm5zIGEgZGljdGF0
aW9uIGNvbnRleHQgSUQuCisgICAgdWludDY0X3QgYWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFp
blB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQg
c2hvd0FsdGVybmF0aXZlcyhXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworICAg
IHZvaWQgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAgIHZvaWQgcmVtb3ZlQWx0ZXJuYXRpdmVz
KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxl
QWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmluZyogYWNjZXB0ZWRBbHRlcm5hdGl2ZSwgdWludDY0
X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0QWx0ZXJuYXRpdmVzKik7CisgICAgCisgICAgY2xh
c3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGlj
dGF0aW9uQ29udGV4dENvbnRyb2xsZXIoKSB7IH0KKyAgICAgICAgdWludDY0X3QgYWRkQWx0ZXJu
YXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgICAgIHZv
aWQgY2xlYXIoKTsKKyAgICAgICAgTlNUZXh0QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXNGb3JE
aWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworICAgICAgICB2b2lk
IHJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZhbGlkQ29udGV4dCA9
IDA7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZXRh
aW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiA+IEhhc2hNYXBUeXBlOworICAgICAgICBIYXNoTWFw
VHlwZSBtX2FsdGVybmF0aXZlc09iamVjdE1hcDsKKyAgICB9OworCisgICAgRGljdGF0aW9uQ29u
dGV4dENvbnRyb2xsZXIgbV9jb250ZXh0Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V2ViVmll
dz4gbV92aWV3OworfTsKKyNlbmRpZgorI2VuZGlmIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9E
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzI1ODMzYmM1NDQzZjRlOTExN2ZhNGQ3MWFmYTZlOWY1NGU3YzdlYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5tbQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCisKKyNpbXBvcnQgPEFwcEtpdC9OU1NwZWxsQ2hlY2tlci5oPgorI2ltcG9ydCA8
QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit1aW50NjRfdCBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2
ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sK
KyAgICB1aW50NjRfdCBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oYWx0ZXJu
YXRpdmVzLmdldCgpKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBpbnZhbGlk
Q29udGV4dDsKKyAgICBzdGQ6OnBhaXI8SGFzaE1hcFR5cGU6Oml0ZXJhdG9yLCBib29sPiByZXN1
bHQgPSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5hZGQoY29udGV4dCwgYWx0ZXJuYXRpdmVzKTsK
KyAgICBpZiAocmVzdWx0LmZpcnN0ID09IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmVuZCgpKQor
ICAgICAgICByZXR1cm4gaW52YWxpZENvbnRleHQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
Y29udGV4dDsKK30KKworTlNUZXh0QWx0ZXJuYXRpdmVzKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JEaWN0
YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgSGFzaE1hcFR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmZpbmQoZGlj
dGF0aW9uQ29udGV4dCk7CisgICAgaWYgKGl0ciA9PSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGl0ci0+c2Vjb25kLmdldCgp
OworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29u
dGV4dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5y
ZW1vdmUoZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6Y2xlYXIoKQoreworICAgIG1f
YWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmNsZWFyKCk7Cit9CisKK3VpbnQ2NF90IERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1Rl
eHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2ZXMpCit7CisgICAgcmV0dXJuIG1fY29udGV4dENv
bnRyb2xsZXIuYWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlcyk7Cit9CisKK3ZvaWQgRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpjbGVhcigpCit7CisgICAgcmV0dXJuIG1fY29udGV4
dENvbnRyb2xsZXIuY2xlYXIoKTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI6OnNob3dBbHRlcm5hdGl2ZXMoV2ViVmlldyogdmlldywgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpCit7CisgICAgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAgIGlmICghdmlldykKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fdmlldyA9IHZpZXc7CisgICAgTlNUZXh0QWx0ZXJuYXRpdmVz
KiBhbHRlcm5hdGl2ZXMgPSBtX2NvbnRleHRDb250cm9sbGVyLmFsdGVybmF0aXZlc0ZvckRpY3Rh
dGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgaWYgKCFhbHRlcm5hdGl2ZXMpCisg
ICAgICAgIHJldHVybjsKKyAgICBOU1NwZWxsQ2hlY2tlciogc3BlbGxDaGVja2VyID0gW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgW3NwZWxsQ2hlY2tlciBzaG93Q29y
cmVjdGlvbkluZGljYXRvck9mVHlwZTpOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3NlcyBw
cmltYXJ5U3RyaW5nOmFsdGVybmF0aXZlcy5wcmltYXJ5U3RyaW5nIGFsdGVybmF0aXZlU3RyaW5n
czphbHRlcm5hdGl2ZXMuYWx0ZXJuYXRpdmVTdHJpbmdzIGZvclN0cmluZ0luUmVjdDpbdmlldyBf
Y29udmVydFJlY3RGcm9tUm9vdFZpZXc6Ym91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nXSB2aWV3
Om1fdmlldy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5nKiBhY2NlcHRlZFN0cmlu
ZykgeworICAgICAgICBpZiAoYWNjZXB0ZWRTdHJpbmcpCisgICAgICAgICAgICBoYW5kbGVBY2Nl
cHRlZEFsdGVybmF0aXZlKGFjY2VwdGVkU3RyaW5nLCBkaWN0YXRpb25Db250ZXh0LCBhbHRlcm5h
dGl2ZXMpOworICAgIH1dOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmluZyogYWNjZXB0ZWRBbHRlcm5hdGl2
ZSwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0QWx0ZXJuYXRpdmVzKiBhbHRlcm5h
dGl2ZXMpCit7CisgICAgW2FsdGVybmF0aXZlcyBub3RlU2VsZWN0ZWRBbHRlcm5hdGl2ZVN0cmlu
ZzphY2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICBtX2NvbnRleHRDb250cm9sbGVyLnJlbW92ZUFs
dGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgW21f
dmlldy5nZXQoKSBfaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZTphY2NlcHRlZEFs
dGVybmF0aXZlXTsKKyAgICBtX3ZpZXcuY2xlYXIoKTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRlcm5hdGl2ZXMoKQoreworICAgIGlmICghbV92
aWV3KQorICAgICAgICByZXR1cm47CisgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIGRpc21pc3NDb3JyZWN0aW9uSW5kaWNhdG9yRm9yVmlldzptX3ZpZXcuZ2V0KCldOwor
fQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRp
dmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgbV9jb250ZXh0Q29udHJvbGxl
ci5yZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQp
OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhZGU2ZDdlZDIy
YWZkODYwYjE2ZGJlZGFlN2Q3MDk0ODUxODZjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaApAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFu
Z2VfaAorI2RlZmluZSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitPQkpDX0NMQVNTIE5T
VGV4dEFsdGVybmF0aXZlczsKKworc3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSB7Cisg
ICAgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKE5TVGV4dEFsdGVybmF0aXZlcyogYW5BbHRlcm5h
dGl2ZXMsIE5TUmFuZ2UgYVJhbmdlKTsKKyAgICBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoY29u
c3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKTsKKyAgICBOU1JhbmdlIHJhbmdl
OworICAgIFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+IGFsdGVybmF0aXZlczsKK307CisK
KyNlbmRpZgorCisjZW5kaWYgLy8gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2
ZVdpdGhSYW5nZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGUwNTc4NzEzZjE4NWJkODVlM2IzZjc4MThkM2Mx
NjE0ODJmNjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCisKKyNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMu
aD4KKworVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uo
TlNUZXh0QWx0ZXJuYXRpdmVzKiBhbkFsdGVybmF0aXZlcywgTlNSYW5nZSBhUmFuZ2UpCis6IHJh
bmdlKGFSYW5nZSkKKywgYWx0ZXJuYXRpdmVzKGFuQWx0ZXJuYXRpdmVzKQoreworfQorCitUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShjb25zdCBUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFub3RoZXIpCis6IHJhbmdlKGFub3RoZXIucmFuZ2UpCiss
IGFsdGVybmF0aXZlcyhhbm90aGVyLmFsdGVybmF0aXZlcykKK3sKK30KKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRl
eCAwNmZjYThkMGViZmUxZTlmYmQ3YjJiZGI1YWM5NDA4ODEwY2IyNDVjLi42MzQyZTI4NTQ0ODk2
MmU4ZTMxM2E0ODg1OTgwNWE1ODgxMzIwZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQyLDYgKzE0MiwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2Vi
Q29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCisjaWYgVVNFKERJQ1RBVElPTl9B
TFRFUk5BVElWRVMpCisgICAgdmlydHVhbCB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc21p
c3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBPVkVS
UklERTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyVW5kb09yUmVkb1N0ZXAo
UGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4sIGJvb2wgaXNSZWRvKTsKICAgICBXZWJFZGl0
b3JDbGllbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbQppbmRleCBjMzAxZWI1MDhjODdjMmE0MDU1MTI5YTBlOTZkYjJmZDYz
YmQyYzQxLi5lYzI1NjcyNTgwMjNkYTZlMGQyYWFhYjJkZjYyZDc5OWJjNTBiMjRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CkBAIC04ODksNiArODg5LDIzIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SCiB9CiAjZW5kaWYK
IAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBbbV93ZWJW
aWV3IF9zaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSTpib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0
IGZvckRpY3RhdGlvbkNvbnRleHQ6ZGljdGF0aW9uQ29udGV4dF07Cit9CisKK3ZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpCit7CisgICAgW21fd2Vi
VmlldyBfZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUldOworfQorCit2b2lkIFdlYkVkaXRv
ckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpCit7CisgICAgW21fd2ViVmlldyBfcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOmRp
Y3RhdGlvbkNvbnRleHRdOworfQorI2VuZGlmCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdv
cmQpCiB7CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNw
ZWxsaW5nUGFuZWxXaXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3BlbGxlZFdvcmRdOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggYTliMjkxZTQ5OWY4MDI5N2NjNzU2
NzlmMzkwZWY2YmRlMDYxYzRhNC4uNzZiODkxNjVjZTYwMjVlN2NiOGU1Yzk3ODJiOTYzYmEzZGU4
MDlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0zNCw2
ICszNCw3IEBACiAjaW1wb3J0ICJET01Eb2N1bWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01O
b2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgogI2ltcG9y
dCAiV2ViQ2xpcFZpZXcuaCIKICNpbXBvcnQgIldlYkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5oIgpA
QCAtNTg4OCw2ICs1ODg5LDIyIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAgfQogfQog
CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitzdGF0aWMgdm9pZCBjb2xsZWN0RGlj
dGF0aW9uVGV4dEFsdGVybmF0aXZlcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9y
PFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGFsdGVybmF0aXZlcykgeworICAgIE5TUmFuZ2Ug
ZWZmZWN0aXZlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAgICBOU1VJbnRlZ2VyIGxlbmd0
aCA9IFtzdHJpbmcgbGVuZ3RoXTsKKyAgICBkbyB7CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcyA9IFtzdHJpbmcgYXR0cmlidXRlc0F0SW5kZXg6ZWZmZWN0aXZlUmFuZ2UubG9jYXRp
b24gZWZmZWN0aXZlUmFuZ2U6JmVmZmVjdGl2ZVJhbmdlXTsKKyAgICAgICAgaWYgKCFhdHRyaWJ1
dGVzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIE5TVGV4dEFsdGVybmF0aXZlcyAqdGV4
dEFsdGVybmF0aXZlcyA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1RleHRBbHRlcm5hdGl2
ZXNBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKHRleHRBbHRlcm5hdGl2ZXMpCisgICAgICAg
ICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSh0ZXh0QWx0
ZXJuYXRpdmVzLCBlZmZlY3RpdmVSYW5nZSkpOworICAgICAgICBlZmZlY3RpdmVSYW5nZS5sb2Nh
dGlvbiA9IE5TTWF4UmFuZ2UoZWZmZWN0aXZlUmFuZ2UpOworICAgIH0gd2hpbGUgKGVmZmVjdGl2
ZVJhbmdlLmxvY2F0aW9uIDwgbGVuZ3RoKTsKK30KKyNlbmRpZgorCiAtICh2b2lkKWluc2VydFRl
eHQ6KGlkKXN0cmluZwogewogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBp
c0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKQEAgLTU5MDQsNyArNTky
MSwxNCBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcg
KnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgIE5TUmFuZ2UgcmVwbGFjZW1lbnRS
YW5nZSA9IHsgTlNOb3RGb3VuZCwgMCB9OwogICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKIAorI2lm
IFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2U+IGRpY3RhdGlvbkFsdGVybmF0aXZlczsKKyNlbmRpZgorCiAgICAgaWYgKGlzQXR0
cmlidXRlZFN0cmluZykgeworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICAg
ICBjb2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyhzdHJpbmcsIGRpY3RhdGlvbkFsdGVy
bmF0aXZlcyk7CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBtb3N0IGF0dHJp
YnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBmb3IgZXhhbXBsZSBpbnNlcnRpbmcgZnJvbSBDaGFy
YWN0ZXIgUGFsZXR0ZSBsb3NlcyBmb250IGFuZCBnbHlwaCB2YXJpYXRpb24gZGF0YS4KICAgICAg
ICAgLy8gSXQgZG9lcyBub3QgbG9vayBsaWtlIGFueSBpbnB1dCBtZXRob2RzIGV2ZXIgdXNlIGlu
c2VydFRleHQ6IHdpdGggYXR0cmlidXRlcyBvdGhlciB0aGFuIE5TVGV4dElucHV0UmVwbGFjZW1l
bnRSYW5nZUF0dHJpYnV0ZU5hbWUuCiAgICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107CkBA
IC01OTQzLDcgKzU5NjcsMTIgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICBpZiAoIWNv
cmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gQW4gaW5z
ZXJ0VGV4dDogbWlnaHQgYmUgaGFuZGxlZCBieSBvdGhlciByZXNwb25kZXJzIGluIHRoZSBjaGFp
biBpZiB3ZSBkb24ndCBoYW5kbGUgaXQuCiAgICAgICAgIC8vIE9uZSBleGFtcGxlIGlzIHNwYWNl
IGJhciB0aGF0IHJlc3VsdHMgaW4gc2Nyb2xsaW5nIGRvd24gdGhlIHBhZ2UuCi0gICAgICAgIGV2
ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZlbnRUZXh0LCBl
dmVudCk7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgICAgIGlmIChkaWN0
YXRpb25BbHRlcm5hdGl2ZXMuc2l6ZSgpKQorICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gW1tz
ZWxmIF93ZWJWaWV3XSBfaW5zZXJ0RGljdGF0ZWRUZXh0OmV2ZW50VGV4dCBhbHRlcm5hdGl2ZXM6
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzIHRyaWdnZXJpbmdFdmVudDpldmVudF07CisgICAgICAgIGVs
c2UKKyNlbmRpZgorICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3Io
KS0+aW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50KTsKICAgICB9IGVsc2UgewogICAgICAgICBl
dmVudEhhbmRsZWQgPSB0cnVlOwogICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJt
Q29tcG9zaXRpb24oZXZlbnRUZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpp
bmRleCBjNDE4YjAzOTFhMTgwMTU3Mjk3MGY4YjE5NDdlNDBlN2RjODY0YzMzLi5mYTEzM2QxOGEw
NzgwZDQ3NTI5MDA3MjhiMWE2OTUyOWE0N2MyNWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIK
ICNpbXBvcnQgIldlYlZpZXdEYXRhLmgiCiAKKyNpbXBvcnQgIkRpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5oIgogI2ltcG9ydCAiRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkludGVybmFsLmgi
CiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwu
aCIKQEAgLTYzMzQsNiArNjMzNSw1NSBAQCBzdGF0aWMgdm9pZCBnbGliQ29udGV4dEl0ZXJhdGlv
bkNhbGxiYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxvb3BBY3Rpdml0eQogfQogI2Vu
ZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKy0gKEJPT0wpX2luc2VydERp
Y3RhdGVkVGV4dDooY29uc3QgU3RyaW5nJil0ZXh0IGFsdGVybmF0aXZlczooY29uc3QgVmVjdG9y
PFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mKWFsdGVybmF0aXZlcyB0cmlnZ2VyaW5nRXZlbnQ6
KEV2ZW50Kil0cmlnZ2VyaW5nRXZlbnQKK3sKKyAgICBBU1NFUlQoIWFsdGVybmF0aXZlcy5pc0Vt
cHR5KCkpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsK
KyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIEVkaXRvciog
ZWRpdG9yID0gY29yZUZyYW1lLT5lZGl0b3IoKTsKKworICAgIFZlY3RvcjxEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uPiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uczsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UgPSBh
bHRlcm5hdGl2ZXNbaV07CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBfcHJp
dmF0ZS0+bV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmFkZEFsdGVybmF0aXZlcyhh
bHRlcm5hdGl2ZVdpdGhSYW5nZS5hbHRlcm5hdGl2ZXMpOworICAgICAgICBpZiAoZGljdGF0aW9u
Q29udGV4dCkKKyAgICAgICAgICAgIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLmFwcGVu
ZChEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKGFsdGVybmF0aXZlV2l0aFJhbmdlLnJhbmdl
LmxvY2F0aW9uLCBhbHRlcm5hdGl2ZVdpdGhSYW5nZS5yYW5nZS5sZW5ndGgsIGRpY3RhdGlvbkNv
bnRleHQpKTsKKyAgICB9CisKKyAgICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZWRpdG9yLT5pbnNlcnRUZXh0KHRleHQsIHRyaWdn
ZXJpbmdFdmVudCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZWRpdG9yLT5pbnNlcnREaWN0
YXRlZFRleHQodGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMsIHRyaWdnZXJpbmdF
dmVudCk7Cit9CisKKy0gKHZvaWQpX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOihjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKWJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQgZm9yRGljdGF0aW9u
Q29udGV4dDoodWludDY0X3QpZGljdGF0aW9uQ29udGV4dAoreworICAgIF9wcml2YXRlLT5tX2Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+c2hvd0FsdGVybmF0aXZlcyhzZWxmLCBib3Vu
ZGluZ0JveE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0KTsKK30KKworLSAodm9pZClf
ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkKK3sKKyAgICBfcHJpdmF0ZS0+bV9kaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKK30KKworLSAo
dm9pZClfcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOih1aW50NjRfdClkaWN0YXRpb25Db250
ZXh0Cit7CisgICAgX3ByaXZhdGUtPm1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5y
ZW1vdmVBbHRlcm5hdGl2ZXMoZGljdGF0aW9uQ29udGV4dCk7Cit9CisKKy0gKHZvaWQpX2hhbmRs
ZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6KE5TU3RyaW5nKilhbHRlcm5hdGl2ZQorewor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgaWYgKCFj
b3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYW5k
bGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKK30KKyNlbmRpZgor
CiAtIChOU1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tUm9vdFZpZXc6KE5TUG9pbnQpcG9pbnQKIHsK
ICAgICByZXR1cm4gTlNNYWtlUG9pbnQocG9pbnQueCwgW3NlbGYgYm91bmRzXS5zaXplLmhlaWdo
dCAtIHBvaW50LnkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3RGF0YS5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCmluZGV4
IGVhMmJmY2Y2MDc0ZTlhNTExYzNjM2VhZTJkYjRmZjVlNWVjM2M0ZjYuLjJjODMzZjBlOGFmYjli
ZWZlMjhhYjNkMWFiMmY0ZGMxOGU0ZjliZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaCIKKyNpbXBv
cnQgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9MYXllckZsdXNoU2NoZWR1bGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xheWVyRmx1c2hT
Y2hlZHVsZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KQEAg
LTU4LDYgKzU5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQGNsYXNzIFdlYkZ1bGxTY3JlZW5D
b250cm9sbGVyOwogI2VuZGlmCiAKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjsKKwogZXh0ZXJuIEJPT0wgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nOwogZXh0ZXJuIGludCBw
bHVnaW5EYXRhYmFzZUNsaWVudENvdW50OwogCkBAIC0yMDAsNSArMjAzLDkgQEAgcHJpdmF0ZToK
ICAgICBpbnQgdmFsaWRhdGlvbk1lc3NhZ2VUaW1lck1hZ25pZmljYXRpb247CiAKICAgICBmbG9h
dCBjdXN0b21EZXZpY2VTY2FsZUZhY3RvcjsKKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQorICAgIE93blB0cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI+IG1fZGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOworI2VuZGlmCiB9CiBAZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCAwYjgxMTdhMDk3MDZkNWI2ZWM0ZTY0NTdj
MzM5OGU0NzYyNmM1OGJhLi4yMzQ2ODJlNWYwM2Y1MTQwYzI0ZGY4NDU5MmJhMDFhODVlNmYwMWM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2ltcG9ydCAiV2ViVmlld0RhdGEuaCIKIAorI2ltcG9ydCAiRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0
ICJXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCIKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9i
akNFeHRyYXMuaD4KQEAgLTEwMCw2ICsxMDEsMTAgQEAgTGF5ZXJGbHVzaENvbnRyb2xsZXI6Okxh
eWVyRmx1c2hDb250cm9sbGVyKFdlYlZpZXcqIHdlYlZpZXcpCiAKICAgICBwbHVnaW5EYXRhYmFz
ZUNsaWVudENvdW50Kys7CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBt
X2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIpOworI2VuZGlmCisKICAgICByZXR1cm4gc2VsZjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaCBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKaW5kZXggMDJjYzU1
MDEwNmIwNDRmYmMxNzdjOWY1OWExZjgzZjU5MGRlNTBiMC4uZDk4ZTkxMTUwNTNlYmE5Y2YxZDNj
MjQyOWJiZWUwMWQ1MTEwYTkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdJbnRlcm5hbC5oCkBAIC0zNCwxMyArMzQsMTcgQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJu
YWwuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCisjaW1wb3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUtleWJvYXJkVUlNb2RlLmg+CiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RWxlbWVudDsKKyAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBI
aXN0b3J5SXRlbTsKICAgICBjbGFzcyBLVVJMOwpAQCAtOTUsNiArOTksMTQgQEAgV2ViQ29yZTo6
RmluZE9wdGlvbnMgY29yZU9wdGlvbnMoV2ViRmluZE9wdGlvbnMgb3B0aW9ucyk7CiAtICh2b2lk
KV9zY2hlZHVsZUdsaWJDb250ZXh0SXRlcmF0aW9uczsKICNlbmRpZgogCisjaWYgVVNFKERJQ1RB
VElPTl9BTFRFUk5BVElWRVMpCistIChCT09MKV9pbnNlcnREaWN0YXRlZFRleHQ6KGNvbnN0IFN0
cmluZyYpdGV4dCBhbHRlcm5hdGl2ZXM6KGNvbnN0IFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2U+JilhbHRlcm5hdGl2ZXMgdHJpZ2dlcmluZ0V2ZW50OihXZWJDb3JlOjpFdmVudCopdHJp
Z2dlcmluZ0V2ZW50OworLSAodm9pZClfc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUk6KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCBmb3JEaWN0YXRp
b25Db250ZXh0Oih1aW50NjRfdClkaWN0YXRpb25Db250ZXh0OworLSAodm9pZClfZGlzbWlzc0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUk7CistICh2b2lkKV9yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXM6KHVpbnQ2NF90KWRpY3RhdGlvbkNvbnRleHQ7CistICh2b2lkKV9oYW5kbGVBY2NlcHRlZERp
Y3RhdGlvbkFsdGVybmF0aXZlOihOU1N0cmluZyopYWx0ZXJuYXRpdmU7CisjZW5kaWYKKwogQGVu
ZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAKaW5kZXggNTA1NDY2YzZiMDNlNTdhYTdiODliMDQwMWY3NmJhMTY3OTI3Mzg2OC4u
Njg3ZWNiZWMyMzI0ODhkMDk1MTljOWUxYzZjMzJkYjZjOGVhM2Y4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1
cnNvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VEZXRhaWxzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EcmFnU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgpAQCAtNjM5LDYgKzY0MCwyNCBAQCBib29sIEFyZ3VtZW50
Q29kZXI8S1VSTD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEtVUkwmIHJlc3Vs
dCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uJiBhbHRlcm5hdGl2ZXNMb2NhdGlvbikKK3sK
KyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQoYWx0ZXJuYXRpdmVzTG9jYXRpb24ucmFuZ2VTdGFy
dCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KGFsdGVybmF0aXZlc0xvY2F0aW9uLnJhbmdl
TGVuZ3RoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQoYWx0ZXJuYXRpdmVzTG9jYXRpb24u
ZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYWx0ZXJuYXRpdmVzTG9jYXRpb24pCit7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoYWx0ZXJuYXRpdmVzTG9jYXRpb24ucmFuZ2VTdGFydCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChh
bHRlcm5hdGl2ZXNMb2NhdGlvbi5yYW5nZUxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChhbHRlcm5hdGl2ZXNMb2NhdGlvbi5kaWN0
YXRpb25Db250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCiAjaWYgUExBVEZPUk0oUVQpCiAKIHZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50M0QmIGZs
b2F0UG9pbnQzRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaAppbmRleCA2Zjk3MDBjYzUwM2NhOTdlZThiN2FiZjI0ZWRlYWU3MzM4MGJkMzZkLi4yMTNm
MTJkZjE4ZGM0MGRjM2QyN2RhMmNlMDg1ODQ5NGJmNzQ1NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKICAgICBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7CisgICAgc3Ry
dWN0IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb247CiAgICAgc3RydWN0IERyYWdTZXNzaW9u
OwogICAgIHN0cnVjdCBGaWxlQ2hvb3NlclNldHRpbmdzOwogICAgIHN0cnVjdCBHcmFtbWFyRGV0
YWlsOwpAQCAtMjI4LDYgKzIyOSwxMSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OktVUkw+IHsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViQ29yZTo6S1VSTCYpOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiB7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYpOworfTsKKwogI2lmIFBM
QVRGT1JNKFFUKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9h
dFBvaW50M0Q+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCA4YWY3OGM3YmI1Y2E2NDNkOWUzZTI0
Y2MzODcyYTNkMDQzOGUxNzY1Li5hODgyNWIxNjEzMThhYjEyYjQ5NzMwOGNmNzlkOWIwZDE2NzM5
N2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbC5o
IgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIEBjbGFz
cyBXS0VkaXRvclVuZG9UYXJnZXRPYmpDOwpAQCAtMzUsNiArMzYsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAorY2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOwogY2xhc3Mg
RmluZEluZGljYXRvcldpbmRvdzsKIAogY2xhc3MgUGFnZUNsaWVudEltcGwgOiBwdWJsaWMgUGFn
ZUNsaWVudCB7CkBAIC0xMjgsMTIgKzEzMCwyMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGludDMyX3QgbmV3U3R5bGUpOwog
CiAgICAgdmlydHVhbCBXS1ZpZXcqIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2tWaWV3OyB9
CisgICAgCisgICAgdmlydHVhbCB1aW50NjRfdCBhZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoY29u
c3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
OwogCiAgICAgV0tWaWV3KiBtX3drVmlldzsKICAgICBSZXRhaW5QdHI8V0tFZGl0b3JVbmRvVGFy
Z2V0T2JqQz4gbV91bmRvVGFyZ2V0OwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKICAgICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9uUGFuZWw7CiAjZW5kaWYKKyNp
ZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBPd25QdHI8RGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCmluZGV4IDE1NGI0NTViNmEzN2NmNDkx
YWZjM2ZlNzBiYTgxNDcxNDEzNzVlY2MuLjQwYTVkNjU0MmVmODA0Mjc4OTYxZjdlNTU2ZjdhZGZj
ODE2NmVjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLm1tCkBAIC0yNiw3ICsyNiwxMSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+CisjZW5kaWYKICNpbXBv
cnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlci5oIgogI2ltcG9ydCAiRGljdGlvbmFyeVBvcHVwSW5mby5oIgogI2ltcG9ydCAiRmluZElu
ZGljYXRvci5oIgogI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgpAQCAtMTIyLDYg
KzEyNiw5IEBAIFBhc3NPd25QdHI8UGFnZUNsaWVudEltcGw+IFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGUoV0tWaWV3KiB3a1ZpZXcpCiBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV0tWaWV3
KiB3a1ZpZXcpCiAgICAgOiBtX3drVmlldyh3a1ZpZXcpCiAgICAgLCBtX3VuZG9UYXJnZXQoQWRv
cHROUywgW1tXS0VkaXRvclVuZG9UYXJnZXRPYmpDIGFsbG9jXSBpbml0XSkKKyNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICAsIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyKGFkb3B0UHRyKG5ldyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpKQorI2VuZGlm
CiB7CiB9CiAKQEAgLTIxMyw2ICsyMjAsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNz
RGlkQ3Jhc2goKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCgpCiB7CiAgICAgW21f
d2tWaWV3IF9wYWdlQ2xvc2VkXTsKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAg
ICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+Y2xlYXIoKTsKKyNlbmRpZgogfQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQpAQCAtNTI4LDUgKzUz
OCwzNyBAQCBib29sIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rv
cihjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQogewogICAgIHJldHVybiBbbV93a1ZpZXcg
X2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKHNlbGVj
dG9yU3RyaW5nKV07CiB9CisgICAgCit1aW50NjRfdCBQYWdlQ2xpZW50SW1wbDo6YWRkRGljdGF0
aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRl
cm5hdGl2ZXMpCit7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgcmV0dXJu
IG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5hZGRBbHRlcm5hdGl2ZXMoYWx0ZXJu
YXRpdmVzKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
KQoreworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIGlmICghaXNWaWV3Vmlz
aWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPnNob3dBbHRlcm5hdGl2ZXMobV93a1ZpZXcsIGJv
dW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3RhdGlvbkNvbnRleHQpOworI2VuZGlmCit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkKK3sK
KyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci0+ZGlzbWlzc0FsdGVybmF0aXZlcygpOworI2VuZGlmCit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KQoreworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIG1f
ZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5yZW1vdmVBbHRlcm5hdGl2ZXMoZGljdGF0
aW9uQ29udGV4dCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggN2Y5NTc5YTYyYTc3OTA4
M2YyYWZhMzZiM2EyNjNkMWJkODEzMzk1Yy4uMTA4YTIyZDY4MzYzMTVmZjk2ZDViZjc5YTViNzk0
YjMyMTljYzYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQpAQCAtMjYsNiArMjYsMTIgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV0tWaWV3
LmgiCiAKKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgorI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5o
PgorI2ltcG9ydCA8QXBwS2l0L05TQXR0cmlidXRlZFN0cmluZy5oPgorI2VuZGlmCisKICNpbXBv
cnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBv
cnQgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCkBAIC0xMTUxLDYgKzExNTcsMjIgQEAgc3RhdGlj
IGNvbnN0IHNob3J0IGtJT0hJREV2ZW50VHlwZVNjcm9sbCA9IDY7CiAgICAgW3NlbGYgaW5zZXJ0
VGV4dDpzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTpOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKV07
CiB9CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK3N0YXRpYyB2b2lkIGNvbGxl
Y3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBW
ZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgYWx0ZXJuYXRpdmVzKSB7CisgICAgTlNS
YW5nZSBlZmZlY3RpdmVSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOworICAgIE5TVUludGVnZXIg
bGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgIGRvIHsKKyAgICAgICAgTlNEaWN0aW9uYXJ5
ICphdHRyaWJ1dGVzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRleDplZmZlY3RpdmVSYW5nZS5s
b2NhdGlvbiBlZmZlY3RpdmVSYW5nZTomZWZmZWN0aXZlUmFuZ2VdOworICAgICAgICBpZiAoIWF0
dHJpYnV0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgTlNUZXh0QWx0ZXJuYXRpdmVz
ICp0ZXh0QWx0ZXJuYXRpdmVzID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVGV4dEFsdGVy
bmF0aXZlc0F0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAodGV4dEFsdGVybmF0aXZlcykKKyAg
ICAgICAgICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKHRl
eHRBbHRlcm5hdGl2ZXMsIGVmZmVjdGl2ZVJhbmdlKSk7CisgICAgICAgIGVmZmVjdGl2ZVJhbmdl
LmxvY2F0aW9uID0gTlNNYXhSYW5nZShlZmZlY3RpdmVSYW5nZSk7CisgICAgfSB3aGlsZSAoZWZm
ZWN0aXZlUmFuZ2UubG9jYXRpb24gPCBsZW5ndGgpOworfQorI2VuZGlmCisKIC0gKHZvaWQpaW5z
ZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRS
YW5nZQogewogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRPZkNs
YXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKQEAgLTExNjcsNyArMTE4OSwxMiBAQCBz
dGF0aWMgY29uc3Qgc2hvcnQga0lPSElERXZlbnRUeXBlU2Nyb2xsID0gNjsKICAgICBOU1N0cmlu
ZyAqdGV4dDsKICAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0gX2RhdGEtPl9wYWdlLT5lZGl0
b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uOwogCisgICAgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdp
dGhSYW5nZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzOworCiAgICAgaWYgKGlzQXR0cmlidXRlZFN0
cmluZykgeworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICAgICBjb2xsZWN0
RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyhzdHJpbmcsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7
CisjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBtb3N0IGF0dHJpYnV0ZXMgZnJv
bSB0aGUgc3RyaW5nLCBzbyBmb3IgZXhhbXBsZSBpbnNlcnRpbmcgZnJvbSBDaGFyYWN0ZXIgUGFs
ZXR0ZSBsb3NlcyBmb250IGFuZCBnbHlwaCB2YXJpYXRpb24gZGF0YS4KICAgICAgICAgdGV4dCA9
IFtzdHJpbmcgc3RyaW5nXTsKICAgICB9IGVsc2UKQEAgLTExODcsNyArMTIxNCwxMSBAQCBzdGF0
aWMgY29uc3Qgc2hvcnQga0lPSElERXZlbnRUeXBlU2Nyb2xsID0gNjsKIAogICAgIFN0cmluZyBl
dmVudFRleHQgPSB0ZXh0OwogICAgIGV2ZW50VGV4dC5yZXBsYWNlKE5TQmFja1RhYkNoYXJhY3Rl
ciwgTlNUYWJDaGFyYWN0ZXIpOyAvLyBzYW1lIHRoaW5nIGlzIGRvbmUgaW4gS2V5RXZlbnRNYWMu
bW0gaW4gV2ViQ29yZQotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gX2RhdGEtPl9wYWdlLT5pbnNl
cnRUZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShy
ZXBsYWNlbWVudFJhbmdlKSk7CisgICAgYm9vbCBldmVudEhhbmRsZWQ7CisgICAgaWYgKGRpY3Rh
dGlvbkFsdGVybmF0aXZlcy5zaXplKCkpCisgICAgICAgIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5f
cGFnZS0+aW5zZXJ0RGljdGF0ZWRUZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2Nh
dGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSwgZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KTsKKyAgICBlbHNlCisgICAgICAgIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+aW5zZXJ0
VGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVw
bGFjZW1lbnRSYW5nZSkpOwogCiAgICAgaWYgKHBhcmFtZXRlcnMpCiAgICAgICAgIHBhcmFtZXRl
cnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBldmVudEhhbmRsZWQ7CkBA
IC0yODU1LDYgKzI4ODYsMTMgQEAgc3RhdGljIE5TU3RyaW5nICpwYXRoV2l0aFVuaXF1ZUZpbGVu
YW1lRm9yUGF0aChOU1N0cmluZyAqcGF0aCkKICAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOwogfQogCistICh2b2lkKWhhbmRsZUFjY2VwdGVkRGlj
dGF0aW9uQWx0ZXJuYXRpdmU6KE5TU3RyaW5nICopYWx0ZXJuYXRpdmUKK3sKKyNpZiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04p
CisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGFs
dGVybmF0aXZlKTsKKyNlbmRpZgorfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXcg
KFByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
SW50ZXJuYWwuaAppbmRleCBhZDQ2ZDBhYWFiZGQ1NGQyYjg1ZTEyMWQ5Yzk4ODIxZDMyMTk3NDE1
Li45ZTM3YzEwZmJiY2Y2OTM3M2I4MjA4NmU1ZjhlOWUzNTAwNmY0NDRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKQEAgLTk2LDUg
Kzk2LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJE
b2N1bWVudFRhZzsKIC0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0OihOU1N0cmlu
ZyopcmVzdWx0OworLSAodm9pZCloYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlOihO
U1N0cmluZyopYWx0ZXJuYXRpdmU7CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCmluZGV4IDQ5OTkwMWFkMzZhMDk4Njc1YjY3NDcyNzUyMjEyMjI5MmQwYjA5OTIuLjNj
YzFhYmM0MTg2NWY3YTQyZjY0MzhjMmQyZWE5YjY2NTQ2M2M4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogCiBPQkpDX0NMQVNTIFdLVmlldzsKK09CSkNfQ0xBU1Mg
TlNUZXh0QWx0ZXJuYXRpdmVzOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE5
Miw2ICsxOTMsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWNvbW1lbmRlZFNjcm9s
bGJhclN0eWxlRGlkQ2hhbmdlKGludDMyX3QgbmV3U3R5bGUpID0gMDsKICAgICAKICAgICB2aXJ0
dWFsIFdLVmlldyogd2tWaWV3KCkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgdWludDY0
X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5h
dGl2ZXM+JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVV
SShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3Rh
dGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9IDA7CiAjZW5kaWYK
IAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKCkgY29u
c3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAz
ZTYzMmFiNGY1N2Q1Y2VmM2MzMGEwOGQxMGQzZGUzNWFkNWY2YzM3Li5iN2MyMWY4ZDRjOGQ4Y2Uy
MzJlMzc1MGQxNjEzMDFiZjhhNTU2ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtMzcxNSw2ICszNzE1LDMyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiAgICAgICAg
IHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlQ29ycmVjdGlvblBhbmVs
UmVzdWx0KHJlc3VsdCksIG1fcGFnZUlELCAwKTsKICNlbmRpZgogfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFs
dGVybmF0aXZlKQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKKyAgICBpZiAoIWlzQ2xvc2VkKCkpCisgICAgICAg
IHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlQWNjZXB0ZWREaWN0YXRp
b25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSksIG1fcGFnZUlELCAwKTsKKyNlbmRpZgorfQorCisj
aWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1fcGFn
ZUNsaWVudC0+c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdCb3hPZkRpY3RhdGVk
VGV4dCwgZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNz
RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpCit7CisgICAgbV9wYWdlQ2xpZW50LT5kaXNtaXNzRGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSSgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlRGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgCit9
CisjZW5kaWYKKwogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYjQwOWYwNGZk
MjRmNmQwZTBhYmUwMzY4YmI3NjEzZGM4NjczNTE1NC4uMzdlYzI3YzM0YjcwY2M1ZDFkMGUzZjk1
YTgxMWMxYmUyYTcxNjIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVUlDbGllbnQuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnU2Vzc2lv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgpAQCAtMTA2LDYgKzEwNyw3
IEBAIGNsYXNzIFFRdWlja05ldHdvcmtSZXBseTsKICNlbHNlCiBjbGFzcyBXS1ZpZXc7CiAjZW5k
aWYKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U7CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKEdUSykKQEAgLTM0NSw2ICszNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25maXJtQ29t
cG9zaXRpb24oKTsKICAgICB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAgICAgYm9vbCBpbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKKyAgICBib29sIGluc2VydERpY3RhdGVk
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2
ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgdm9pZCBnZXRNYXJrZWRS
YW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0
U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwogICAg
IHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwg
dWludDY0X3QgbGVuZ3RoLCBBdHRyaWJ1dGVkU3RyaW5nJik7CkBAIC02MTIsNiArNjE1LDcgQEAg
cHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVk
RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSk7CiAjZW5kaWYK
IAogICAgIHN0YXRpYyB2b2lkIHNldERlYnVnUGFpbnRGbGFncyhXS1BhZ2VEZWJ1Z1BhaW50Rmxh
Z3MgZmxhZ3MpIHsgc19kZWJ1Z1BhaW50RmxhZ3MgPSBmbGFnczsgfQpAQCAtODcxLDYgKzg3NSwx
MSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oaW50MzJf
dCByZWFzb24sIFN0cmluZyYgcmVzdWx0KTsKICAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwogI2VuZGlmIC8vICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZF
UykKKyAgICB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29u
dGV4dCk7CisgICAgdm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpOworICAgIHZv
aWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
OworI2VuZGlmCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgdm9pZCBjbGVhckxvYWRE
ZXBlbmRlbnRDYWxsYmFja3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDRjMzVjNGRhZmE0ZTNkOTVjMDlkMzYxYWZlYTE2
OWQ0MTUyYTZkM2UuLmQzMGMxOWZmMTZkYjA1ZTkzNDdkMmNlZDUxMThkNTI0OWNkZmM2NTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bgpAQCAtMjc2LDYgKzI3NiwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIFN0cmluZyBy
ZXBsYWNlZFN0cmluZywgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nKTsKICNlbmRpZgogCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgU2hvd0RpY3RhdGlvbkFsdGVybmF0aXZl
VUkoV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpCisgICAgRGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKQor
ICAgIFJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
KTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICMgV2luZG93cyA3IEdlc3R1cmUg
TWVzc2FnZXMKICAgICBTZXRHZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0KGJvb2wgbGltaXRS
ZWFjaGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RlMTRhYzkxYzBl
Y2QyMDNjMDU4ZGQ1NDFiMDA3MDc2YWI3ZTc2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgKQEAg
LTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyX2gKKyNkZWZpbmUgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
K09CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOworT0JKQ19DTEFTUyBXS1ZpZXc7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjsKKwor
Y2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoKSB7IH0KKyAgICAvLyBSZXR1cm5zIGEgZGljdGF0
aW9uIGNvbnRleHQgSUQuCisgICAgdWludDY0X3QgYWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFp
blB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQg
c2hvd0FsdGVybmF0aXZlcyhXS1ZpZXcqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZEaWN0YXRlZFN0cmluZywgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAg
dm9pZCBkaXNtaXNzQWx0ZXJuYXRpdmVzKCk7CisgICAgdm9pZCByZW1vdmVBbHRlcm5hdGl2ZXMo
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVB
Y2NlcHRlZEFsdGVybmF0aXZlKE5TU3RyaW5nKiBhY2NlcHRlZEFsdGVybmF0aXZlLCB1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0LCBOU1RleHRBbHRlcm5hdGl2ZXMqKTsKKyAgICAKKyAgICBjbGFz
cyBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlciB7CisgICAgcHVibGljOgorICAgICAgICBEaWN0
YXRpb25Db250ZXh0Q29udHJvbGxlcigpIHsgfQorICAgICAgICB1aW50NjRfdCBhZGRBbHRlcm5h
dGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKTsKKyAgICAgICAgdm9p
ZCBjbGVhcigpOworICAgICAgICBOU1RleHRBbHRlcm5hdGl2ZXMqIGFsdGVybmF0aXZlc0ZvckRp
Y3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgICAgIHZvaWQg
cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRDb250ZXh0ID0g
MDsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFJldGFp
blB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+ID4gSGFzaE1hcFR5cGU7CisgICAgICAgIEhhc2hNYXBU
eXBlIG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwOworICAgIH07CisKKyAgICBEaWN0YXRpb25Db250
ZXh0Q29udHJvbGxlciBtX2NvbnRleHRDb250cm9sbGVyOworICAgIFJldGFpblB0cjxXS1ZpZXc+
IG1fdmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKKyNlbmRpZiAv
LyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNTE5NTM1ODdkNWZkMWVjMDE2MGRmMjEzODA0ZTJmMmFmYjM2ZWQy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0KQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlci5oIgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBL
aXQvTlNTcGVsbENoZWNrZXIuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMu
aD4KKyNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordWludDY0X3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKGNv
bnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2ZXMpCit7CisgICAg
dWludDY0X3QgY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KGFsdGVybmF0aXZl
cy5nZXQoKSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gaW52YWxpZENvbnRl
eHQ7CisgICAgc3RkOjpwYWlyPEhhc2hNYXBUeXBlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
bV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuYWRkKGNvbnRleHQsIGFsdGVybmF0aXZlcyk7CisgICAg
aWYgKHJlc3VsdC5maXJzdCA9PSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGludmFsaWRDb250ZXh0OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHQ7Cit9CisKK05TVGV4dEFsdGVybmF0aXZlcyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9u
Q29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIEhhc2hNYXBUeXBlOjpj
b25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5maW5kKGRpY3RhdGlv
bkNvbnRleHQpOworICAgIGlmIChpdHIgPT0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBpdHItPnNlY29uZC5nZXQoKTsKK30K
Kwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRD
b250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAucmVtb3Zl
KGRpY3RhdGlvbkNvbnRleHQpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAgICBtX2FsdGVy
bmF0aXZlc09iamVjdE1hcC5jbGVhcigpOworfQorCit1aW50NjRfdCBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI6OmFkZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0
ZXJuYXRpdmVzPiYgYWx0ZXJuYXRpdmVzKQoreworICAgIHJldHVybiBtX2NvbnRleHRDb250cm9s
bGVyLmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpOworfQorCit2b2lkIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcjo6Y2xlYXIoKQoreworICAgIHJldHVybiBtX2NvbnRleHRDb250
cm9sbGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
OjpzaG93QWx0ZXJuYXRpdmVzKFdLVmlldyogdmlldywgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
Cit7CisgICAgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAgIGlmICghdmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV92aWV3ID0gdmlldzsKKyAgICBOU1RleHRBbHRlcm5hdGl2ZXMqIGFs
dGVybmF0aXZlcyA9IG1fY29udGV4dENvbnRyb2xsZXIuYWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9u
Q29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKKyAgICBpZiAoIWFsdGVybmF0aXZlcykKKyAgICAg
ICAgcmV0dXJuOworICAgIE5TU3BlbGxDaGVja2VyKiBzcGVsbENoZWNrZXIgPSBbTlNTcGVsbENo
ZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAgICBbc3BlbGxDaGVja2VyIHNob3dDb3JyZWN0
aW9uSW5kaWNhdG9yT2ZUeXBlOk5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVHdWVzc2VzIHByaW1h
cnlTdHJpbmc6YWx0ZXJuYXRpdmVzLnByaW1hcnlTdHJpbmcgYWx0ZXJuYXRpdmVTdHJpbmdzOmFs
dGVybmF0aXZlcy5hbHRlcm5hdGl2ZVN0cmluZ3MgZm9yU3RyaW5nSW5SZWN0OmJvdW5kaW5nQm94
T2ZEaWN0YXRlZFN0cmluZyB2aWV3Om1fdmlldy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKE5T
U3RyaW5nKiBhY2NlcHRlZFN0cmluZykgeworICAgICAgICBpZiAoYWNjZXB0ZWRTdHJpbmcpCisg
ICAgICAgICAgICBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKGFjY2VwdGVkU3RyaW5nLCBkaWN0
YXRpb25Db250ZXh0LCBhbHRlcm5hdGl2ZXMpOworICAgIH1dOworfQorCit2b2lkIERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmlu
ZyogYWNjZXB0ZWRBbHRlcm5hdGl2ZSwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0
QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXMpCit7CisgICAgW2FsdGVybmF0aXZlcyBub3RlU2Vs
ZWN0ZWRBbHRlcm5hdGl2ZVN0cmluZzphY2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICBtX2NvbnRl
eHRDb250cm9sbGVyLnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQoZGljdGF0
aW9uQ29udGV4dCk7CisgICAgW21fdmlldy5nZXQoKSBoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFs
dGVybmF0aXZlOmFjY2VwdGVkQWx0ZXJuYXRpdmVdOworICAgIG1fdmlldy5jbGVhcigpOworfQor
Cit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZl
cygpCit7CisgICAgaWYgKCFtX3ZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBbW05TU3BlbGxD
aGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gZGlzbWlzc0NvcnJlY3Rpb25JbmRpY2F0b3JGb3JW
aWV3Om1fdmlldy5nZXQoKV07Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAg
ICBtX2NvbnRleHRDb250cm9sbGVyLnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRl
eHQoZGljdGF0aW9uQ29udGV4dCk7Cit9Cit9CisjZW5kaWYgLy8gVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODAwMjMzMTE3OGJhZDM5MTQzODVm
OTU0ODU5OTEyZGRiZDY5NmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaApAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaAorI2RlZmluZSBU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZl
czsKKworc3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSB7CisgICAgVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlKE5TVGV4dEFsdGVybmF0aXZlcyogYW5BbHRlcm5hdGl2ZXMsIE5TUmFuZ2Ug
YVJhbmdlKTsKKyAgICBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoY29uc3QgVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlJiBhbm90aGVyKTsKKyAgICBOU1JhbmdlIHJhbmdlOworICAgIFJldGFpblB0
cjxOU1RleHRBbHRlcm5hdGl2ZXM+IGFsdGVybmF0aXZlczsKK307CisKKyNlbHNlCitzdHJ1Y3Qg
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlIHsgfTsKKyNlbmRpZgorCisjZW5kaWYgLy8gVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA2MTU0MmRh
OWRlYjBlMTljNWViMWE4NzdkNDQ0MjhmOTg3YmVjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVT
KQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorCitUZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShOU1RleHRBbHRlcm5hdGl2ZXMq
IGFuQWx0ZXJuYXRpdmVzLCBOU1JhbmdlIGFSYW5nZSkKKzogcmFuZ2UoYVJhbmdlKQorLCBhbHRl
cm5hdGl2ZXMoYW5BbHRlcm5hdGl2ZXMpCit7Cit9CisKK1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZSYgYW5vdGhlcikKKzogcmFuZ2UoYW5vdGhlci5yYW5nZSkKKywgYWx0ZXJuYXRpdmVzKGFub3Ro
ZXIuYWx0ZXJuYXRpdmVzKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IDM1ODQ3MTgyZTE0MGI3ZDg0ZDA5ODM0
NmI2OGI3M2ViMWEwODY0ZjAuLmNhZGM5NDQ3NzNlZGNjNTJkMzU4ZGIzODE5YmU4ZmJlM2YxZmY4
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFj
Lm1tCkBAIC0zNSw5ICszNSwxMSBAQAogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgogI2ltcG9ydCAi
UGFnZUNsaWVudEltcGwuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgorI2ltcG9ydCAi
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgogI2lt
cG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNp
bXBvcnQgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KQEAgLTE5OCw2ICsyMDAs
MzUgQEAgYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQKICAgICByZXR1cm4gaGFuZGxlZDsKIH0KIAor
Ym9vbCBXZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZUVuZCwgY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFs
dGVybmF0aXZlcykKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBpZiAo
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGluc2VydFRl
eHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKTsKKyAg
ICAKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBWZWN0
b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4gZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbnM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRpY3RhdGlvbkFsdGVybmF0aXZl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Um
IGFsdGVybmF0aXZlV2l0aFJhbmdlID0gZGljdGF0aW9uQWx0ZXJuYXRpdmVzW2ldOworICAgICAg
ICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gbV9wYWdlQ2xpZW50LT5hZGREaWN0YXRpb25B
bHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVXaXRoUmFuZ2UuYWx0ZXJuYXRpdmVzKTsKKyAgICAgICAg
aWYgKGRpY3RhdGlvbkNvbnRleHQpCisgICAgICAgICAgICBkaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9ucy5hcHBlbmQoRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbihhbHRlcm5hdGl2ZVdp
dGhSYW5nZS5yYW5nZS5sb2NhdGlvbiwgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UucmFuZ2UubGVuZ3Ro
LCBkaWN0YXRpb25Db250ZXh0KSk7CisgICAgfQorCisgICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGluc2VydFRleHQodGV4dCwg
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKTsKKyAgICAKKyAgICBi
b29sIGhhbmRsZWQgPSB0cnVlOworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2U6Okluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJl
cGxhY2VtZW50UmFuZ2VFbmQsIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zKSwgTWVzc2Fn
ZXM6OldlYlBhZ2U6Okluc2VydERpY3RhdGVkVGV4dDo6UmVwbHkoaGFuZGxlZCwgbV9lZGl0b3JT
dGF0ZSksIG1fcGFnZUlEKTsKKyAgICByZXR1cm4gaGFuZGxlZDsKKyNlbHNlCisgICAgcmV0dXJu
IGluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdl
RW5kKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFya2VkUmFuZ2UodWlu
dDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQogewogICAgIGxvY2F0aW9uID0gTlNO
b3RGb3VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAxNzljOTYxZjQ3ZGE3OTNkZjQxOGUwNzVlMzg3YjMzYmFhM2I1NmJlLi5j
MmUwMDY0YmYxOGEyODIyODI2YzcwODAzZTVjZjdjMTBiYTZlMWM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04ODMsNiArODgz
LDkgQEAKIAkJQ0RDQTg1QzkxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQ0E4NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
LmggKi87IH07CiAJCUNEQ0E4NUQ1MTMyQUMyQjMwMEU5NjFERiAvKiBJT0tpdC5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVE
NDEzMkFDMkIzMDBFOTYxREYgLyogSU9LaXQuZnJhbWV3b3JrICovOyB9OwogCQlDRENBODVFRTEz
MkFENzAxMDBFOTYxREYgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0E4NURFMTMyQUQwNTMw
MEU5NjFERiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWFjLm1tICovOyB9OworCQlDRTYy
NUI2RTE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U2MjVCNkMx
NTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSAqLzsg
fTsKKwkJQ0U2MjVCNkYxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0U2MjVCNkQxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5oICovOyB9OworCQlDRUQyQjc4MjE1MUE1RTQ2MDAzQUJDRUYgLyogVGV4dEFsdGVybmF0aXZl
V2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0VBNjlEM0IxNTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5t
bSAqLzsgfTsKIAkJRDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MjEx
RkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLzsgfTsKIAkJRDNCOTQ4NDcxMUZG
NEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVw
TWVudS5oICovOyB9OwogCQlEM0I5NDg0ODExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9w
dXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovOyB9
OwpAQCAtMTkzNyw2ICsxOTQwLDEwIEBACiAJCUNEQ0E4NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RDQTg1RDQxMzJBQzJCMzAwRTk2MURGIC8qIElPS2l0LmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIu
ZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9
OwogCQlDRENBODVERTEzMkFEMDUzMDBFOTYxREYgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNF
NjI1QjZDMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFNjI1
QjZEMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQTY5RDNCMTUxQTQxQzQw
MEY3NDNERSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQTY5RDNDMTUxQTQxQzQwMEY3NDNERSAvKiBUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1
cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUG9wdXBN
ZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDMxMUZGNEI2NTAw
MDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJQb3B1cE1lbnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDQx
MUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzQzMiw2ICszNDM5LDEwIEBACiAJCQkJMUE2NDI5MkMxMkRF
NUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSAqLywKIAkJCQlCODc4QjYxMzEzMzQy
OERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggKi8sCiAJCQkJQjg3OEI2MTQxMzM0MjhE
QzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLywKKwkJCQlDRTYyNUI2RDE1MUI2RjQ4
MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggKi8sCisJCQkJQ0U2
MjVCNkMxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5t
bSAqLywKKwkJCQlDRUE2OUQzQzE1MUE0MUM0MDBGNzQzREUgLyogVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlLmggKi8sCisJCQkJQ0VBNjlEM0IxNTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZS5tbSAqLywKIAkJCQkxQUE0MTdFRDEyQzAwRDg3MDAyQkU2N0IgLyogVGV4
dENoZWNrZXJNYWMubW0gKi8sCiAJCQkJMUFGMDVEODUxNDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCAqLywKIAkJCQkxQUYwNUQ4NDE0Njg4MzQ4
MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbSAqLywKQEAg
LTQxNzgsNiArNDE4OSw3IEBACiAJCQkJMzc2MDg4MjMxNTA0MTRGNzAwRkM4MkM3IC8qIFdLUmVu
ZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQwNDE1MEMzNTA2MDBFNTJDRTkg
LyogV2ViUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OTQ4NDA5MTUwQzRCOTcw
MEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRTYyNUI2RjE1
MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTQ2NTEsNiArNDY2Myw3IEBACiAJCQkJQzAxQTI2MDExMjY2MkYyMTAwQzlF
RDU1IC8qIFNoYXJlYWJsZUJpdG1hcENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMjRCRjNB
MTIwODk2QTYwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnlNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUNFRDJCNzgyMTUxQTVFNDYwMDNBQkNFRiAvKiBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE0MTdFRjEyQzAwRDg3MDAyQkU2N0Ig
LyogVGV4dENoZWNrZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0Y1MDEyMjEyM0VEM0Iz
MDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGNTAx
QjQxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyTWFjLm1tIGluIFNvdXJjZXMgKi8s
CkBAIC00OTIxLDYgKzQ5MzQsNyBAQAogCQkJCTM3NjA4ODIyMTUwNDE0RjcwMEZDODJDNyAvKiBX
S1JlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzk0ODQwMzE1MEMzNTA2MDBF
NTJDRTkgLyogV2ViUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5NDg0MDgx
NTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0U2MjVCNkUxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNzhlYThkYmZlZTE0
ZmM3N2YwNjY2NTIwOGU2ZjU5ZTFiMDU5MDEzMi4uYmI0ODVhYzJkYTE1OGYzZGM4NTIxYmE3Nzkz
ZGRjNDcwOGZhMDEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xNDgsNiArMTQ4LDExIEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
V2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rp
b25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCisjaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCisgICAgdmlydHVhbCB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2
ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwg
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRp
c21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBP
VkVSUklERTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU2hvd1VuaWNvZGVNZW51KCkgT1ZFUlJJREU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVk
aXRvckNsaWVudE1hYy5tbQppbmRleCA1MjNjYmRmNzIwNjNiNGQxZDc5NGM4MWFjNTBlZjE2MDRi
MWUyMmJmLi5lNjVlYmUwZWMzMmQyOTI4MTM5NzhiZmYwYzdhNTg5MzhiNTJmOTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0
b3JDbGllbnRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCkBAIC0yNjIsNCArMjYyLDIxIEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVu
dDo6QXV0b2NvcnJlY3Rpb25SCiB9CiAjZW5kaWYKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJO
QVRJVkVTKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGlj
dGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwg
ZGljdGF0aW9uQ29udGV4dCkpOworfQorICAgIAordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21p
c3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKSk7Cit9CisKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpKTsKK30K
KyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5ZjhmYjhlMjQ2YjExYjQyMGRlZWYwYzhk
MTljZDE2ZWMwMGE5MDA5Li4wYTEwNGZmODFhOTFjMTI0YTgzZGUyNWNmODUxNWI3OWIzMTNkMmVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBA
IC0yOTk2LDcgKzI5OTYsOCBAQCBib29sIFdlYlBhZ2U6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIHJldHVybiBwbGF0Zm9ybUNh
bkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyNpZiBQTEFURk9STShNQUMpCisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogdm9pZCBXZWJQYWdlOjpoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgRnJhbWUqIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CkBA
IC0zMDA0LDYgKzMwMDUsMTcgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiAgICAgICAgIHJldHVybjsKICAgICBmcmFtZS0+
ZWRpdG9yKCktPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOwogfQorCisjaWYg
IWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKK3ZvaWQgV2ViUGFnZTo6aGFuZGxlQWNjZXB0ZWRE
aWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlKQoreworICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOworfQor
I2VuZGlmCisjZW5kaWYKICNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OnNpbXVsYXRlTW91c2VEb3du
KGludCBidXR0b24sIFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uLCBpbnQgY2xpY2tDb3VudCwg
V0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZTlkZTJlZGMwYzhmMzUyOTE4NWE1
NjE5ZGE1NjI0ZjYxMzk0MWIzZi4uYjQ5ZWFjZjg2MzE3OWVjZTcyNTI1NzA3NWM2Y2UyYTRkM2M1
YjVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBA
IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlVuZG9TdGVwLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EcmFnRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CkBAIC00MDMsNyArNDA0LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KGNvbnN0IFdlYktpdDo6V2ViTW91
c2VFdmVudCYsIGJvb2wmIHJlc3VsdCk7CiAgICAgdm9pZCBhY2NlcHRzRmlyc3RNb3VzZShpbnQg
ZXZlbnROdW1iZXIsIGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYsIGJvb2wmIHJlc3VsdCk7
CiAgICAgYm9vbCBwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3Ry
aW5nJik7Ci0KKyAgICB2b2lkIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZUVuZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+
JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3Rh
dGUmIG5ld1N0YXRlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICB2b2lkIGNvbmZpcm1Db21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nKTsKICAgICB2b2lkIHNldENv
bXBvc2l0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgY29uc3QgV1RG
OjpWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1aW50
NjRfdCBjdXJzb3JQb3NpdGlvbik7CkBAIC00ODUsOSArNDg2LDEzIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgdW5tYXJrQWxsTWlzc3BlbGxpbmdzKCk7CiAgICAgdm9pZCB1bm1hcmtBbGxCYWRHcmFt
bWFyKCk7Ci0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyNpZiBQTEFURk9STShNQUMpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQogICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYpOworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCisgICAgdm9pZCBoYW5kbGVB
Y2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYpOworI2VuZGlmCisjZW5k
aWYKICNlbmRpZgogCiAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9zZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXgg
MTkzNWZlMzMzN2Y3NTQwMGY0MzEzMWQ1MzM3ZjQ0MGJiODZjMmVkOS4uZjY4YmE0YmZlNDQ4MDZi
MjA4YWQ3ZjlhNjdmNjA5NjJkOGIyYzY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTI0MSw2ICsyNDEsNyBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBoYW5k
bGVkLCBXZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQogICAgIFNob3VsZERlbGF5V2luZG93
T3JkZXJpbmdFdmVudChXZWJLaXQ6OldlYk1vdXNlRXZlbnQgZXZlbnQpIC0+IChib29sIHJlc3Vs
dCkKICAgICBBY2NlcHRzRmlyc3RNb3VzZShpbnQgZXZlbnROdW1iZXIsIFdlYktpdDo6V2ViTW91
c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQorICAgIEluc2VydERpY3RhdGVkVGV4dChX
VEY6OlN0cmluZyB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90
IHJlcGxhY2VtZW50UmFuZ2VFbmQsIFdURjo6VmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24+IGRpY3RhdGlvbkFsdGVybmF0aXZlcykgLT4gKGJvb2wgaGFuZGxlZCwg
V2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICAvLyBGSVhNRTogVW5pZnkgd2l0aCBNYWMgY291bnRlcnBhcnRzLgpAQCAtMjU3LDcgKzI1
OCwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBGaW5kWm9vbWFibGVBcmVhRm9yUG9p
bnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFBMQVRGT1JNKE1BQykK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgSGFuZGxlQ29ycmVj
dGlvblBhbmVsUmVzdWx0KFN0cmluZyByZXN1bHQpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
TElPTikKKyAgICBIYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKFN0cmluZyBhbHRl
cm5hdGl2ZSkKKyNlbmRpZgorI2VuZGlmCiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBlY2E1MjNkMWZj
YmVmZjk2N2YwYWIwZDIzNGRjNzBkYWVkMmYzODVkLi42MjEwOWE5NDY4NzgxNzhkY2MxNDRmZDA2
MWRjZDBhOTVlOTBhNjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0yODYsNiArMjg2LDIxIEBAIHZvaWQgV2ViUGFn
ZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgdWluCiAgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCit2b2lkIFdl
YlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9ucywgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRl
KQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpOworICAgIAorICAgIGlmIChyZXBsYWNlbWVudFJhbmdlU3RhcnQgIT0g
TlNOb3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBj
b252ZXJ0VG9SYW5nZShmcmFtZSwgTlNNYWtlUmFuZ2UocmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCBy
ZXBsYWNlbWVudFJhbmdlRW5kIC0gcmVwbGFjZW1lbnRSYW5nZVN0YXJ0KSk7CisgICAgICAgIGlm
IChyZXBsYWNlbWVudFJhbmdlKQorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxfREVG
QVVMVF9BRkZJTklUWSkpOworICAgIH0KKworICAgIEFTU0VSVCghZnJhbWUtPmVkaXRvcigpLT5o
YXNDb21wb3NpdGlvbigpKTsKKyAgICBoYW5kbGVkID0gZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRE
aWN0YXRlZFRleHQodGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMsIG1fa2V5Ym9h
cmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQpOworICAgIG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsK
K30KKwogdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVp
bnQ2NF90JiBsZW5ndGgpCiB7CiAgICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134616</attachid>
            <date>2012-03-29 10:47:19 -0700</date>
            <delta_ts>2012-03-30 18:41:13 -0700</delta_ts>
            <desc>Patch (v4)</desc>
            <filename>bug-82503-20120329104717.patch</filename>
            <type>text/plain</type>
            <size>220660</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ3MjQ1M2Q3N2NkZjVj
NDZiMzJiOGM3ZDA3ZjZjOGU1N2VlZjcwYi4uZWE1NDQ2MTE1ZjZhNGQwNmVhZDBjZGY5MzEyYmMx
ZjQ5YmQ0NTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAxMi0wMy0yOSAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJu
YXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIE9TWCBzcGVjaWZpYyBwYXRjaCB0aGF0
IGFsbG93cyBXZWJLaXQgdG8gdXRpbGl6ZSBBcHBLaXQgVUkgdG8gZGlzcGxheSBhbHRlcm5hdGl2
ZQorICAgICAgICBkaWN0YXRpb24gcmVzdWx0cyBmb3IgYSBnaXZlbiB0ZXh0LiBUbyBhY2hpZXZl
IHRoaXMsIHRoaXMgcmVsYXRpdmVseSBsYXJnZSBwYXRjaCBpbnRyb2R1Y2VkCisgICAgICAgIGZv
bGxvd2luZyBtYWpvciBjaGFuZ2VzOgorCisgICAgICAgIDEuIE1vZGlmaWVkIFRleHRFdmVudCB0
byBob2xkIGRpY3RhdGlvbiByZWxhdGVkIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIHRleHQu
CisgICAgICAgIDIuIEludHJvZHVjZWQgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyB0byBtYXJrIHRleHQgZm9yIHdoaWNoIGRpY3RhdGlvbgorICAgICAgICAgICAgc3lzdGVt
IHByb3ZpZGVkIGFsdGVybmF0aXZlcy4KKyAgICAgICAgMy4gSW50cm9kdWNlZCBEaWN0YXRpb25D
b21tYW5kIHdoaWNoIHdpbGwgYWRkIERpY3RhdGlvbkFsdGVybmF0aXZlIG1hcmtlcnMgdG8gdGV4
dAorICAgICAgICAgICBpbnNlcnRlZCBieSB0aGUgY29tbWFuZC4KKyAgICAgICAgNC4gQWRkZWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KCkgdG8gRWRpdG9yLgorICAgICAgICA1LiBJbnRyb2R1Y2VkIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciB3aGljaCBzZXJ2ZXMgc2ltaWxhciByb2xlIGFz
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuCisgICAgICAgIDYuIEFkZGVkIG5lY2Vzc2Fy
eSBpbnRlcmZhY2UgdG8gRWRpdG9yQ2xpZW50IHNpbWlsYXIgdG8gdGhvc2UgYWRkZWQgZm9yIGNv
cnJlY3Rpb24gcGFuZWwgVUkgb24gT1NYLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6RG9jdW1lbnRNYXJrZXIpOiBDcmVhdGUgbWFya2VyIHVzaW5nIHN1cHBsaWVkIERvY3VtZW50
TWFya2VyRGV0YWlscyBvYmplY3QuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnRNYXJrZXIuaDogQWRkZWQgRGljdGF0aW9uQWx0ZXJuYXRpdmUgbWFya2VyIHR5cGUu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vyczo6QWxsTWFya2Vy
cyk6CisgICAgICAgIChEb2N1bWVudE1hcmtlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOgorICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKToKKyAg
ICAgICAgKiBkb20vVGV4dEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6
Y3JlYXRlRm9yRGljdGF0aW9uKTogQ3JlYXRlIFRleHRFdmVudCBnZW5lcmF0ZWQgYnkgZGljdGF0
aW9uLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OlRl
eHRFdmVudCk6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAoVGV4dEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6aXNEaWN0YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEV2ZW50OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIGRv
bS9UZXh0RXZlbnRJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJlc3BvbmRUb0NhcmV0QXRFbmRPZldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQWx0
ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VUZXh0SW5SYW5nZSk6CisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IEFkZGVkLiBUaGlzIGNsYXNzIHNlcnZl
cyB0byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBJdCBjb250YWlucyBzb21lIGZ1bmN0aW9ucyBz
aGFyZWQgYnkgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciBhbmQKKyAgICAgICAgICBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuIDIpIEluIHNpdHVhdGlvbiB3aGVyZSBFZGl0b3Ig
aW50ZXJhY3Qgd2l0aAorICAgICAgICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgYW5k
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlciBpbiBzYW1lIGZhc2hpb24sIAorICAgICAg
ICAgIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgc2VydmVzIGFzIGEgcHJveHkgZm9yIHRob3Nl
IHR3byBjbGFzc2VzLCBzbyB0aGF0IEVkaXRvcgorICAgICAgICAgIG9ubHkgbmVlZCB0byBpbnRl
cmFjdHMgd2l0aCBvbmUgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNl
cnRUZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSk6IFByb3ZpZGUgYW4gaW50ZXJmYWNlCisgICAgICAg
ICAgIHRvIGFkZCBtYXJrZXJzIGFsb25nIHdpdGggdGV4dC4gSXQncyBjdXJyZW50bHkgdXNlZCBi
eSBEaWN0YXRpb25Db21tYW5kLCBidXQgY291bGQKKyAgICAgICAgICAgYmUgdXNlZnVsIGZvciBv
dGhlciBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNEaWN0YXRpb25Db21tYW5k
KToKKyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzOjpEaWN0YXRpb25N
YXJrZXJEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c3Rv
cFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6ZGlzbWlzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI6OnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRBbHRlcm5h
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OnJlbW92ZUFsdGVybmF0aXZlc0Zvck1hcmtlcik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDogQWRkZWQuIFNpbWlsYXIgdG8gU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlciwKKyAgICAgICAgICB0aGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBsb2dp
YyByZWdhcmRpbmcgd2hlbiB0byBzaG93IG9yIGRpc21pc3MgYWx0ZXJuYXRpdmUgZGljdGF0aW9u
CisgICAgICAgICAgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEaWN0YXRp
b25NYXJrZXJEZXRhaWxzKTogQSBzdWJjbGFzcyBvZiBEb2N1bWVudE1hcmtlckRldGFpbHMgdXNl
ZCBieSBEaWN0YXRpb25BbHRlcm5hdGl2ZQorICAgICAgICAgIHR5cGUgbWFya2VyLgorICAgICAg
ICAoV2ViQ29yZTo6RGljdGF0aW9uTWFya2VyRGV0YWlsczo6b3JpZ2luYWxUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1hcmtlckRldGFpbHM6OmRpY3RhdGlvbkNvbnRleHQpOgor
ICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZVVJSW5mbzo6RGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAo
RGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8pOgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9u
QWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb24uaDogQWRkZWQuICBJdCBjb250YWlucyB0aGUgcmFuZ2UgaW4gd2hpY2ggdGhlCisg
ICAgICAgICAgaW5wdXQgdGV4dCBoYXMgYWx0ZXJuYXRpdmUgZGljdGF0aW9uIHJlc3VsdCwgYW5k
IGFuIGludGVnZXIgdGhhdCBpZGVudGlmeSBkaWN0YXRpb24gY29udGV4dC4KKyAgICAgICAgKERp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OkRpY3RhdGlvbkNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmNvbGxlY3REaWN0YXRpb25N
YXJrZXJzSW5SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmg6IEFk
ZGVkLiBTaW1pbGFyIHRvIFR5cGluZ0NvbW1hbmQsIGJ1dCBhbGxvd3MgdXMgdG8KKyAgICAgICAg
ICBwYXNzIGFkZGl0aW9uYWwgZGljdGF0aW9uIHJlbGF0ZWQgaW5mb3JtYXRpb24gYWxvbmcgd2l0
aCB0aGUgdGV4dC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGljdGF0aW9uQ29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppc0RpY3RhdGlvbkNvbW1h
bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5vdGlm
eUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjphcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnVuYXBwbGllZEVk
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0
ZXJuYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQWx0ZXJuYXRpdmVU
ZXh0VUkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRWRpdG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQp
OiBBbGxvdyBwYXNzaW5nIG1hcmtlcnMgCisgICAgICAgICAgYWxvbmcgd2l0aCB0ZXh0LgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKEluc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6Okluc2VydFRleHRDb21tYW5kKTogQWxsb3cgcGFz
c2luZyBtYXJrZXJzIAorICAgICAgICAgIGFsb25nIHdpdGggdGV4dC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgIChJ
bnNlcnRUZXh0Q29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAg
KiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAg
ICAgKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkU3RhcnRUaW1lckZvcik6CisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAg
ICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkFw
cGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24pOiBNb3ZlZCB0aGlzIGZ1bmN0aW9uIGZyb20gVHlw
aW5nQ29tbWFuZAorICAgICAgICAgIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYnkgRGljdGF0aW9u
Q29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNl
bGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oOgorICAgICAgICAoRW1wdHlFZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVV
SSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9u
QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVEaWN0YXRpb25JbnB1dEV2ZW50KToKKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAoRXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4
dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhp
Y3NDb250ZXh0T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dE1hcmtlckxp
bmVTdHlsZUZvck1hcmtlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRpb25NYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zyb20p
OgorCiAyMDEyLTAzLTI5ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNuaXBwZXRzU2NyaXB0TWFwcGluZyBzaG91bGQgcHJv
Y2VzcyBleGlzdGluZyBzbmlwcGV0cyBvbiBsb2FkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiNzMxYmQ5ZDU5NGEz
MDYwM2FkNmNmNGVmOGI4ZDYyNmM1MzMzMTRjLi41ZjMzZjg2NDNkMWUwMzFmMmMyMGMyNTkwMmRl
MGY1ODg1ZTZkNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTI5ICBKaWEg
UHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgVUkgdG8gc2hvdyBhbHRlcm5h
dGl2ZSBzdHJpbmdzIG9mIGRpY3RhdGVkIHRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNlZSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRl
dGFpbHMuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxMi0wMy0yMiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFrdWNvQEZyZWVCU0Qub3JnPgog
CiAgICAgICAgIFtDTWFrZV0gVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjExMTc3OC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCBiMGUxYWI5NjMwNmRmZWY0NjRkN2NjMDVjMzhiYTg3MmJlZjhiYjg0
Li44MDI2MGE1ZWEyNjM1NjYzMDQwODdmOTZiNWUzZWFmNzQ2MmNkOGQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTItMDMtMjkgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+
CisKKyAgICAgICAgUHJvdmlkZSBVSSB0byBzaG93IGFsdGVybmF0aXZlIHN0cmluZ3Mgb2YgZGlj
dGF0ZWQgdGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyNTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgZGV0YWlscy4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oOiBBZGRlZC4g
VGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorICAgICAgICAgIDEpIFJldGFpbiB0aGUg
ZGljdGF0aW9uIGFsdGVybmF0aXZlIG9iamVjdHMgcHJvdmlkZWQgYnkgQXBwS2l0LCBhbmQgcHJv
dmlkZSBhbgorICAgICAgICAgICAgIGludGVnZXIgdG8gb2JqZWN0IG1hcHBpbmcgZm9yIFdlYkNv
cmUuCisgICAgICAgICAgMikgQ29udHJvbCBkaWN0YXRpb24gYWx0ZXJuYXRpdmUgVUkuCisgICAg
ICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOgorICAgICAgICAoRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOgor
ICAgICAgICAoRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6RGljdGF0
aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5tbTogQWRkZWQuCisgICAgICAgIChEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjphZGRBbHRlcm5h
dGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRp
b25Db250ZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRD
b250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KToKKyAgICAg
ICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRy
b2xsZXI6OmNsZWFyKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
YWRkQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6Y2xlYXIpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpzaG93
QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OmRpc21pc3NBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlLm1tOiBBZGRlZC4gQSBzaW1wbGUgc3RydWN0IHRoYXQgaGVscHMg
dG8KKyAgICAgICAgICBwYXNzIGFyb3VuZCBhIGNvdXBsZSBvZiBwaWVjZXMgb2YgaW5mb3JtYXRp
b24uCisgICAgICAgIChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRleHRBbHRlcm5hdGl2ZVdp
dGhSYW5nZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29sbGVjdERpY3RhdGlvblRleHRBbHRl
cm5hdGl2ZXMpOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfaW5zZXJ0RGljdGF0
ZWRUZXh0OmFsdGVybmF0aXZlczp0cmlnZ2VyaW5nRXZlbnQ6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOldlYkNvcmU6OmZvckRpY3RhdGlvbkNvbnRl
eHQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3JlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlczpdKToK
KyAgICAgICAgKC1bV2ViVmlldyBfaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZTpd
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3RGF0YS5tbToKKyAgICAgICAgKC1bV2ViVmlld1ByaXZhdGUgaW5pdF0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAx
Mi0wMy0yOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
bW92ZSBkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2UgY2FsbGJhY2ssIHNpbmNlIG5vCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggNzI2ODIxZDA5NzQ1ZmI4MzkwN2JiMTU0MGI2ZDljOTY5MTQ2ODMwMS4uZTE0NGJh
YjYxNGYxNWJlM2MyYTMxNDMwZTFkNzg0YjY5NjRkNGFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDkxIEBACisyMDEyLTAzLTI5ICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFBy
b3ZpZGUgVUkgdG8gc2hvdyBhbHRlcm5hdGl2ZSBzdHJpbmdzIG9mIGRpY3RhdGVkIHRleHQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjUwMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlZSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAg
ICAgKENvcmVJUEMpOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoUGFnZUNsaWVudEltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6UGFn
ZUNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3Nl
ZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
YWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoY29sbGVjdERpY3RhdGlv
blRleHRBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpyZXBsYWNl
bWVudFJhbmdlOl0pOgorICAgICAgICAoLVtXS1ZpZXcgaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25B
bHRlcm5hdGl2ZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5h
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgIChQYWdlQ2xp
ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlQWNjZXB0ZWREaWN0
YXRpb25BbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
c21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oOiBBZGRlZC4gVGhpcyBjbGFzcyBzZXJ2ZXMg
dHdvIHB1cnBvc2VzOgorICAgICAgICAgIDEpIFJldGFpbiB0aGUgZGljdGF0aW9uIGFsdGVybmF0
aXZlIG9iamVjdHMgcHJvdmlkZWQgYnkgQXBwS2l0LCBhbmQgcHJvdmlkZSBhbgorICAgICAgICAg
ICAgIGludGVnZXIgdG8gb2JqZWN0IG1hcHBpbmcgZm9yIFdlYkNvcmUuCisgICAgICAgICAgMikg
Q29udHJvbCBkaWN0YXRpb24gYWx0ZXJuYXRpdmUgVUkuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIpOgorICAgICAgICAoRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIpOgorICAgICAgICAo
V2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRD
b250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcik6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW06IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKToKKyAgICAg
ICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250
ZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4
dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNv
bnRleHRDb250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYktpdDo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c2hvd0FsdGVybmF0aXZlcyk6CisgICAgICAg
IChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6aGFuZGxlQWNjZXB0ZWRB
bHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OkRpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oOiBBZGRlZC4gQSBzaW1wbGUgc3Ry
dWN0IHRoYXQgaGVscHMgdG8KKyAgICAgICAgICBwYXNzIGFyb3VuZCBhIGNvdXBsZSBvZiBwaWVj
ZXMgb2YgaW5mb3JtYXRpb24uCisgICAgICAgIChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOiBBZGRl
ZC4KKyAgICAgICAgKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnNlcnREaWN0YXRlZFRleHQpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRN
YWMubW06CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRp
dG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0
aXZlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAo
V2ViUGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQpOgorICAgICAgICAoV2Vi
S2l0KToKKwogMjAxMi0wMy0yOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBhIGNyYXNoIGFuZCBhbiBhc3NlcnRpb24gd2hlbiByZWNvdmVyaW5n
IGZyb20gYSB3ZWIgcHJvY2VzcyBjcmFzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNjMwZjNk
NzQ2NGNjNjJiYTNhZjRmY2U0OTYwOTU4MzkzZTRiMWM3Li44NjMzNmYxZDM1NTU0Y2EzYWIzOGZh
OWRiOGRhMTRmMzlkMDAxOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNjUzLDYgKzY1Myw3
IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcAogCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHAKQEAgLTY2Myw2ICs2NjQsOSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9E
ZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisgICAg
ZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwCisgICAgZWRpdGluZy9E
aWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcAorICAgIGVkaXRpbmcvRGljdGF0aW9uQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMWZkYzY5
Y2Y3M2JiMzNiYTA5YjI3OTdjNDA5ZDcyZGE5YWU3ZWJhNy4uYTVjNGEwMTA4MDc2ZDYyYTk0NjAz
MjUzN2FiZWJiMmFhMjRhZDA0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC02MjcsNiArNjI3LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZG9tL1doZWVsRXZlbnQuY3BwIFwKICAgICBkb20vV2luZG93RXZlbnRD
b250ZXh0LmNwcCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIFwKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIFwKICAgICBl
ZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBcCkBA
IC02MzcsNiArNjM4LDkgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVCdXR0b24u
Y3BwIFwKICAgICBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBl
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKKyAgICBlZGl0aW5nL0RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgXAorICAgIGVkaXRpbmcvRGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbi5jcHAgXAorICAgIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgXAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcCBcCkBAIC0xNzU3LDYgKzE3NjEsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBkb20vV2ViS2l0TmFtZWRGbG93LmggXAogICAgIGRvbS9XZWJLaXRUcmFu
c2l0aW9uRXZlbnQuaCBcCiAgICAgZG9tL1doZWVsRXZlbnQuaCBcCisgICAgZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQu
aCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCBcCiAgICAgZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oIFwKQEAgLTE3NjcsNiArMTc3Miw5IEBAIEhFQURFUlMgKz0g
XAogICAgIGVkaXRpbmcvRGVsZXRlQnV0dG9uLmggXAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBc
CisgICAgZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCBcCisgICAgZWRp
dGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmggXAorICAgIGVkaXRpbmcvRGljdGF0
aW9uQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmggXAogICAgIGVkaXRpbmcv
RWRpdGluZ1N0eWxlLmggXAogICAgIGVkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCAwYzQyNmY3ZTBjMTdmNjMyOTI3OGZmMWJkZGRkNWFmMzc4NDVjNzI5
Li44NGFiMDA1MzMwODM0ZDVkZTEyZWQ3OTEzY2ZmOTZmNGJjMGVlOWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgpAQCAtNzEwLDYgKzcxMCw5IEBAIF9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzRXYKK19fWk43V2ViQ29yZTI4RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbkMxRVJLUzBfCitfX1pON1dlYkNvcmUyOERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb25DMUV5eXkKK19fWk43V2ViQ29yZTI4RGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbkMxRXYKIF9fWk43V2ViQ29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6
ZUV2CiBfX1pON1dlYkNvcmUyOGNvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnNFdgogX19aTjdX
ZWJDb3JlMjhjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzRXYKQEAgLTg2OCw2ICs4NzEsNyBA
QCBfX1pON1dlYkNvcmU2RWRpdG9yMTdjYW5jZWxDb21wb3NpdGlvbkV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJt
Q29tcG9zaXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJt
Q29tcG9zaXRpb25FdgorX19aTjdXZWJDb3JlNkVkaXRvcjE4aW5zZXJ0RGljdGF0ZWRUZXh0RVJL
TjNXVEY2U3RyaW5nRVJLTlMxXzZWZWN0b3JJTlNfMjhEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uRUxtMEVFRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNG
b3JUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFuZ2VFampiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTlkZWxldGVXaXRoRGlyZWN0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdy
YW51bGFyaXR5RWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYK
QEAgLTg5MCw2ICs4OTQsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMzBkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGVFYgogX19aTjdXZWJDb3JlNkVkaXRvcjMwcGFzdGVBc1BsYWluVGV4dEJ5
cGFzc2luZ0RIVE1MRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMmd1ZXNzZXNGb3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzM2luY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsT3JkZXJlZEV2CitfX1pON1dlYkNvcmU2RWRpdG9yMzRoYW5kbGVBY2NlcHRlZERpY3Rh
dGlvbkFsdGVybmF0aXZlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjM0c2V0
TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZEViCiBfX1pON1dlYkNvcmU2RWRpdG9yMzVp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MzVzZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZUViCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggMmEzOGY3NzA5NDk5ZGI4MGI0MGMzYjBkYzAwNmQ1MzQ3Njc0NGQwYS4uYzY2ZjNlOTQ4MTk1
MDMxM2NkYjBlZDRmZWIyNmNkMTdhMTlkNTY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTcsNiAr
OTcsNyBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaCcsCiAgICAgICAg
ICAgICAnZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgnLAorICAgICAgICAgICAgJ2Vk
aXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oJywKICAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRBY3Rpb24uaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0Q29tbWFuZC5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oJywKQEAgLTI0ODcsNiArMjQ4
OCw3IEBACiAgICAgICAgICAgICAnY3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmNwcCcsCiAgICAg
ICAgICAgICAnY3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9X
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwZW5kTm9k
ZUNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCcsCkBA
IC0yNTA0LDYgKzI1MDYsOSBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24u
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5n
L0VkaXRpbmdBbGxJbk9uZS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IDVlMWRkZmEwN2RjYjM2MTllMDI3NzA3YjBhNDkwNzYwOWYyMzMxMWQuLmRmMDYwMzY2MWY5
MzJjYjMxMTBlMjc2YjY5NzQ5ZjIyMmFiN2I4ZTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01NDAwMiw2ICs1NDAwMiwxNCBAQAogCQkJTmFt
ZT0iZWRpdGluZyIKIAkJCT4KIAkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIgorCQkJICAgID4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaCIKKwkJCSAgICA+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xBcHBlbmROb2RlQ29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgpAQCAtNTQ1MTAsNiArNTQ1MTgsMzAgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwIgorCQkJICAgID4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlci5oIgorCQkJICAgID4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkgICAgUmVsYXRp
dmVQYXRoPSIuLlxlZGl0aW5nXERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uY3BwIgorCQkJ
ICAgID4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKKwkJCSAgICA+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xEaWN0YXRpb25Db21t
YW5kLmNwcCIKKwkJCSAgICA+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJICAgIFJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xEaWN0YXRpb25Db21tYW5kLmgiCisJCQkgICAgPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcRWRpdEFjdGlvbi5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBmMjAwOGMzZTA1ZTJiMzk1NDY0ODMxMDI2M2NmNmI3YTcw
ZDMxZDI3Li40NzBkYjkyOWQ5NDdmNjA0YTJiOWQxYjBiNTNlMjgxYjMyYzIwYTYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MTU5LDggKzExNTksNiBAQAogCQk0NDMxMUNENjEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1l
bnRGcmFnbWVudFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0MzExQ0Q0MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50
UHJpdmF0ZS5oICovOyB9OwogCQk0NDMxMUNENzEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1l
bnRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi87IH07
CiAJCTQ0MzExQ0Q4MTJFNEUyNEIwMDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0MzExQ0Q1MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCAqLzsgfTsK
LQkJQTU0QTgyRUMxNTIyOEQyRjAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRBODJFQTE1MjI4Q0EzMDBD
NzJCQTYgLyogRE9NTm9kZVByaXZhdGUuaCAqLzsgfTsKLQkJQTU0QTgyRjExNTIyOERGNjAwQzcy
QkE2IC8qIERPTU5vZGVQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRBODJFQTE1MjI4Q0EzMDBDNzJCQTYgLyog
RE9NTm9kZVByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFDRDkxMkU0RTI1NzAwMEE4RDE5IC8qIERP
TURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENDEyRTRFMjJEMDAwQThEMTkg
LyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFGODIxMkU0RTY2
QzAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVFNzExNDUwQUM1RDUzNDAwNTMyNzBG
IC8qIERPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oICovOyB9OwogCQk0NDhBMjlCRjBBNDZE
OUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAv
KiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovOyB9OwpAQCAtMzY3OCw2ICszNjc2LDggQEAK
IAkJQTQ1NkZBMjcxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNDU2RkEyNTExQUQ0QTgzMDAy
MEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuaCAqLzsgfTsKIAkJQTUxM0IzRDcxMTRCMTY2NjAwMUM0
MjlCIC8qIEtleUV2ZW50Q29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1Qzk3NENGMTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLmgg
Ki87IH07CiAJCUE1MTNCM0Q4MTE0QjE2NkEwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDOTc0RDAxMTQ4
NUZGMTAwNjZGMkFCIC8qIEtleUV2ZW50Q29jb2EubW0gKi87IH07CisJCUE1NEE4MkVDMTUyMjhE
MkYwMEM3MkJBNiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0QTgyRUExNTIyOENBMzAwQzcyQkE2IC8qIERPTU5vZGVQ
cml2YXRlLmggKi87IH07CisJCUE1NEE4MkYxMTUyMjhERjYwMEM3MkJBNiAvKiBET01Ob2RlUHJp
dmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTU0QTgyRUExNTIyOENBMzAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmgg
Ki87IH07CiAJCUE1NzMyQjBBMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTczMkIwODEz
NkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovOyB9OwogCQlBNTczMkIwQjEz
NkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NzMyQjA5MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRl
Q29tcG9uZW50cy5oICovOyB9OwogCQlBNTczMkIwRDEzNkExNkM0MDA1QzhEN0MgLyogTG9jYWxp
emVkRGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU3MzJCMEMxMzZBMTZDNDAwNUM4RDdDIC8qIExvY2FsaXplZERhdGUuaCAqLzsgfTsKQEAgLTUz
ODAsNyArNTM4MCw2IEBACiAJCUJDODI0MzJBMEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTFRyYW5z
YWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzgyNDMyNjBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oICovOyB9OwogCQlC
QzgyNDNFODBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4MjQzRTYwRDBDRkQ3NTAwNDYw
QzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCAqLzsgfTsKIAkJQkM4MjQzRTkwRDBDRkQ3NTAwNDYw
QzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzgyNDNFNzBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzg1
RjIzRDE1MTkxNUUwMDBCQzE3QkUgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg1RjIzQzE1MTkxNUUwMDBC
QzE3QkUgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmggKi87IH07CiAJCUJDODVGMjNGMTUxOTE4
NzMwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4NUYyM0UxNTE5MTg3MzAwQkMxN0JFIC8q
IFJlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgKi87IH07CiAJCUJDOEFFMzRFMTJFQTA5NkEwMEVC
M0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzhBRTM0QzEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFy
ZWEuY3BwICovOyB9OwogCQlCQzhBRTM0RjEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFy
ZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEFF
MzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NTQ4LDcgKzU1NDcsNiBAQAogCQlC
Q0U3QjE5MzBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTdCMTkyMEQ0RTg2OTYwMDc1
QTUzOSAvKiBKU0hpc3RvcnlDdXN0b20uY3BwICovOyB9OwogCQlCQ0U5M0Y0NTE1MTdDNTY3MDA4
Q0NGNzQgLyogUmVuZGVyUmVnaW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0U5M0Y0NDE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyUmVnaW9u
U2V0LmggKi87IH07CiAJCUJDRTkzRjQ3MTUxN0M2RDUwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
OTNGNDYxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5jcHAgKi87IH07Ci0JCUJD
RTkzRjUxMTUxN0REQ0QwMDhDQ0Y3NCAvKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjUwMTUx
N0REQ0QwMDhDQ0Y3NCAvKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCAqLzsgfTsKIAkJ
QkNFOTNGNTMxNTE3RTBCMDAwOENDRjc0IC8qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U5M0Y1
MjE1MTdFMEIwMDA4Q0NGNzQgLyogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcCAqLzsg
fTsKIAkJQkNFQTQ3OEYwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0VBNDc3QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cCAqLzsgfTsKIAkJQkNFQTQ3OTAwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01
NzI5LDYgKzU3MjcsMTQgQEAKIAkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNv
dXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRUEzOTQ5
QzExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQTM5NDlBMTFENDVDREEwMDMw
OTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwICovOyB9OwogCQlDRUEzOTQ5RDExRDQ1
Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0Q0YgLyog
U3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi87IH07CisJCUNFQjgyMzE0MTUyM0RFRjcwMDM5NjFD
MCAvKiBEaWN0YXRpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFQjgyMzEyMTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25Db21t
YW5kLmNwcCAqLzsgfTsKKwkJQ0VCODIzMTUxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNv
bW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENF
QjgyMzEzMTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25Db21tYW5kLmggKi87IH07CisJCUNF
QjgyMzFCMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIz
MTcxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAg
Ki87IH07CisJCUNFQjgyMzFDMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFQjgyMzE4MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIuaCAqLzsgfTsKKwkJQ0VCODIzMUQxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0VCODIzMTkxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24uY3BwICovOyB9OworCQlDRUI4MjMxRTE1MjNERjM0MDAzOTYxQzAgLyogRGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMUExNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlDRUI4MjMyMTE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRUI4MjMxRjE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAgKi87IH07CisJCUNFQjgyMzIyMTUyM0RGNTIwMDM5NjFDMCAvKiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRUI4MjMyMDE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oICovOyB9OwogCQlDRUNDRkMzQjE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi87IH07
CiAJCUNFRjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2
NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjEx
Nzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBW
aWV3cG9ydEFyZ3VtZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMjgxMiw2ICsxMjgxOCwxNCBAQAogCQlDRTVDQjFCMzE0RURBQjZGMDBC
QjI3OTUgLyogRXZlbnRTZW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXZlbnRTZW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUExMUQ0
NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGlj
SGFzaFNldE5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMx
MjE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWN0YXRpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0VCODIzMTMxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNv
bW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0aW9uQ29tbWFu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMxNzE1MjNERjM0MDAzOTYx
QzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQjgyMzE4MTUyM0RGMzQwMDM5NjFDMCAv
KiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNFQjgyMzE5MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDRUI4MjMxQTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFQjgy
MzFGMTUyM0RGNTIwMDM5NjFDMCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUI4MjMyMDE1MjNERjUyMDAz
OTYxQzAgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNFQ0NGQzNBMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVT
ZXF1ZW5jZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2RlRXNjYXBl
U2VxdWVuY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFRjQxOENDMTE3OTY3
OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydEFyZ3VtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3cG9ydEFyZ3VtZW50cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1NjMsNiArMTY1NzcsOCBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFRDUwMURDOTBCMjQ5RjM5MDBB
RTE4RDkgLyogbWFjICovLAorCQkJCUNFQjgyMzFGMTUyM0RGNTIwMDM5NjFDMCAvKiBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLywKKwkJCQlDRUI4MjMyMDE1MjNERjUyMDAzOTYxQzAg
LyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTkzMzA5RDg3MDk5RTY0OTEw
MDU2RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEODgwOTlFNjQ5
MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmggKi8sCiAJCQkJOUI0MTcwNjMxMjU2NjJC
MzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgKi8sCkBAIC0xNjU4Myw2
ICsxNjU5OSwxMiBAQAogCQkJCTkzMzA5RDkwMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVGcm9t
VGV4dE5vZGVDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEOTEwOTlFNjQ5MTAwNTZFNTgxIC8qIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDkyMDk5RTY0OTEwMDU2RTU4
MSAvKiBEZWxldGVTZWxlY3Rpb25Db21tYW5kLmggKi8sCisJCQkJQ0VCODIzMTcxNTIzREYzNDAw
Mzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQ0VC
ODIzMTgxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5o
ICovLAorCQkJCUNFQjgyMzE5MTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmNwcCAqLywKKwkJCQlDRUI4MjMxQTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oICovLAorCQkJCUNFQjgyMzEyMTUyM0RFRjcwMDM5NjFD
MCAvKiBEaWN0YXRpb25Db21tYW5kLmNwcCAqLywKKwkJCQlDRUI4MjMxMzE1MjNERUY3MDAzOTYx
QzAgLyogRGljdGF0aW9uQ29tbWFuZC5oICovLAogCQkJCTkzMzA5RDkzMDk5RTY0OTEwMDU2RTU4
MSAvKiBFZGl0QWN0aW9uLmggKi8sCiAJCQkJOTMzMDlEOTQwOTlFNjQ5MTAwNTZFNTgxIC8qIEVk
aXRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOUQ5NTA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdENv
bW1hbmQuaCAqLywKQEAgLTIyMjM5LDYgKzIyMjYxLDcgQEAKIAkJCQk4NTAyQUI5NzBBRDQzOTRF
MDAzNzg1NDAgLyogRE9NU1ZHRkVGdW5jQkVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODUwMkFCNTQwQUQ0MzhDMDAwMzc4NTQwIC8qIERPTVNWR0ZFRnVuY0dFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTAyQUI5ODBBRDQzOTRFMDAzNzg1NDAgLyogRE9NU1ZHRkVG
dW5jR0VsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0VCODIzMUUxNTIzREYz
NDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1MDJBQjU2MEFENDM4QzAwMDM3ODU0MCAvKiBET01TVkdGRUZ1bmNSRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMkFCOTkwQUQ0Mzk0RTAwMzc4NTQwIC8qIERPTVNWR0ZF
RnVuY1JFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDJBQjU4MEFENDM4
QzAwMDM3ODU0MCAvKiBET01TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjI0ODQsNyArMjI1MDcsMTAgQEAKIAkJCQlBN0NBNTk2MzBCMjdDMUYyMDBGQTAyMUQg
LyogRHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTU5NUQwQjI3QkQ5RTAwRkEw
MjFEIC8qIERyYWdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I2RTY5RjBCMjkx
QTk2MDBEMDUyOUYgLyogRHJhZ0RhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFQjgyMzIyMTUy
M0RGNTIwMDM5NjFDMCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0NGQjNEMjBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDRUI4MjMxQzE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRUI4MjMxNTE1MjNERUY3MDAzOTYx
QzAgLyogRGljdGF0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2OTM3OUMxNDYw
OUM2QzAwQzAxMzYyIC8qIERyYWdTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUY2NUZG
NjEzNzg4RkFBMDBGRjZGMkQgLyogRHJhZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTg3
NzBEQzEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNDY0NywxMSArMjQ2NzMsMTAgQEAKIAkJCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyog
WmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTMyQjlDMTUxN0MwQjIwMEY1NDJFQyAv
KiBSZW5kZXJNdWx0aUNvbHVtblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFOTNGNDUxNTE3
QzU2NzAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNF
OTNGNTExNTE3RERDRDAwOENDRjc0IC8qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVk
Rmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGODlBNDIxNTE4RkRFQTAwRTU0N0I1
IC8qIFRpbGVkQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkI3OEFEMkUxNTFCRjVFNjAw
RkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTYyM0QxMTUx
RjcyQTYwMDM2RTJGNCAvKiBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUNFQjgyMzFFMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3NjQxLDYgKzI3NjY2LDEwIEBA
CiAJCQkJQkNFOTNGNTMxNTE3RTBCMDAwOENDRjc0IC8qIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzg1RjIzRjE1MTkxODczMDBCQzE3QkUgLyog
UmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcxRTYyM0QwMTUx
RjcyQTYwMDM2RTJGNCAvKiBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQ0VCODIzMTQxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0VCODIzMUIxNTIzREYzNDAwMzk2MUMwIC8q
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
RUI4MjMxRDE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlDRUI4MjMyMTE1MjNERjUyMDAzOTYxQzAgLyogQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXIuY3BwCmluZGV4IGI0Zjk5OTRkYjRlZjZhZWNmZDhjNTY3OTMwYjgxNzc4OGVl
YmQ2MWEuLjUzZDQzZTRlYWI1NjA2YTZjYzY1Yzc4YjNmN2ZlYTNiMzM0MWNmMGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcApAQCAtMTIzLDYgKzEyMywxNCBAQCBEb2N1bWVu
dE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCwgYm9vbCBhYwogewogfQogCitEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIo
TWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCBQYXNzUmVmUHRyPERvY3VtZW50TWFya2VyRGV0YWlscz4gZGV0YWlscykKKyAgICA6IG1fdHlw
ZSh0eXBlKQorICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAsIG1fZW5kT2Zm
c2V0KGVuZE9mZnNldCkKKyAgICAsIG1fZGV0YWlscyhkZXRhaWxzKQoreworfQorCiB2b2lkIERv
Y3VtZW50TWFya2VyOjpzaGlmdE9mZnNldHMoaW50IGRlbHRhKQogewogICAgIG1fc3RhcnRPZmZz
ZXQgKz0gZGVsdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCmluZGV4IDQxZWQ4NDgz
NjQwZGNlNWY5OTFmYzczNmFjMzNiZDdlNTZlOTYyNDUuLmMxZTczOGQ0MzY5NTFkNmU3MTQ0OGEw
MGYwMDk5NTZjZGU0Yjc3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCkBAIC02
Myw3ICs2MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHJhbmdlIHRoYXQgYmVhcnMgdGhpcyBt
YXJrZXIuIEluIHNvbWUgcGxhdGZvcm1zLCBpZiB0aGUgdXNlciBsYXRlciBpbnNlcnRzIHRoZSBz
YW1lIG9yaWdpbmFsCiAgICAgICAgIC8vIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgaXQg
d2lsbCBub3QgYmUgYXV0b2NvcnJlY3RlZCBhZ2Fpbi4gVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMK
ICAgICAgICAgLy8gbWFya2VyIGlzIHRoZSBvcmlnaW5hbCB3b3JkIGJlZm9yZSBhdXRvY29ycmVj
dGlvbiB3YXMgYXBwbGllZC4KLSAgICAgICAgRGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gMSA8PCA4
CisgICAgICAgIERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IDEgPDwgOCwKKyAgICAgICAgLy8gVGhp
cyBtYXJrZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHJhbmdlIG9mIHRleHQgc3Bhbm5lZCBieSB0aGUg
bWFya2VyIGlzIGVudGVyZWQgYnkgdm9pY2UgZGljdGF0aW9uLAorICAgICAgICAvLyBhbmQgaXQg
aGFzIGFsdGVybmF0aXZlIHRleHQuCisgICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcyA9IDEg
PDwgOQogICAgIH07CiAKICAgICBjbGFzcyBNYXJrZXJUeXBlcyB7CkBAIC04NSw3ICs4OCw3IEBA
IHB1YmxpYzoKICAgICBjbGFzcyBBbGxNYXJrZXJzIDogcHVibGljIE1hcmtlclR5cGVzIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIEFsbE1hcmtlcnMoKQotICAgICAgICAgICAgOiBNYXJrZXJUeXBl
cyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2ggfCBSZXBsYWNlbWVudCB8IENvcnJlY3Rp
b25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24gfCBBdXRvY29ycmVjdGVkIHwgU3BlbGxD
aGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29ycmVjdGlvbikKKyAgICAgICAgICAgIDog
TWFya2VyVHlwZXMoU3BlbGxpbmcgfCBHcmFtbWFyIHwgVGV4dE1hdGNoIHwgUmVwbGFjZW1lbnQg
fCBDb3JyZWN0aW9uSW5kaWNhdG9yIHwgUmVqZWN0ZWRDb3JyZWN0aW9uIHwgQXV0b2NvcnJlY3Rl
ZCB8IFNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEZWxldGVkQXV0b2NvcnJlY3Rpb24gfCBEaWN0
YXRpb25BbHRlcm5hdGl2ZXMpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CkBAIC05NCw2
ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICBEb2N1bWVudE1hcmtlcihN
YXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25z
dCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKICAgICBEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZU1hdGNoKTsKKyAgICBEb2N1
bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCBQYXNzUmVmUHRyPERvY3VtZW50TWFya2VyRGV0YWlscz4pOwogCiAgICAgTWFya2Vy
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKaW5kZXggZTA2NzJkMGQzZDFmZDhkYjdh
ZWE0YmQ5MWQzNmY0YzY3ZTJhZGFjZC4uNGJjMjEwY2U1MDI2OWU4OWFhNjdiYTVlMDlhNjZjMmM3
NzU2ODQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaApAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2
b2lkIGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKICAgICB2
b2lkIGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uKTsKKyAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9j
dW1lbnRNYXJrZXImKTsKICAgICB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihSYW5nZSosIGJvb2wg
YWN0aXZlTWF0Y2gpOwogCiAgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsK
QEAgLTgwLDggKzgxLDYgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBh
ZGRNYXJrZXIoTm9kZSosIGNvbnN0IERvY3VtZW50TWFya2VyJik7Ci0KICAgICB0eXBlZGVmIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwogICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8Tm9kZT4sIE1hcmtlckxpc3QqPiBNYXJrZXJNYXA7CiAgICAgYm9vbCBwb3Nz
aWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHRFdmVudC5jcHAKaW5kZXggMWRmZmIwMTRlZWQ1ZjZiMzEwNDUzNzk3MzBkODYzNWY5MTZmMWRm
Ny4uYTFkMjU3ZmIxMWY1MGU1OGY2YjcyZWFkNzQyZWY3ZTJhMDc2MzRlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1RleHRFdmVudC5jcHAKQEAgLTU3LDYgKzU3LDExIEBAIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBU
ZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNv
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQodmlldywgZGF0YSwgVGV4dEV2ZW50
SW5wdXREcm9wKSk7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dEV2ZW50PiBUZXh0RXZlbnQ6OmNyZWF0
ZUZvckRpY3RhdGlvbihQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5n
JiBkYXRhLCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3Rh
dGlvbkFsdGVybmF0aXZlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCh2
aWV3LCBkYXRhLCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpKTsKK30KKwogVGV4dEV2ZW50OjpUZXh0
RXZlbnQoKQogICAgIDogbV9pbnB1dFR5cGUoVGV4dEV2ZW50SW5wdXRLZXlib2FyZCkKICAgICAs
IG1fc2hvdWxkU21hcnRSZXBsYWNlKGZhbHNlKQpAQCAtODUsNiArOTAsMTYgQEAgVGV4dEV2ZW50
OjpUZXh0RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYg
ZGF0YSwgUGFzc1JlZlAKIHsKIH0KIAorVGV4dEV2ZW50OjpUZXh0RXZlbnQoUGFzc1JlZlB0cjxB
YnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgVmVjdG9yPERpY3Rh
dGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpCisgICAgOiBV
SUV2ZW50KGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCwgdHJ1ZSwgdHJ1ZSwgdmlldywgMCkK
KyAgICAsIG1faW5wdXRUeXBlKFRleHRFdmVudElucHV0RGljdGF0aW9uKQorICAgICwgbV9kYXRh
KGRhdGEpCisgICAgLCBtX3Nob3VsZFNtYXJ0UmVwbGFjZShmYWxzZSkKKyAgICAsIG1fc2hvdWxk
TWF0Y2hTdHlsZShmYWxzZSkKKyAgICAsIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlv
bkFsdGVybmF0aXZlcykKK3sKK30KKwogVGV4dEV2ZW50Ojp+VGV4dEV2ZW50KCkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UZXh0RXZlbnQuaAppbmRleCA5YjA4NzdhZDRmZWNiMjFhZGZkNzQ4Y2EzMWQzY2M4NzZj
ZjgyYTA5Li4xYmNkZDQ1MDgzY2E4NjEzM2YzMTNiMzdhMDllNTRmMmFkMDM4NTBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1RleHRFdmVudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIFRleHRFdmVudF9oCiAj
ZGVmaW5lIFRleHRFdmVudF9oCiAKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiVUlFdmVu
dC5oIgogCkBAIC00Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShQYXNzUmVm
UHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBib29sIHNob3VsZFNt
YXJ0UmVwbGFjZSk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRl
Rm9yRnJhZ21lbnRQYXN0ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkYXRhLCBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSwgYm9vbCBz
aG91bGRNYXRjaFN0eWxlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBj
cmVhdGVGb3JEcm9wKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcm
IGRhdGEpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckRp
Y3RhdGlvbihQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwgY29u
c3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5h
dGl2ZXMpOwogCiAgICAgICAgIHZpcnR1YWwgflRleHRFdmVudCgpOwogICAgIApAQCAtNTYsMTAg
KzU4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc0JhY2tUYWIoKSBj
b25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBUZXh0RXZlbnRJbnB1dEJhY2tUYWI7IH0KICAg
ICAgICAgYm9vbCBpc1Bhc3RlKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2
ZW50SW5wdXRQYXN0ZTsgfQogICAgICAgICBib29sIGlzRHJvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRUeXBlID09IFRleHRFdmVudElucHV0RHJvcDsgfQorICAgICAgICBib29sIGlzRGljdGF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXREaWN0YXRp
b247IH0KIAogICAgICAgICBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkU21hcnRSZXBsYWNlOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWF0Y2hTdHlsZTsgfQogICAgICAgICBEb2N1bWVudEZy
YWdtZW50KiBwYXN0aW5nRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX3Bhc3RpbmdGcmFnbWVu
dC5nZXQoKTsgfQorICAgICAgICBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVzOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBUZXh0RXZlbnQoKTsKQEAg
LTY3LDYgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUZXh0RXZlbnQoUGFz
c1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIFRleHRFdmVudElucHV0
VHlwZSA9IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOwogICAgICAgICBUZXh0RXZlbnQoUGFzc1Jl
ZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4sCiAgICAgICAgICAgICAgICAgICBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSwg
Ym9vbCBzaG91bGRNYXRjaFN0eWxlKTsKKyAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJz
dHJhY3RWaWV3PiwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAKICAgICAgICAgVGV4
dEV2ZW50SW5wdXRUeXBlIG1faW5wdXRUeXBlOwogICAgICAgICBTdHJpbmcgbV9kYXRhOwpAQCAt
NzQsNiArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBtX3Bhc3RpbmdGcmFnbWVudDsKICAgICAgICAgYm9vbCBtX3Nob3VsZFNtYXJ0
UmVwbGFjZTsKICAgICAgICAgYm9vbCBtX3Nob3VsZE1hdGNoU3R5bGU7CisgICAgICAgIFZlY3Rv
cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlczsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vVGV4dEV2ZW50SW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2
ZW50SW5wdXRUeXBlLmgKaW5kZXggOThiZjM0MzJkOGI0NjkzNzgyZWFiZmNjMzgwYWFmZWVkYTAw
YTJlZS4uOGJlMjMzYzRiZmYwYmE1ZjVmMmY5NmQ1MDMwZDE4OGI1YzU2YmE3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudElucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaApAQCAtMzUsNiArMzUsNyBAQCBlbnVtIFRl
eHRFdmVudElucHV0VHlwZSB7CiAgICAgVGV4dEV2ZW50SW5wdXRCYWNrVGFiLAogICAgIFRleHRF
dmVudElucHV0UGFzdGUsCiAgICAgVGV4dEV2ZW50SW5wdXREcm9wLAorICAgIFRleHRFdmVudElu
cHV0RGljdGF0aW9uLAogICAgIFRleHRFdmVudElucHV0T3RoZXIsCiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNGE1NjY0NjE4M2M0NTVjNGY0YjIwMjk2YTAxOWVjMGYyODFhMWY5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlJhbmdlLmgi
CisjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcihGcmFtZSogZnJhbWUsIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIqIHNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIsIERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlciogZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKQorOiBtX2ZyYW1lKGZyYW1l
KQorLCBtX3NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoc3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcikKKywgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoZGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyKQoreworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQor
eworICAgIHJlc3BvbmRUb0NhcmV0QXRFbmRPZldvcmQob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsK
K30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DYXJldEF0RW5k
T2ZXb3JkKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAg
ICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0g
b2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9u
IHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOworICAgIC8vIENy
ZWF0aW5nIGEgVmlzaWJsZSBwb3NpdGlvbiB0cmlnZ2VycyBhIGxheW91dCBhbmQgdGhlcmUgaXMg
bm8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIHZhbGlkLgor
ICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxl
Y3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmIChzZWxlY3Rpb25Q
b3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOb2RlKiBub2RlID0gcG9z
aXRpb24uY29udGFpbmVyTm9kZSgpOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtl
cnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3Iobm9kZSk7CisgICAg
c2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBpZiAoIW1hcmtlcikKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91bGRJZ25vcmVPdGhl
ck1hcmtlcnMgPSBmYWxzZTsKKyAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LT5yZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCgqbWFya2VyLCBwb3NpdGlvbiwgJnNob3VsZEln
bm9yZU90aGVyTWFya2Vycyk7CisgICAgICAgIAorICAgICAgICAvLyBJbiBzb21lIHNpdHVhdGlv
biwgaGFuZGxpbmcgYSBtYXJrZXIgd291bGQgcHJoaWJpdCB0aGUgcHJvcGVyIGhhbmRsaW5nIG9m
IG90aGVyIG1hcmtlcnMuCisgICAgICAgIC8vIFNvIGlmIHNob3VsZElnbm9yZU90aGVyTWFya2Vy
cyBpcyBzZXQgdG8gdHJ1ZSwgd2UgYnJlYWsgdGhlIGxvb3AuCisgICAgICAgIGlmIChzaG91bGRJ
Z25vcmVPdGhlck1hcmtlcnMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAg
IGlmICghKG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkKSkgewor
ICAgICAgICAgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPnJlc3BvbmRUb01h
cmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBvc2l0aW9uLCAmc2hvdWxkSWdub3JlT3RoZXJNYXJr
ZXJzKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKCkKK3sKKyAgICBtX3NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXItPmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbElnbm9yZWQpOworICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
LT5kaXNtaXNzKCk7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBl
bmRpbmdBbHRlcm5hdGl2ZXMoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiAmb2xkU2Vs
ZWN0aW9uKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci0+c3RvcFBlbmRp
bmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXItPnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmUoKTsKK30KKyAgICAKK0Zsb2F0UmVjdCBy
YW5nZUJvdW5kaW5nQm94SW5Sb290Vmlldyhjb25zdCBTY3JvbGxWaWV3KiB2aWV3LCBjb25zdCBS
YW5nZSogcmFuZ2UpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgIHJhbmdlLT50ZXh0UXVh
ZHModGV4dFF1YWRzKTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OworICAgIHNpemVfdCBz
aXplID0gdGV4dFF1YWRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgYm91bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkc1tpXS5ib3VuZGluZ0Jv
eCgpKTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRp
bmdSZWN0KSk7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VUZXh0SW5SYW5nZShjb25z
dCBTdHJpbmcmIG5ld1RleHQsIFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lLCBib29sIGZvclNw
ZWxsaW5nQ29ycmVjdGlvbikKK3sKKyAgICBpZiAoIXJhbmdlIHx8ICFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UmFuZ2U+
IHBhcmFncmFwaFJhbmdlID0gcmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3Rh
cnRPZlBhcmFncmFwaChyYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFn
cmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChyYW5nZS0+ZW5kUG9zaXRpb24oKSkpOwor
CisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCAncmFuZ2UnLCB3ZSBuZWVkIHRv
IGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCisgICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVw
bGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mICdyYW5nZScgaXMgbm90IHZhbGlkIGFu
eW1vcmUuCisgICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdl
IG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mICdyYW5nZScKKyAgICAvLyByZWxh
dGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBX
ZSB1c2UgcmVwbGFjZW1lbnRTdGFydE9mZnNldEluUGFyYWdyYXBoCisgICAgLy8gdG8gc3RvcmUg
dGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZp
cnN0IGNyZWF0ZSBhIHJhbmdlCisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2Yg
cGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiAncmFuZ2UnLgorICAgIFJlZlB0cjxS
YW5nZT4gcmVwbGFjZW1lbnRTdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpj
cmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBvc2l0aW9uIHN0
YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsK
KyAgICByZXBsYWNlbWVudFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGFrZSBub3RlIG9m
IHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgcmFuZ2UgdG8gYmUgcmVwbGFjZWQsIHNvIHRoYXQg
d2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCisgICAg
aW50IHJlcGxhY2VtZW50U3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgocmVwbGFjZW1lbnRTdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7
CisKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRo
b2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgorICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSByYW5nZS0+Y2xvbmVSYW5nZShlYyk7CisgICAg
aWYgKGZvclNwZWxsaW5nQ29ycmVjdGlvbikKKyAgICAgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbmV3VGV4dCkpOwor
ICAgIGVsc2UgeworICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEZyb21UZXh0KHJhbmdlLCBuZXdUZXh0KTsKKyAgICAgICAgaWYgKGZyYWdt
ZW50KSB7CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihyYW5n
ZSwgRnJhbWVTZWxlY3Rpb246OkRpY3RhdGlvblRyaWdnZXJlZCB8IEZyYW1lU2VsZWN0aW9uOjpD
bG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlKTsKKyAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlLT5z
dGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLCBmcmFnbWVudCwgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rp
bmcsIEVkaXRBY3Rpb25QYXN0ZSkpOworICAgICAgICB9CisgICAgfQorICAgIHNldEVuZChwYXJh
Z3JhcGhSYW5nZS5nZXQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgp
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKHBhcmFncmFwaFJhbmdlLmdldCgpLCByZXBsYWNlbWVudFN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGgsICBuZXdUZXh0Lmxlbmd0aCgpKTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBs
YWNlbWVudCBzdWNjZWVkZWQuCisgICAgU3RyaW5nIHRleHRBZnRlclJlcGxhY2VtZW50ID0gcGxh
aW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworICAgIGlmICh0ZXh0QWZ0ZXJSZXBsYWNl
bWVudCAhPSBuZXdUZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcmVwbGFjZW1l
bnRSYW5nZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Njg3MmMwNGRkOWFmMGU0MTk3YzczYWRi
NDM0YWY3Zjc3NDc4ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcl9oCisjZGVmaW5lIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAorCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOworY2xhc3MgUmFuZ2U7CitjbGFzcyBG
cmFtZTsKK2NsYXNzIFNjcm9sbFZpZXc7CitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOworCitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1l
KiwgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciosIERpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlciopOworICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25P
cHRpb25zKTsKKyAgICB2b2lkIGRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSgpOworICAgIHZvaWQg
c3RvcFBlbmRpbmdBbHRlcm5hdGl2ZXMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0
aW9uKTsKK3ByaXZhdGU6CisgICAgdm9pZCByZXNwb25kVG9DYXJldEF0RW5kT2ZXb3JkKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVj
dGlvbk9wdGlvbnMpOworICAgIAorICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIqIG1fc3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjsKKyAgICBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIqIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyOworfTsKKworRmxvYXRSZWN0IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KGNvbnN0
IFNjcm9sbFZpZXcqLCBjb25zdCBSYW5nZSopOworCisvLyBVcG9uIHN1Y2Nlc3MsIHJldHVybiB2
YWx1ZSBjb250YWlucyB0aGUgcmFuZ2Ugb2YgbmV3VGV4dC4gT3RoZXJ3aXNlLCBpdCByZXR1cm5z
IG51bGwuCitQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5n
JiBuZXdUZXh0LCBSYW5nZSosIEZyYW1lKiwgYm9vbCBmb3JTcGVsbGluZ0NvcnJlY3Rpb24pOwor
fQorCisjZW5kaWYgLy8gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDgzMGVhY2Y2ZmVl
ZDZmZTRlYjNkMDY0M2VkMDMxZDlkNzQyNDkwZGUuLjI0MjQ2NzcwNmYzMDVhNzA4YTJjNGZmNzlh
NTQwZjM0Njc4N2I1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCkBAIC00NjEsNiArNDYxLDEyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVk
IG9mCiAgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIHRleHQpKTsKIH0KIAordm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0VGV4dFdpdGhNYXJrZXJzSW50b05vZGUoUGFzc1JlZlB0cjxUZXh0
PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9y
PERvY3VtZW50TWFya2VyPiYgbWFya2VycykKK3sKKyAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQor
ICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
OjpjcmVhdGUobm9kZSwgb2Zmc2V0LCB0ZXh0LCBtYXJrZXJzKSk7Cit9CisKIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwg
Y291bnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aAppbmRleCBmN2QxNzQ5NDM5NDBiNWU5YzU3ZjI1M2EwNDZmMmY4NDUxOGZjOWMwLi5iMDc5Nzc5
YmU1ZTBkODcyZDljZDgwODk4YWY4NTE4ZGNmZGI3NzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnRNYXJrZXI7CiBjbGFzcyBFZGl0aW5nU3R5
bGU7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CkBAIC04Miw2ICs4
Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NyZWF0ZUxpbmtDb21tYW5kKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpc0RpY3RhdGlvbkNvbW1hbmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29s
KTsKQEAgLTExMSw2ICsxMTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBpbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IoYm9vbCB1c2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCA9IGZhbHNlKTsKICAg
ICB2b2lkIGluc2VydExpbmVCcmVhaygpOwogICAgIHZvaWQgaW5zZXJ0VGV4dEludG9Ob2RlKFBh
c3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICB2b2lkIGluc2VydFRleHRXaXRoTWFya2Vyc0ludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVu
c2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI+JiBtYXJrZXJzKTsKICAgICB2b2lkIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoUGFzc1Jl
ZlB0cjxFbGVtZW50PiwgUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCByZWJhbGFuY2VX
aGl0ZXNwYWNlKCk7CiAgICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRp
b24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzIzNTNkZjVlZTBlZjUwYTFhYWJh
Y2I4ZDM1MDNmNmVlNTlkZDlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgor
CisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
dmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKworRGljdGF0aW9uTWFy
a2VyRGV0YWlsczo6RGljdGF0aW9uTWFya2VyRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbmFs
VGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKKyAgICA6IG1fZGljdGF0aW9uQ29udGV4
dChkaWN0YXRpb25Db250ZXh0KQorICAgICwgbV9vcmlnaW5hbFRleHQob3JpZ2luYWxUZXh0KQor
eworfQorCitQYXNzUmVmUHRyPERpY3RhdGlvbk1hcmtlckRldGFpbHM+IERpY3RhdGlvbk1hcmtl
ckRldGFpbHM6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgdWludDY0X3QgZGlj
dGF0aW9uQ29udGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpY3RhdGlvbk1hcmtl
ckRldGFpbHMob3JpZ2luYWxUZXh0LCBkaWN0YXRpb25Db250ZXh0KSk7Cit9CisgICAgCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisKK0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3RpbWVyKHRoaXMsICZEaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCisgICAgLCBtX2lzVUlBY3RpdmUoZmFsc2UpCit7Cit9
CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJB
dEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBQb3NpdGlvbiYg
ZW5kT2ZXb3JkLCBib29sKiBzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMpCit7CisgICAgaWYgKG1h
cmtlci50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNl
dCgpKSAhPSBlbmRPZldvcmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmQuY29udGFpbmVyTm9kZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgp
LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsK
KyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKKwor
ICAgIGNvbnN0IERpY3RhdGlvbk1hcmtlckRldGFpbHMqIG1hcmtlckRldGFpbHMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKj4obWFya2VyLmRldGFpbHMoKSk7Cisg
ICAgaWYgKCFtYXJrZXJEZXRhaWxzKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGN1cnJlbnRX
b3JkICE9IG1hcmtlckRldGFpbHMtPm9yaWdpbmFsVGV4dCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9hbHRlcm5hdGl2ZVVJSW5mby5yYW5nZU9mRGljdGF0ZWRUZXh0ID0gd29yZFJhbmdlOwor
ICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8uZGljdGF0aW9uQ29udGV4dCA9IG1hcmtlckRldGFpbHMt
PmRpY3RhdGlvbkNvbnRleHQoKTsKKyAgICBjb25zdCBkb3VibGUgZGljdGF0aW9uQWx0ZXJuYXRp
dmVVSURlbGF5ID0gMC4zOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGRpY3RhdGlvbkFsdGVy
bmF0aXZlVUlEZWxheSk7CisgICAgKnNob3VsZElnbm9yZU90aGVyTWFya2VycyA9IHRydWU7Cit9
CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpzdG9wVGltZXIoKQorewor
ICAgIG1fdGltZXIuc3RvcCgpOworICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8ucmFuZ2VPZkRpY3Rh
dGVkVGV4dC5jbGVhcigpOworICAgIG1fYWx0ZXJuYXRpdmVVSUluZm8uZGljdGF0aW9uQ29udGV4
dCA9IDA7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpkaXNtaXNz
KCkKK3sKKyAgICBpZiAoIW1faXNVSUFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faXNV
SUFjdGl2ZSA9IGZhbHNlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRp
c21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyOjpzdG9wUGVuZGluZ0FsdGVybmF0aXZlKCkKK3sKKyAgICBzdG9wVGlt
ZXIoKTsKKyAgICBkaXNtaXNzKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyOjp0aW1lckZpcmVkKFRpbWVyPERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4q
KQoreworICAgIGlmICghbV9hbHRlcm5hdGl2ZVVJSW5mby5yYW5nZU9mRGljdGF0ZWRUZXh0IHx8
ICFtX2FsdGVybmF0aXZlVUlJbmZvLmRpY3RhdGlvbkNvbnRleHQpCisgICAgICAgIHJldHVybjsK
KyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByYW5nZUJvdW5kaW5nQm94SW5Sb290Vmlldyht
X2ZyYW1lLT52aWV3KCksIG1fYWx0ZXJuYXRpdmVVSUluZm8ucmFuZ2VPZkRpY3RhdGVkVGV4dC5n
ZXQoKSk7CisgICAgbV9pc1VJQWN0aXZlID0gdHJ1ZTsKKyAgICBpZiAoIWJvdW5kaW5nQm94Lmlz
RW1wdHkoKSAmJiBjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnNob3dEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJKGJvdW5kaW5nQm94LCBtX2FsdGVybmF0aXZlVUlJbmZvLmRpY3RhdGlvbkNvbnRl
eHQpOworfQorCitFZGl0b3JDbGllbnQqIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
Y2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFtZS0+cGFnZSgp
LT5lZGl0b3JDbGllbnQoKSA6IDA7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyOjpoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRp
dmUpCit7CisgICAgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlID0gbV9hbHRlcm5hdGl2ZVVJSW5mby5y
YW5nZU9mRGljdGF0ZWRUZXh0LmdldCgpOworICAgIGlmICghcmFuZ2VUb1JlcGxhY2UgfHwgbV9m
cmFtZS0+ZG9jdW1lbnQoKSAhPSByYW5nZVRvUmVwbGFjZS0+b3duZXJEb2N1bWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2lzVUlBY3RpdmUgPSBmYWxzZTsKKyAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VtZW50UmFuZ2UgPSByZXBsYWNlVGV4dEluUmFuZ2UoYWx0ZXJuYXRpdmUsIHJh
bmdlVG9SZXBsYWNlLCBtX2ZyYW1lLCBmYWxzZSk7CisgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2Up
IHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJDb250cm9sbGVyID0g
cmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
OworICAgICAgICBtYXJrZXJDb250cm9sbGVyLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIH0KKyAg
ICBtX2FsdGVybmF0aXZlVUlJbmZvLnJhbmdlT2ZEaWN0YXRlZFRleHQuY2xlYXIoKTsKKyAgICBt
X2FsdGVybmF0aXZlVUlJbmZvLmRpY3RhdGlvbkNvbnRleHQgPSAwOworfQorCit2b2lkIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNv
bnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIpCit7CisgICAgaWYgKCFjbGllbnQoKSB8fCAhbWFy
a2VyIHx8IG1hcmtlci0+dHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IERpY3RhdGlvbk1hcmtlckRldGFp
bHMqIG1hcmtlckRldGFpbHMgPSBzdGF0aWNfY2FzdDxjb25zdCBEaWN0YXRpb25NYXJrZXJEZXRh
aWxzKj4obWFya2VyLT5kZXRhaWxzKCkpOworICAgIGNsaWVudCgpLT5yZW1vdmVEaWN0YXRpb25B
bHRlcm5hdGl2ZXMobWFya2VyRGV0YWlscy0+ZGljdGF0aW9uQ29udGV4dCgpKTsKK30KKyNlbmRp
ZiAvLyBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTk2NjM5MDlmNDRlODZhMTdlNDlhNTVlMjRjMmM5NTUxZjllZTQyYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gK
KyNkZWZpbmUgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkRp
Y3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgor
CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisjZGVmaW5lIFVOTEVTU19FTkFCTEVE
KGZ1bmN0aW9uQm9keSkgOworI2Vsc2UKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25C
b2R5KSBmdW5jdGlvbkJvZHkKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEVkaXRvckNsaWVudDsKK2NsYXNzIEZyYW1lOworCitjbGFzcyBEaWN0YXRpb25NYXJrZXJEZXRh
aWxzIDogcHVibGljIERvY3VtZW50TWFya2VyRGV0YWlscyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGljdGF0aW9uTWFya2VyRGV0YWlscz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
b3JpZ2luYWxUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxUZXh0OyB9CisgICAg
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGF0aW9uQ29u
dGV4dDsgfQorcHJpdmF0ZToKKyAgICBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICB1aW50NjRf
dCBtX2RpY3RhdGlvbkNvbnRleHQ7CisgICAgU3RyaW5nIG1fb3JpZ2luYWxUZXh0OworfTsKKwor
Y2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoeyB9KQorCisgICAgdm9pZCByZXNwb25kVG9NYXJr
ZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYsIGNvbnN0IFBvc2l0aW9uJiBlbmRP
ZldvcmQsIGJvb2wqIHNob3VsZElnbm9yZU90aGVyTWFya2VycykgVU5MRVNTX0VOQUJMRUQoe1VO
VVNFRF9QQVJBTShlbmRPZldvcmQpOyBVTlVTRURfUEFSQU0oc2hvdWxkSWdub3JlT3RoZXJNYXJr
ZXJzKTt9KQorCisgICAgdm9pZCBkaXNtaXNzKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQorICAgIHZv
aWQgc3RvcFBlbmRpbmdBbHRlcm5hdGl2ZSgpIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lk
IGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSkgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oYWx0ZXJuYXRpdmUpOyB9KQorICAgIHZvaWQgcmVt
b3ZlQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyKikgVU5MRVNTX0VO
QUJMRUQoeyB9KQorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorcHJpdmF0ZToKKyAg
ICBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVVSUluZm8geyAKKyAgICAgICAgRGljdGF0aW9u
QWx0ZXJuYXRpdmVVSUluZm8oKSA6IGRpY3RhdGlvbkNvbnRleHQoMCkgeyB9CisgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VPZkRpY3RhdGVkVGV4dDsKKyAgICAgICAgdWludDY0X3QgZGljdGF0
aW9uQ29udGV4dDsKKyAgICB9OworCisgICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKKyAgICB2
b2lkIHRpbWVyRmlyZWQoVGltZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyPiopOwor
ICAgIHZvaWQgc3RvcFRpbWVyKCk7CisKKyAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBUaW1lcjxE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI+IG1fdGltZXI7CisgICAgRGljdGF0aW9uQWx0
ZXJuYXRpdmVVSUluZm8gbV9hbHRlcm5hdGl2ZVVJSW5mbzsKKyAgICBib29sIG1faXNVSUFjdGl2
ZTsKKyNlbmRpZgorfTsKKworI3VuZGVmIFVOTEVTU19FTkFCTEVECisKK30KKworI2VuZGlmIC8v
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZDE4ZDJkY2E3YjA1YTVmODZjY2Y2ZjZmMjVhYmU1Mjg2MDM3Y2Y3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEaWN0YXRpb25BbHRl
cm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKHVpbnQ2NF90IHN0
YXJ0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IGNvbnRleHQpCis6IHJhbmdlU3RhcnQoc3Rh
cnQpCissIHJhbmdlTGVuZ3RoKGxlbmd0aCkKKywgZGljdGF0aW9uQ29udGV4dChjb250ZXh0KQor
eyB9CisgICAgCitEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uKCkKKzogcmFuZ2VTdGFydCgwKQorLCByYW5nZUxlbmd0aCgwKQorLCBkaWN0
YXRpb25Db250ZXh0KDApCit7IH0KKworRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbjo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbihjb25zdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uJiBhbm90aGVyKQorOiByYW5nZVN0YXJ0KGFub3RoZXIucmFuZ2VTdGFydCkKKywgcmFuZ2VM
ZW5ndGgoYW5vdGhlci5yYW5nZUxlbmd0aCkKKywgZGljdGF0aW9uQ29udGV4dChhbm90aGVyLmRp
Y3RhdGlvbkNvbnRleHQpCit7IH0KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2JhNjAxNWFl
NzUyYzNkYjU4NDZmZjNiNWVlM2ZhZWZkY2Q2MzAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbl9oCisjZGVmaW5lIERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb25faAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCisvLyBTb21lIHBsYXRmb3JtcyBwcm92aWRl
IFVJIGZvciBzdWdnZXN0aW5nIGFsdGVybmF0aXZlIGRpY3RhdGlvbiB0ZXh0LgorI2RlZmluZSBX
VEZfVVNFX0RJQ1RBVElPTl9BTFRFUk5BVElWRVMgMQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiB7CisgICAgRGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbih1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVuZ3Ro
LCB1aW50NjRfdCBjb250ZXh0KTsKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKCk7
CisgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbihjb25zdCBEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uJiBhbm90aGVyKTsKKyAgICB1aW50NjRfdCByYW5nZVN0YXJ0OworICAgIHVp
bnQ2NF90IHJhbmdlTGVuZ3RoOworICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQ7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkYWZiNWU1
ZjJlN2MwMjFiN2UwZWU2NWNhZDhkZjJkMWUwZjllODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCkBAIC0wLDAgKzEsMTMzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaWN0YXRpb25Db21tYW5kLmgiCisKKyNpbmNsdWRlICJC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkluc2VydFBhcmFncmFwaFNl
cGFyYXRvckNvbW1hbmQuaCIKKyNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgorI2luY2x1
ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEaWN0YXRpb25D
b21tYW5kOjpEaWN0YXRpb25Db21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGFsdGVy
bmF0aXZlcykKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQorICAgICwgbV90
ZXh0VG9JbnNlcnQodGV4dCkKKyAgICAsIG1fYWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlcykKK3sK
K30KKwordm9pZCBEaWN0YXRpb25Db21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbj4gYWx0ZXJuYXRpdmVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25G
b3JJbnNlcnRpb24pCit7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRT
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIGJvb2wgY2hh
bmdlU2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbiAhPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb247
CisKKyAgICBTdHJpbmcgbmV3VGV4dCA9IHRleHQ7CisgICAgaWYgKE5vZGUqIHN0YXJ0Tm9kZSA9
IHNlbGVjdGlvbkZvckluc2VydGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSkgeworICAgICAg
ICBpZiAoc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIC8v
IFNlbmQgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuIFRoZSBldmVudCBoYW5kbGVyIHdpbGwgdXBk
YXRlIHRleHQgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgICAgICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2dCA9IEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUodGV4dCk7CisgICAgICAgICAgICBzdGFydE5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChldnQsIGVjKTsKKyAgICAgICAg
ICAgIG5ld1RleHQgPSBldnQtPnRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0
cjxEaWN0YXRpb25Db21tYW5kPiBjbWQ7CisgICAgaWYgKG5ld1RleHQgPT0gdGV4dCkKKyAgICAg
ICAgY21kID0gRGljdGF0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBuZXdUZXh0LCBhbHRl
cm5hdGl2ZXMpOworICAgIGVsc2UKKyAgICAgICAgLy8gSWYgdGhlIHRleHQgd2FzIG1vZGlmaWVk
IGJlZm9yZSBpbnNlcnRpb24sIHRoZSBsb2NhdGlvbiBvZiBkaWN0YXRpb24gYWx0ZXJuYXRpdmVz
CisgICAgICAgIC8vIHdpbGwgbm90IGJlIHZhbGlkIGFueW1vcmUuIFdlIHdpbGwganVzdCBkcm9w
IHRoZSBhbHRlcm5hdGl2ZXMuCisgICAgICAgIGNtZCA9IERpY3RhdGlvbkNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCwgbmV3VGV4dCwgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+
KCkpOworCisgICAgaWYgKGNoYW5nZVNlbGVjdGlvbikgeworICAgICAgICBjbWQtPnNldFN0YXJ0
aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CisgICAgICAgIGNtZC0+c2V0RW5k
aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CisgICAgfQorICAgIGFwcGx5Q29t
bWFuZChjbWQpOworICAgIGlmIChjaGFuZ2VTZWxlY3Rpb24pIHsKKyAgICAgICAgY21kLT5zZXRF
bmRpbmdTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbik7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS0+c2V0U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pOworICAgIH0KK30KKwordm9pZCBE
aWN0YXRpb25Db21tYW5kOjpkb0FwcGx5KCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwor
ICAgIHNpemVfdCBuZXdsaW5lOworICAgIHdoaWxlICgobmV3bGluZSA9IG1fdGV4dFRvSW5zZXJ0
LmZpbmQoJ1xuJywgb2Zmc2V0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgaWYgKG5ld2xpbmUg
IT0gb2Zmc2V0KQorICAgICAgICAgICAgaW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhvZmZz
ZXQsIG5ld2xpbmUgLSBvZmZzZXQpOworICAgICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
KTsKKyAgICAgICAgb2Zmc2V0ID0gbmV3bGluZSArIDE7CisgICAgfQorICAgIGlmICghb2Zmc2V0
KQorICAgICAgICBpbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKDAsIG1fdGV4dFRvSW5zZXJ0
Lmxlbmd0aCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV90ZXh0
VG9JbnNlcnQubGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW5ndGggIT0gb2Zmc2V0KQorICAgICAg
ICAgICAgaW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhvZmZzZXQsIGxlbmd0aCAtIG9mZnNl
dCk7CisgICAgfQorfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRo
b3V0TmV3bGluZXMoc2l6ZV90IGxpbmVTdGFydCwgc2l6ZV90IGxpbmVMZW5ndGgpCit7CisgICAg
VmVjdG9yPERvY3VtZW50TWFya2VyPiBkb2N1bWVudE1hcmtlcnM7CisgICAgY29sbGVjdERpY3Rh
dGlvbk1hcmtlcnNJblJhbmdlKGxpbmVTdGFydCwgbGluZUxlbmd0aCwgZG9jdW1lbnRNYXJrZXJz
KTsKKyAgICBSZWZQdHI8SW5zZXJ0VGV4dENvbW1hbmQ+IGNvbW1hbmQgPSBJbnNlcnRUZXh0Q29t
bWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIG1fdGV4dFRvSW5zZXJ0LnN1YnN0cmluZyhsaW5lU3Rh
cnQsIGxpbmVMZW5ndGgpLCBkb2N1bWVudE1hcmtlcnMpOworICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKGNvbW1hbmQsIGVuZGluZ1NlbGVjdGlvbigpKTsKK30KKwordm9pZCBEaWN0YXRpb25D
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQoreworICAgIGlmICghY2FuQXBwZW5k
TmV3TGluZUZlZWRUb1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQ29tbWFu
ZDo6Y29sbGVjdERpY3RhdGlvbk1hcmtlcnNJblJhbmdlKHNpemVfdCByYW5nZVN0YXJ0LCBzaXpl
X3QgcmFuZ2VMZW5ndGgsIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uJiBhbHRlcm5hdGl2ZSA9IG1f
YWx0ZXJuYXRpdmVzW2ldOworICAgICAgICBpZiAoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCA+PSBy
YW5nZVN0YXJ0ICYmIChhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ICsgYWx0ZXJuYXRpdmUucmFuZ2VM
ZW5ndGgpIDw9IHJhbmdlU3RhcnQgKyByYW5nZUxlbmd0aCkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgbWFya2VyU3RhcnRPZmZzZXQgPSBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0IC0gcmFuZ2VTdGFy
dDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hcmtlckVuZE9mZnNldCA9IG1hcmtlclN0YXJ0T2Zm
c2V0ICsgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGg7CisgICAgICAgICAgICBtYXJrZXJzLmFwcGVu
ZChEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBt
YXJrZXJTdGFydE9mZnNldCwgbWFya2VyRW5kT2Zmc2V0LCBEaWN0YXRpb25NYXJrZXJEZXRhaWxz
OjpjcmVhdGUobV90ZXh0VG9JbnNlcnQuc3Vic3RyaW5nKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQs
IGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoKSwgYWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4dCkp
KTsKKyAgICAgICAgICAgIG1hcmtlcnMuYXBwZW5kKERvY3VtZW50TWFya2VyKERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uLCBtYXJrZXJTdGFydE9mZnNldCwgbWFya2VyRW5k
T2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0YXRpb25Db21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUxZjBhMzliY2Y4ZWExY2JlY2VkMWFm
NWEyNGY4NzVmNmY1YTM3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGljdGF0aW9uQ29tbWFuZC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaWN0YXRpb25Db21tYW5kX2gK
KyNkZWZpbmUgRGljdGF0aW9uQ29tbWFuZF9oCisKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29t
bWFuZC5oIgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKKworY2xhc3MgRGljdGF0
aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZl
Y3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBhbHRlcm5hdGl2ZXMsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaWN0YXRpb25Db21tYW5kKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
aWN0YXRpb25Db21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgYWx0ZXJu
YXRpdmVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWN0YXRpb25Db21t
YW5kKGRvY3VtZW50LCB0ZXh0LCBhbHRlcm5hdGl2ZXMpKTsKKyAgICB9CisKKyAgICBEaWN0YXRp
b25Db21tYW5kKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGlj
dGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGFsdGVybmF0aXZlcyk7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGRvQXBwbHkoKTsKKworICAgIHZvaWQgaW5zZXJ0VGV4dFJ1bldpdGhvdXROZXds
aW5lcyhzaXplX3QgbGluZVN0YXJ0LCBzaXplX3QgbGluZUxlbmd0aCk7CisgICAgdm9pZCBpbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKKyAgICB2b2lkIGNvbGxlY3REaWN0YXRpb25NYXJrZXJz
SW5SYW5nZShzaXplX3QgcmFuZ2VTdGFydCwgc2l6ZV90IHJhbmdlTGVuZ3RoLCBWZWN0b3I8RG9j
dW1lbnRNYXJrZXI+JiBtYXJrZXJzKTsKKworICAgIFN0cmluZyBtX3RleHRUb0luc2VydDsKKyAg
ICBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4gbV9hbHRlcm5hdGl2ZXM7Cit9
OworfQorCisjZW5kaWYgLy8gRGljdGF0aW9uQ29tbWFuZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKaW5kZXggNzJlMjFmYTI0YTU4NTU5MTRmY2I4ZTQ4M2M5MmY0ZTM3NmFiZWFiOS4uZGZl
ZWNjNGM1YWRlNWEwYzRiZmZiYTAyM2M1NWNmZjExZTJlMTRkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCkBAIC00MSw2
ICs0Miw4IEBACiAjaW5jbHVkZSAiQ3JlYXRlTGlua0NvbW1hbmQuaCIKICNpbmNsdWRlICJEZWxl
dGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5o
IgorI2luY2x1ZGUgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkRpY3RhdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdGluZ1RleHQu
aCIKQEAgLTQ3NiwxMyArNDc5LDEzIEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTaG93RGVsZXRlSW50
ZXJmYWNlKEhUTUxFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIHJldHVybiBjbGllbnQoKSAm
JiBjbGllbnQoKS0+c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShlbGVtZW50KTsKIH0KIAotdm9p
ZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uKQordm9pZCBFZGl0b3I6Om5vdGlmeUNvbXBvbmVudHNPbkNoYW5nZWRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVj
dGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmIChjbGllbnQoKSkK
ICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9mcmFtZSk7CiAg
ICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwogICAgIG1fZGVsZXRlQnV0dG9u
Q29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0
aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rp
b24pCkBAIC03ODQsOCArNzg3LDEwIEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNz
UmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBjbWQpCiAKICAgICBtX3NwZWxsaW5nQ29ycmVj
dG9yLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogCisgICAgCiAgICAgLy8g
RG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4g
IFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgotICAgIGNoYW5nZVNl
bGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7CisgICAgRnJh
bWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IGNtZC0+aXNEaWN0YXRp
b25Db21tYW5kKCkgPyBGcmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkIDogMDsKKyAg
ICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAog
ICAgIGlmICghY21kLT5wcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpKQogICAgICAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+Y2xlYXJUeXBpbmdTdHlsZSgpOwpAQCAtODExLDcgKzgxNiw3IEBAIHZvaWQg
RWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlv
bj4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhjbWQtPnN0
YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpLCBjbWQtPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1l
bnQoKSk7CiAgICAgCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5zdGFy
dGluZ1NlbGVjdGlvbigpKTsKLSAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2Vs
ZWN0aW9uLCB0cnVlLCB0cnVlKTsKKyAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3
U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6
Q2xlYXJUeXBpbmdTdHlsZSk7CiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvVW5h
cHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogICAgIAogICAgIG1fbGFzdEVkaXRDb21tYW5kID0g
MDsKQEAgLTgyNyw3ICs4MzIsNyBAQCB2b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhQYXNz
UmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IGNtZCkKICAgICBkaXNwYXRjaEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwg
Y21kLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwotICAgIGNoYW5nZVNl
bGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIHRydWUsIHRydWUpOworICAgIGNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpDbG9z
ZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlKTsKICAgICAKICAgICBt
X2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgICAgaWYgKGNsaWVudCgpKQpAQCAtODQ1LDYgKzg1MCw4
IEBAIEVkaXRvcjo6RWRpdG9yKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fa2lsbFJpbmcoYWRvcHRQ
dHIobmV3IEtpbGxSaW5nKSkKICAgICAsIG1fc3BlbGxDaGVja2VyKGFkb3B0UHRyKG5ldyBTcGVs
bENoZWNrZXIoZnJhbWUpKSkKICAgICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IoYWRvcHRQdHIobmV3
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1fZGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihhZG9w
dFB0cihuZXcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihmcmFtZSwgbV9zcGVsbGluZ0NvcnJl
Y3Rvci5nZXQoKSwgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuZ2V0KCkpKSkKICAg
ICAsIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZChmYWxzZSkKICAgICAsIG1fZGVm
YXVsdFBhcmFncmFwaFNlcGFyYXRvcihFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc0RpdikKIHsK
QEAgLTg3Miw2ICs4NzksMTEgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIG1fZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCAwLCBUZXh0RXZlbnRJbnB1dENv
bXBvc2l0aW9uKTsKIH0KIAorYm9vbCBFZGl0b3I6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQoreworICAgIHJl
dHVybiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlRGljdGF0aW9uSW5wdXRFdmVudCh0
ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIHRyaWdnZXJpbmdFdmVudCk7Cit9CisKIGJvb2wg
RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgVGV4dEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQp
CiB7CiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpAQCAtOTA2LDEyICs5MTgsMTYgQEAgYm9vbCBF
ZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSBzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQoKTsKIAogICAgICAgICAgICAgLy8gSW5zZXJ0IHRo
ZSB0ZXh0Ci0gICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpPcHRpb25zIG9wdGlvbnMgPSAwOwot
ICAgICAgICAgICAgaWYgKHNlbGVjdEluc2VydGVkVGV4dCkKLSAgICAgICAgICAgICAgICBvcHRp
b25zIHw9IFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dDsKLSAgICAgICAgICAgIGlm
IChhdXRvY29ycmVjdGlvbldhc0FwcGxpZWQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBU
eXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsKLSAgICAgICAgICAg
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQuZ2V0KCksIHRleHQsIHNlbGVjdGlv
biwgb3B0aW9ucywgdHJpZ2dlcmluZ0V2ZW50ICYmIHRyaWdnZXJpbmdFdmVudC0+aXNDb21wb3Np
dGlvbigpID8gVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uQ29uZmlybSA6IFR5cGluZ0Nv
bW1hbmQ6OlRleHRDb21wb3NpdGlvbk5vbmUpOworICAgICAgICAgICAgaWYgKHRyaWdnZXJpbmdF
dmVudC0+aXNEaWN0YXRpb24oKSkKKyAgICAgICAgICAgICAgICBEaWN0YXRpb25Db21tYW5kOjpp
bnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQtPmRpY3RhdGlv
bkFsdGVybmF0aXZlcygpLCBzZWxlY3Rpb24pOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgVHlwaW5nQ29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKKyAgICAgICAgICAg
ICAgICBpZiAoc2VsZWN0SW5zZXJ0ZWRUZXh0KQorICAgICAgICAgICAgICAgICAgICBvcHRpb25z
IHw9IFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dDsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkKQorICAgICAgICAgICAgICAgICAgICBvcHRpb25z
IHw9IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yOworICAgICAg
ICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQuZ2V0KCksIHRleHQs
IHNlbGVjdGlvbiwgb3B0aW9ucywgdHJpZ2dlcmluZ0V2ZW50ICYmIHRyaWdnZXJpbmdFdmVudC0+
aXNDb21wb3NpdGlvbigpID8gVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uQ29uZmlybSA6
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbk5vbmUpOworICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBSZXZlYWwgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCiAgICAgICAgICAgICBp
ZiAoRnJhbWUqIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCkBAIC0yMjI1LDcgKzIy
NDEsMTIgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1aXZhbGVudCgpLCBl
bmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgZG9jdW1lbnQtPm1hcmtlcnMo
KS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
ZyB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIC8vIFdoZW4gd2UgcmVtb3ZlIGRpY3Rh
dGlvbiBtYXJrZXJzLCB3ZSBhbHNvIG5lZWQgdG8gdGVsbCBjbGllbnQgdG8gcmVtb3ZlIGFueSBk
aWN0YXRpb24gYWx0ZXJuYXRpdmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4gCisgICAg
VmVjdG9yPERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uTWFya2VycyA9IGRvY3VtZW50LT5tYXJr
ZXJzKCktPm1hcmtlcnNJblJhbmdlKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaWN0YXRp
b25NYXJrZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlci0+cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGRpY3RhdGlvbk1hcmtlcnNbaV0p
OworCisgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9u
SW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBkb2N1bWVudC0+bWFy
a2VycygpLT5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCkBAIC0yMzY2LDEw
ICsyMzg3LDE0IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChjb3JyZWN0aW9uKTsKIH0KIAordm9pZCBFZGl0b3I6OmhhbmRs
ZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSkK
K3sKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+aGFuZGxlQWNjZXB0ZWRB
bHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSk7Cit9CiAKLXZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVj
dGlvblBhbmVsQXNJZ25vcmVkKCkKK3ZvaWQgRWRpdG9yOjpkaXNtaXNzQWx0ZXJuYXRpdmVUZXh0
VUkoKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmRpc21pc3MoUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNp
ZGVWaXNpYmxlQXJlYShjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0yNTEwLDcg
KzI1MzUsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Om5leHRWaXNpYmxlUmFuZ2UoUmFu
Z2UqIGN1cnJlbnRSYW5nZSwgY29uc3QgU3RyaW5nJiB0YQogICAgIHJldHVybiBmaXJzdFZpc2li
bGVSYW5nZSh0YXJnZXQsIG9wdGlvbnMpOwogfQogCi12b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0
aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9v
bCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKQordm9pZCBFZGl0b3I6OmNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7CiAgICAg
Ly8gSWYgdGhlIG5ldyBzZWxlY3Rpb24gaXMgb3JwaGFuZWQsIHRoZW4gZG9uJ3QgdXBkYXRlIHRo
ZSBzZWxlY3Rpb24uCiAgICAgaWYgKG5ld1NlbGVjdGlvbi5zdGFydCgpLmlzT3JwaGFuKCkgfHwg
bmV3U2VsZWN0aW9uLmVuZCgpLmlzT3JwaGFuKCkpCkBAIC0yNTIxLDE0ICsyNTQ2LDggQEAgdm9p
ZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBuZXdTZWxlY3Rpb24sIGIKICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUgaW52
YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVjZSBz
b21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1PiBT
b21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNlbGVj
dGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCiAgICAgYm9vbCBzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25z
ID0gMDsKLSAgICAgICAgaWYgKGNsb3NlVHlwaW5nKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBG
cmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmc7Ci0gICAgICAgIGlmIChjbGVhclR5cGluZ1N0eWxl
KQotICAgICAgICAgICAgb3B0aW9ucyB8PSBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHls
ZTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAg
ICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9u
cyk7Ci0gICAgfQogCiAgICAgLy8gU29tZSBlZGl0aW5nIG9wZXJhdGlvbnMgY2hhbmdlIHRoZSBz
ZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91dCBhZmZlY3RpbmcgaXRzIHBvc2l0aW9uIHdpdGhpbiB0
aGUgRE9NLgogICAgIC8vIEZvciBleGFtcGxlIHdoZW4geW91IHByZXNzIHJldHVybiBpbiB0aGUg
Zm9sbG93aW5nICh0aGUgY2FyZXQgaXMgbWFya2VkIGJ5IF4pOgpAQCAtMjYxNSw3ICsyNjM0LDgg
QEAgdm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlKQogCiB2
b2lkIEVkaXRvcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlKQogewotICAgIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBkaXNtaXNzQWx0ZXJuYXRpdmVU
ZXh0VUkoKTsKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+ZGlzbWlzcygp
OwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnRleHRGaWVsZERpZEVuZEVk
aXRpbmcoZSk7CiB9CkBAIC0yODg1LDcgKzI5MDUsNyBAQCB2b2lkIEVkaXRvcjo6c2V0TWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcpCiAKIHZvaWQgRWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBt
X3NwZWxsaW5nQ29ycmVjdG9yLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
KyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnN0b3BQZW5kaW5nQWx0ZXJuYXRpdmVz
KG9sZFNlbGVjdGlvbik7CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIEZyYW1l
U2VsZWN0aW9uOjpDbG9zZVR5cGluZzsKICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKQEAg
LTI5MzUsNyArMjk1NSw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhCiAgICAgaWYgKCFpc0Nv
bnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwog
Ci0gICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOworICAgIG5vdGlm
eUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKIH0K
IAogc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAppbmRleCAzYzI1NDRhNzE2Y2FmZDhkOGQzNGE5ZjMyMGFiYTU5ODUxZmI3YTZm
Li5hNGExNTZlMjAwZTZmNTdmYmU5NzdkYWY1Mjc5MDk1NjRhNmIwYjdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vz
c1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAi
RWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgpAQCAtNDYsOSArNDcs
MTEgQEAgdHlwZWRlZiBpbnQgTlNXcml0aW5nRGlyZWN0aW9uOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI7CiBjbGFzcyBDbGlwYm9hcmQ7
CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXI7CitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7CiBjbGFzcyBFZGl0Q29t
bWFuZDsKIGNsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBFZGl0b3JDbGllbnQ7
CkBAIC0xMzIsOCArMTM1LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkU2hvd0RlbGV0ZUlu
dGVyZmFjZShIVE1MRWxlbWVudCopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2Uo
UmFuZ2UqKSBjb25zdDsKICAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0eVNl
dCosIFJhbmdlKik7Ci0gICAgCi0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisKICAgICB2b2lkIHJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24p
OwogCiAgICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKGludCBwcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKQEAgLTIwMyw2ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpOwog
ICAgIGJvb2wgaW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3Qg
U3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIFRleHRFdmVudCogdHJpZ2dlcmluZ0V2
ZW50KTsKKyAgICBib29sIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBW
ZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZl
cywgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCk7CiAgICAgYm9vbCBpbnNlcnRMaW5lQnJlYWsoKTsK
ICAgICBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOwogICAgIApAQCAtMzIyLDcgKzMy
NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKICAg
ICAvLyBJZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJlY3Rpb24gcGFu
ZWwsIGNvcnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0IG1lYW5zIHRo
YXQgdXNlciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KICAgICB2b2lkIGhhbmRsZUNvcnJlY3Rp
b25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwotICAgIHZvaWQgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOworICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWREaWN0
YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlKTsKKyAgICB2b2lkIGRp
c21pc3NBbHRlcm5hdGl2ZVRleHRVSSgpOwogCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hT
dHlsZSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc21h
cnRSZXBsYWNlKTsKQEAgLTQwMiw2ICs0MDYsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxLaWxs
UmluZz4gbV9raWxsUmluZzsKICAgICBPd25QdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tl
cjsKICAgICBPd25QdHI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9zcGVsbGluZ0Nv
cnJlY3RvcjsKKyAgICBPd25QdHI8RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyPiBtX2Rp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsKKyAgICBPd25QdHI8QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOwogICAgIFZpc2libGVTZWxl
Y3Rpb24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVk
OwogICAgIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvciBtX2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0
b3I7CkBAIC00MjMsNyArNDI5LDggQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBs
YXN0VmlzaWJsZVJhbmdlKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKICAgICBQYXNzUmVm
UHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwgY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMpOwogCi0gICAgdm9pZCBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFy
VHlwaW5nU3R5bGUpOworICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVj
dGlvbk9wdGlvbnMpOworICAgIHZvaWQgbm90aWZ5Q29tcG9uZW50c09uQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpT
ZXRTZWxlY3Rpb25PcHRpb25zKTsKIAogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmlu
ZGV4IGI0ZDkyZTMzYjI0Nzc1ZDdhMzNhNmRjZmRjZjQ3NWI5ZjY3YjRjNDMuLjE1MmIyMDRlN2Qz
YjY5MGJlNzE3NGM2MDliOTkxMDAxZTUyM2Q5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIENsZWFy
VHlwaW5nU3R5bGUgPSAxIDw8IDIsCiAgICAgICAgIFNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCA9
IDEgPDwgMywKICAgICAgICAgRG9Ob3RTZXRGb2N1cyA9IDEgPDwgNCwKKyAgICAgICAgRGljdGF0
aW9uVHJpZ2dlcmVkID0gMSA8PCA1CiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2lnbmVkIFNldFNl
bGVjdGlvbk9wdGlvbnM7IC8vIFVuaW9uIG9mIHZhbHVlcyBpbiBTZXRTZWxlY3Rpb25PcHRpb24g
YW5kIEVVc2VyVHJpZ2dlcmVkCiAgICAgc3RhdGljIGlubGluZSBFVXNlclRyaWdnZXJlZCBzZWxl
Y3Rpb25PcHRpb25zVG9Vc2VyVHJpZ2dlcmVkKFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQuY3BwCmluZGV4IGUwOTY1ZTBmNjU1ZjY3MDZiNzA0Y2Y1OGZiODRlOGU2ZDI3ZTk4MTYuLjZk
YjQ3YzlmZTJhNGQ0ODg0MTMxYzEzZjVlYzhhZmE0NWUwMDA0NjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpA
QCAtNDUsNiArNDYsMjIgQEAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2kKICAgICBBU1NFUlQoIW1f
dGV4dC5pc0VtcHR5KCkpOwogfQogCitJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0
LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtl
cnMpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9u
b2RlKG5vZGUpCisgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX3RleHQodGV4dCkKK3sK
KyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPD0gbV9ub2RlLT5sZW5n
dGgoKSk7CisgICAgQVNTRVJUKCFtX3RleHQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBEb2N1bWVu
dE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKKyAgICAgICAgbV9tYXJrZXJzLmFwcGVuZChE
b2N1bWVudE1hcmtlcihtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSArIG9mZnNl
dCwgbWFya2VyLmVuZE9mZnNldCgpICsgb2Zmc2V0LCBtYXJrZXIuZGV0YWlscygpKSk7CisgICAg
fQorfQorICAgIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsK
ICAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCkBAIC01OSw2ICs3NiwxMCBA
QCB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CiAgICAgbV9ub2RlLT5pbnNlcnREYXRhKG1fb2Zmc2V0LCBtX3RleHQsIGVjKTsK
IAorICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IGRvY3Vt
ZW50KCktPm1hcmtlcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbWFya2Vycy5z
aXplKCk7ICsraSkKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci0+YWRkTWFya2VyKG1fbm9kZS5n
ZXQoKSwgbV9tYXJrZXJzW2ldKTsKKwogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPm5vZGVU
ZXh0Q2hhbmdlTm90aWZpY2F0aW9uKG1fbm9kZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6
QVhUZXh0SW5zZXJ0ZWQsIG1fb2Zmc2V0LCBtX3RleHQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAppbmRleCBmNjg1NDcyMWJh
MWExYjViOTM1NzhmNzljYTc4OTUyNmMxODYzMWUzLi41MjJlMWUyYWQ3Njg3NGQ3OTg3YzZjM2E4
ZTNhMmMwMDlhNjllOThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERvY3VtZW50TWFya2VyOwogY2xhc3MgVGV4dDsKIAogY2xhc3MgSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CkBAIC0z
OSw4ICs0MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQsIHRleHQpKTsKICAgICB9CiAKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQsIHRl
eHQsIG1hcmtlcnMpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KTsKKyAgICBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4
dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHko
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJREU7CkBAIC01
Miw2ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFRleHQ+IG1fbm9kZTsKICAgICB1bnNp
Z25lZCBtX29mZnNldDsKICAgICBTdHJpbmcgbV90ZXh0OworICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcj4gbV9tYXJrZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAppbmRleCAzOWZhMmE4OTdmYjZj
MmE3YTc1YzdhZjVkMzY4MjlhMDVjNDM2NjAyLi45M2U5YjEzMjdlNDI3ZmU3MDgwMzdiNmE1ZmMx
MmRiOTdmMDcwYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRl
eHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgi
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCiAjaW5jbHVkZSAi
RWRpdG9yLmgiCkBAIC00Niw2ICs0NywxNSBAQCBJbnNlcnRUZXh0Q29tbWFuZDo6SW5zZXJ0VGV4
dENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvbwogewog
fQogCitJbnNlcnRUZXh0Q29tbWFuZDo6SW5zZXJ0VGV4dENvbW1hbmQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1h
cmtlcnMpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKKyAgICAsIG1fdGV4
dCh0ZXh0KQorICAgICwgbV9zZWxlY3RJbnNlcnRlZFRleHQoZmFsc2UpCisgICAgLCBtX3JlYmFs
YW5jZVR5cGUoUmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMpCisgICAgLCBt
X21hcmtlcnMobWFya2VycykKK3sKK30KKwogUG9zaXRpb24gSW5zZXJ0VGV4dENvbW1hbmQ6OnBv
c2l0aW9uSW5zaWRlVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHApCiB7CiAgICAgUG9zaXRpb24g
cG9zID0gcDsKQEAgLTE2NSw3ICsxNzUsMTAgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IHN0YXJ0UG9zaXRpb24uY29u
dGFpbmVyVGV4dCgpOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBvZmZzZXQgPSBzdGFydFBvc2l0
aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogCi0gICAgICAgIGluc2VydFRleHRJbnRvTm9k
ZSh0ZXh0Tm9kZSwgb2Zmc2V0LCBtX3RleHQpOworICAgICAgICBpZiAobV9tYXJrZXJzLnNpemUo
KSkKKyAgICAgICAgICAgIGluc2VydFRleHRXaXRoTWFya2Vyc0ludG9Ob2RlKHRleHROb2RlLCBv
ZmZzZXQsIG1fdGV4dCwgbV9tYXJrZXJzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5z
ZXJ0VGV4dEludG9Ob2RlKHRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAgICAgICAgIGVuZFBv
c2l0aW9uID0gUG9zaXRpb24odGV4dE5vZGUsIG9mZnNldCArIG1fdGV4dC5sZW5ndGgoKSk7CiAK
ICAgICAgICAgaWYgKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxp
bmdXaGl0ZXNwYWNlcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5oCmluZGV4IDFhZGJhNDRhZTI3NzA1YjYwMWFhMmQxYWI0MjVhZjY1NDc1ODQ5YmQuLjRjZDBm
ZTAwNTE3NjExNGFjMDI0Yzk5YTUyOGNmZDJiNmIwYzk4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKKwogY2xhc3MgSW5zZXJ0VGV4dENv
bW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgogICAgIGVudW0g
UmViYWxhbmNlVHlwZSB7CkBAIC00Myw5ICs0NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQsIHRleHQsIHNlbGVjdElu
c2VydGVkVGV4dCwgcmViYWxhbmNlVHlwZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc2VydFRleHRDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydFRleHRDb21tYW5kKGRvY3VtZW50
LCB0ZXh0LCBtYXJrZXJzKSk7CisgICAgfQorCiBwcml2YXRlOgogCiAgICAgSW5zZXJ0VGV4dENv
bW1hbmQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRU
ZXh0LCBSZWJhbGFuY2VUeXBlKTsKKyAgICBJbnNlcnRUZXh0Q29tbWFuZChEb2N1bWVudCosIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2Vycyk7
CiAKICAgICB2b2lkIGRlbGV0ZUNoYXJhY3RlcigpOwogCkBAIC02MSw2ICs2OSw3IEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKICAgICBib29sIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0Owog
ICAgIFJlYmFsYW5jZVR5cGUgbV9yZWJhbGFuY2VUeXBlOworICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcj4gbV9tYXJrZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5j
cHAKaW5kZXggNGZmZGM3Zjk1NmMwOTc3NjNkMmIzZTRhMTIwODdkNmYwNDc0NzFjYS4uYTBlNzU1
ODNmY2YxMGM2ODZmMDU2MzRlNGFmNWYyMTQ5OWIxMGQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0y
Nyw2ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKQEAgLTM0LDcgKzM2LDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKQEAgLTE1NSw3ICsxNTYsNyBAQCBib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pcwogCiB2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VU
b1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAgRmxvYXRSZWN0IGJv
dW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwor
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KG1f
ZnJhbWUtPnZpZXcoKSwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwogICAgIGlmIChib3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwpAQCAtMTk5
LDQzICsyMDAsOSBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29y
cmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbgogICAgIGlmICghbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGlmIChlYykKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxh
Y2VtZW50UmFuZ2UgPSByZXBsYWNlVGV4dEluUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCksIG1fZnJhbWUsIHRydWUpOworICAgIGlmICghcmVwbGFjZW1lbnRSYW5nZSkKICAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkpKTsKLQotICAgIC8vIEFm
dGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5l
ZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBIb3dldmVyLCBvbmNlIHRo
ZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQg
aXMgbm90IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUg
cmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdl
VG9CZVJlcGxhY2VkCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRo
ZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoCi0gICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRo
aXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJhbmdlCi0gICAgLy8gd2hpY2gg
c3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBv
ZiByYW5nZVRvQmVSZXBsYWNlZC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9m
ZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVS
ZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQ
b3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+
c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwg
c3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUYWtl
IG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFk
ZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgaW50IGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChj
b3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOwotCi0gICAgLy8g
Q2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50
IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5jbG9uZVJhbmdlKGVjKTsKLSAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZW1lbnRTdHJpbmcpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkp
OwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlv
blN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1l
bnRTdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxh
Y2VtZW50UmFuZ2UuZ2V0KCkpOwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50
IHN1Y2NlZWRlZC4KLSAgICBpZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZW1lbnRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQogICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IG1hcmtlclR5cGVzVG9BZGQu
c2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0yOTgs
NyArMjY1LDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmUKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwogICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gcmFuZ2VCb3VuZGluZ0JveEluUm9vdFZpZXcobV9mcmFtZS0+dmlldygpLCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwogICAgICAgICBpZiAoIWJvdW5k
aW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBh
bmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7CiAgICAgfQpAQCAtMzE2LDcgKzI4Myw3
IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlCiAgICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9u
ID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsKICAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwog
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSByYW5nZUJvdW5kaW5nQm94SW5Sb290VmlldyhtX2ZyYW1lLT52aWV3KCksIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CiAgICAgICAgIGlm
ICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3Jy
ZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gs
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3Vn
Z2VzdGlvbnMpOwogICAgIH0KQEAgLTM2MCw3MSArMzI3LDI3IEBAIHZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmlu
ZyYgY29yCiBib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVu
dCgpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKLX0KLQotRmxvYXRS
ZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNv
bnN0IFJhbmdlKiByYW5nZSkgY29uc3QKLXsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1l
LT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0g
ICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwotICAgIHJhbmdlLT50ZXh0UXVhZHModGV4
dFF1YWRzKTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIHNpemVfdCBzaXplID0g
dGV4dFF1YWRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgYm91bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsK
LSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0
KSk7Ci19ICAgICAgICAKK30gICAgICAKIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9s
ZFNlbGVjdGlvbikKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRv
TWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUG9z
aXRpb24mIGVuZE9mV29yZFBvc2l0aW9uLCBib29sKiBzaG91bGRJZ25vcmVPdGhlck1hcmtlcnMp
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRo
ZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVs
Ci0gICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0
aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQotICAgIC8vIHVuZGVzaXJlZCBhdXRvY29y
cmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNv
bmZpcm0gdGhhdAotICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBv
ZiBhIHdvcmQuCi0gICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50
U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3Io
bWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAg
ICAgIHJldHVybjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1
cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICAKLSAgICAvLyBDcmVhdGluZyBhIFZpc2libGUg
cG9zaXRpb24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJlIGlzIG5vCi0gICAgLy8gZ3VhcmFu
dGVlIHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxpZC4KLSAgICBpZiAoc2VsZWN0aW9u
UG9zaXRpb24uaXNOdWxsKCkpCisgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVh
dGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUs
IG1hcmtlci5lbmRPZmZzZXQoKSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9
IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwotICAg
IGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1
aXZhbGVudCgpOwotICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTm9kZSogbm9k
ZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRp
b24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4g
bWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihub2RlKTsK
LSAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1l
ckZvcihtYXJrZXIsIGVuZE9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCksIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQo
KSk7Ci0gICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0
KCkpOwotICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
ID0gd29yZFJhbmdlOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50
TWFya2VyOjpTcGVsbGluZykKLSAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIo
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50
U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgc3RhcnRDb3JyZWN0
aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOworICAgIGlmIChtYXJrZXIudHlwZSgpID09IERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1l
cihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gbWFya2VyLmRlc2NyaXB0aW9uKCk7CisgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKICAgICB9CisgICAg
KnNob3VsZElnbm9yZU90aGVyTWFya2VycyA9IHRydWU7CiB9CiAKIHZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENv
bW1hbmQqIGNvbW1hbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCmluZGV4IGRmZDA2MDhiMjM3ZjIwNTY5YmNiMTUyMWZk
NThkMzQ0YWZhZGNlYzcuLmIyYTYyZGFhZjFmZjZjYTBjNGUxOTI2NWIxOWM1M2E1NzVmYjg0NTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oCkBAIC04MSw3ICs4MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BDb3Jy
ZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQogCiAgICAgdm9pZCBkaXNtaXNz
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHt9KQot
ICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
KSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKICAgICB2b2lkIHNob3coUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBsYWNlKTsgVU5VU0VEX1BB
UkFNKHJlcGxhY2VtZW50KTsgfSkKIAogICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZv
KGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKSBVTkxFU1NfRU5BQkxF
RCh7fSkKQEAgLTkxLDcgKzkwLDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBs
aWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCiAgICAg
dm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCopIFVOTEVT
U19FTkFCTEVEKHsgfSkKICAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENv
bW1hbmRDb21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsgfSkKLSAgICB2b2lkIHJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKSBV
TkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQogCiAgICAgdm9p
ZCBzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0
aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQogICAg
IHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb25BZnRlclR5cGluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcpOyB9KQpAQCAtMTE0LDE2ICsxMTIsMjAgQEAgcHVibGljOgogICAgIGJvb2wg
cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tp
bmdSZXN1bHQqLCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5n
VG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVSZXBs
YWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7
CiAgICAgdm9pZCBkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ob3JpZ2luYWxTdHJpbmcpOyB9KQogCisgICAgdm9pZCByZXNwb25kVG9NYXJrZXJBdEVu
ZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQ
b3NpdGlvbiwgYm9vbCogc2hvdWxkSWdub3JlT3RoZXJNYXJrZXJzKSBVTkxFU1NfRU5BQkxFRCh7
VU5VU0VEX1BBUkFNKGVuZE9mV29yZFBvc2l0aW9uKTsgVU5VU0VEX1BBUkFNKHNob3VsZElnbm9y
ZU90aGVyTWFya2Vycyk7fSkKKwogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKIHByaXZh
dGU6CiAgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7
CiAKLSAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3Io
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQgJiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkgCi0gICAgICAgICAg
ICAgICAgIHx8IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYg
c3RhdGljX2Nhc3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRPZmZzZXQpOworICAg
ICAgICByZXR1cm4gKCgobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbigpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICB8
fCBtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nh
c3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkpID09IGVuZE9mZnNldCk7CiAgICAgfQogCisgICAg
U3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwor
CiAgICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKICAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4
dENoZWNrZXIoKTsKICAgICBGbG9hdFJlY3Qgcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFu
Z2UqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4
IDlhZTM5NTU0MWE4M2M1ZTI0YjA5ZmU0YjQ1YzBhOWFmYjEyZmE3OGYuLmJmZmQyMjcyZGM3N2Jj
YWRjNmI0OWFiOWNmOTI4ZjZmMmUzZTJmODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcApAQCAtNDgsMTggKzQ4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgYm9vbCBjYW5BcHBlbmROZXdMaW5l
RmVlZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgTm9kZSogbm9k
ZSA9IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+
IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZShTdHJpbmcoIlxuIikpOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQs
IGVjKTsKLSAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5ndGgoKTsKLX0KLQogVHlwaW5nQ29t
bWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlLCBjb25zdCBTdHJpbmcgJnRleHRUb0luc2VydCwgT3B0aW9ucyBvcHRpb25zLCBU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRp
b25UeXBlKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpCiAgICAgLCBtX2Nv
bW1hbmRUeXBlKGNvbW1hbmRUeXBlKQpAQCAtMzg3LDcgKzM3NSw3IEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJv
b2wgc2VsZWN0CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIHsKLSAg
ICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkKGVuZGluZ1NlbGVjdGlvbigpKSkKKyAgICBpZiAo
IWNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRMaW5lQnJl
YWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwpAQCAtMzk2LDcgKzM4NCw3IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogewotICAgIGlmICghY2FuQXBwZW5kTmV3TGluZUZl
ZWQoZW5kaW5nU2VsZWN0aW9uKCkpKQorICAgIGlmICghY2FuQXBwZW5kTmV3TGluZUZlZWRUb1Nl
bGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcAppbmRleCA4NmY1MjliNmE0NWI4NjM0Yjc3ZjZmOTRhMjM5N2U4M2U2N2IzOTRkLi4yN2I3
ODAxNDlmYzRmMzk3NzJkNjg1MzViYzYwMTY0MjY0MjRmMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAKKyNpbmNsdWRlICJC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkBAIC02MDgsNiArNjA5LDE4
IEBAIE5vZGUqIFZpc2libGVTZWxlY3Rpb246Om5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2Rl
KCkgY29uc3QKICAgICByZXR1cm4gc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpLT5ub25Cb3VuZGFyeVNoYWRvd1RyZWVSb290Tm9kZSgpIDogMDsKIH0K
IAorYm9vbCBjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBOb2RlKiBub2RlID0gc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudCwgZWMpOworICAgIHJldHVybiBldmVu
dC0+dGV4dCgpLmxlbmd0aCgpOworfQorCiAjaWZuZGVmIE5ERUJVRwogCiB2b2lkIFZpc2libGVT
ZWxlY3Rpb246OmRlYnVnUG9zaXRpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uaAppbmRleCA4YzgxMGRhNGRkMTk3ZTMxY2Y2YTVmNmY4YjhiODgyNjI5
N2JiN2VmLi5iMmMzY2U0ZDlmNWM4ZGI1YmQ0ZmI1YTJmM2EwZTIzNjJhNzFiNTY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaApAQCAtMTUxLDYgKzE1MSw4IEBA
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgYSwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgYikKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCitib29sIGNh
bkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggMmIyNmEwNjk4ZWYzY2FmODU5YjBmODFiYjU5ZTM2ZjY1
ODU2MGYxZS4uNTQ3NjYwZmNhOTJiNWE2ODM5YzkwOGEwMDEwZDYzNjU1M2U3OWU0MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtNTI1LDYgKzUyNSwxMSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CiAjZW5kaWYKKyNpZiBV
U0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlv
bkFsdGVybmF0aXZlVUkoY29uc3QgRmxvYXRSZWN0JiwgdWludDY0X3QpIHsgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKSB7IH07CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCkgeyB9OworI2VuZGlm
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25z
dCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9y
Q2xpZW50LmgKaW5kZXggNGVjZDU2NTg0ZDMzZmZjNjQ5NjY3NjJlMTY2NTc1YWQ2ZWMwMDZlNC4u
MmNmY2YxMTllZGFjZDBmMWFmMTM3M2ZlMjUxN2FlN2RlMmE4N2NiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0VkaXRvckNsaWVudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVudF9o
CiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtMTU4LDYgKzE1OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsK
ICNlbmRpZgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdmlydHVhbCB2
b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpID0gMDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRh
aWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJ
KGJvb2wgc2hvdykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE3
MWU4NTE1NDZmYzIwYWI4N2NhNzcyMDU1NjE3NGZjNjY2MmVlN2MuLjBiZjFiZGUwYmUyNTllNDJj
ZGIzY2U2YWQyNzhmZWVkODQ1YWNhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKQEAgLTMxODgsNiArMzE4OCwyOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElu
cHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogICAgIHRh
cmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCwgZWMpOwogICAgIHJldHVybiBldmVudC0+ZGVmYXVs
dEhhbmRsZWQoKTsKIH0KKworYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURpY3RhdGlvbklucHV0
RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcywgRXZlbnQqIHVuZGVybHlpbmdFdmVu
dCkKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFdmVu
dFRhcmdldCogdGFyZ2V0OworICAgIGlmICh1bmRlcmx5aW5nRXZlbnQpCisgICAgICAgIHRhcmdl
dCA9IHVuZGVybHlpbmdFdmVudC0+dGFyZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB0YXJnZXQg
PSBldmVudFRhcmdldE5vZGVGb3JEb2N1bWVudChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBp
ZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKEZyYW1lVmlldyog
dmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgdmlldy0+cmVzZXREZWZlcnJlZFJlcGFp
bnREZWxheSgpOworCisgICAgUmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNy
ZWF0ZUZvckRpY3RhdGlvbihtX2ZyYW1lLT5kb21XaW5kb3coKSwgdGV4dCwgZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKTsKKyAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVu
dCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChl
dmVudCwgZWMpOworICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKK30KICAgICAK
IGJvb2wgRXZlbnRIYW5kbGVyOjppc0tleWJvYXJkT3B0aW9uVGFiKEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNzAxZmEyYmY5NDU1NTQ5
NzRiZDlkZjQ2YTQ3NjE5Mzc5NzMwNTM1Yi4uODFlOGRkMGEwY2IyNjc0ODAxMDA0Yzk2ODdiZDFl
Njc2NzNmMjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIEV2ZW50SGFuZGxlcl9oCiAjZGVmaW5lIEV2ZW50SGFuZGxlcl9oCiAKKyNp
bmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiRHJhZ0Fj
dGlvbnMuaCIKICNpbmNsdWRlICJEcmFnU3RhdGUuaCIKICNpbmNsdWRlICJGb2N1c0RpcmVjdGlv
bi5oIgpAQCAtMTg2LDYgKzE4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CiAKICAgICBib29sIGhhbmRsZVRleHRJbnB1
dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCA9IDAsIFRl
eHRFdmVudElucHV0VHlwZSA9IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOworICAgIGJvb2wgaGFu
ZGxlRGljdGF0aW9uSW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxE
aWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVu
dCogdW5kZXJseWluZ0V2ZW50KTsKICAgICB2b2lkIGRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRs
ZXIoVGV4dEV2ZW50Kik7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAppbmRleCBkNWMxNzZkMjFlMmI2MTZhNTAxZWUxNDQ5ZGIyZTA1NmIyYjhkYTg1Li4xZDU5
YzZlZGYwNzVmOTY5YWZlMTdmNjE2ZTUzMTJiZTI2N2YzMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cApAQCAtOTE2LDcgKzkxNiw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFk
b2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3IuZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbEFzSWdub3JlZCgpOworICAgIG1fZWRpdG9yLmRpc21pc3NBbHRlcm5hdGl2ZVRleHRV
SSgpOwogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0i
ZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXgg
ZjdiZWY0Zjk1ODk1OGYyYmQ3MTI0NTk4MjU3ZmNkNzljZWIxZmRjOS4uZDFlMDNjY2FmNGYwYTc4
Zjk0ZjdhZTNmNDE5MzZhZWVhMGZjYTVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MiwxMiArMzUyLDEzIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcyk7CiAKICAgICAg
ICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBi
b29sIHByaW50aW5nKTsKLSAgICAgICAgZW51bSBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgewotICAg
ICAgICAgICAgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGUsCi0gICAgICAgICAgICBUZXh0
Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlLAotICAgICAgICAgICAgVGV4dENoZWNraW5nUmVwbGFj
ZW1lbnRMaW5lU3R5bGUKKyAgICAgICAgZW51bSBUZXh0TWFya2VyTGluZVN0eWxlIHsKKyAgICAg
ICAgICAgIFRleHRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRNYXJr
ZXJHcmFtbWFyTGluZVN0eWxlLAorICAgICAgICAgICAgVGV4dE1hcmtlckF1dG9jb3JyZWN0aW9u
UmVwbGFjZW1lbnRMaW5lU3R5bGUsCisgICAgICAgICAgICBUZXh0TWFya2VyRGljdGF0aW9uQWx0
ZXJuYXRpdmVzTGluZVN0eWxlCiAgICAgICAgIH07Ci0gICAgICAgIHZvaWQgZHJhd0xpbmVGb3JU
ZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdM
aW5lU3R5bGUpOworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dE1hcmtlcihjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUpOwogCiAgICAgICAgIGJv
b2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlz
YWJsZWQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYmE4ODZhMDNj
MmM5MDYyMjM0MzNhMzNjMDJlNjQwNTM3NzY5MzkwZi4uMWFiMTVlY2Q2YTUyZjM1MzYxZTZkMWVj
NDBkODNiY2RlY2E3MGEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNjgy
LDcgKzY4Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vCiAjaW5jbHVkZSAiRHJhd0Vycm9y
VW5kZXJsaW5lLmgiCiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRD
aGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgVGV4dE1h
cmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC02OTEsMTAgKzY5MSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3
aQogICAgIGNhaXJvX3NhdmUoY3IpOwogCiAgICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNhc2Ug
VGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CisgICAgY2FzZSBUZXh0TWFya2VyU3BlbGxp
bmdMaW5lU3R5bGU6CiAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAwLCAwKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgor
ICAgIGNhc2UgVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6CiAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNyLCAwLCAxLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0Nv
bnRleHRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0TWFjLm1tCmluZGV4IGFjZWQ5NmIyZjRlN2ZmYzM4M2NlZmU3MWRiNzlhNjZhOWFj
NjY4MjIuLjMwMzBkNmI2YmIyODE0ODIzMDhmNzUxZmEyYjM5NjEzMjhhNzZlNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dE1hYy5tbQpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgTlNDb2xvciogY3JlYXRlUGF0
dGVybkNvbG9yKE5TU3RyaW5nKiBmaXJzdENob2ljZU5hbWUsIE5TU3RyaW5nKiBzZWNvbmRDaAog
fQogCiAvLyBXZWJLaXQgb24gTWFjIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gY29tcG9uZW50LCBz
byBpdCBtdXN0IHVzZSB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gYXJ0d29yayBmb3IgdW5kZXJsaW5l
Lgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxl
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcihjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTExLDcg
KzExMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkCiAgICAgYm9vbCB1c2luZ0RvdDsKICAg
ICBOU0NvbG9yICpwYXR0ZXJuQ29sb3I7CiAgICAgc3dpdGNoIChzdHlsZSkgewotICAgICAgICBj
YXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgICAgICBjYXNlIFRleHRNYXJr
ZXJTcGVsbGluZ0xpbmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRz
IGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNp
bmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgd2lkCiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5D
b2xvci5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
VGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgY2FzZSBUZXh0TWFya2VyR3Jh
bW1hckxpbmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBn
cmFtbWFyIHBhdHRlcm4gY29sb3IuCiAgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZv
ckdyYW1tYXIgPSBmYWxzZTsKQEAgLTEzMSw3ICsxMzEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHdpZAogICAgICAgICB9CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgICAg
IC8vIFRvIHN1cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KLSAgICAgICAgY2FzZSBUZXh0Q2hlY2tp
bmdSZXBsYWNlbWVudExpbmVTdHlsZToKKyAgICAgICAgY2FzZSBUZXh0TWFya2VyQXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudExpbmVTdHlsZToKKyAgICAgICAgY2FzZSBUZXh0TWFya2VyRGljdGF0
aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOgogICAgICAgICB7CiAgICAgICAgICAgICAvLyBDb25z
dGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3IuCiAgICAgICAgICAgICBzdGF0aWMgYm9v
bCB1c2luZ0RvdEZvclNwZWxsaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVu
VkcuY3BwCmluZGV4IDQ0MTdkN2I4MTE3NjIzMWJlNzRlMWM2ZWJjMTRhY2I2MzhkYzFlNWQuLmEz
YjBkMmRiOThiOGFlZmY5NDY2NTZjZTdhMTk3MjNhMDE0Mzg2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGlj
c0NvbnRleHRPcGVuVkcuY3BwCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJv
b2wgcHIKICAgICBVTlVTRURfUEFSQU0ocHJpbnRpbmcpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgaW50
IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGludCB3aWR0
aCwgVGV4dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggYWE0OWUyZGRmZjIy
Yzg0NGRhYzQ2YWI4ZGQ2ZDQ0ODE1MTRiMmIzNy4uODk5NzI1NGQ5OGU3MDM2MDgxOWJkZDhhOWVm
MmMzZjI3ZmZhZDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtOTc1LDcgKzk3NSw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdFcnJvclVuZGVybGluZShRUGFpbnRlciAqcGFpbnRlciwgcXJlYWwgeCwg
cXJlYWwgeSwgcXJlYWwgd2lkdGgsCiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgs
IFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwg
VGV4dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC05ODQsMTAgKzk4NCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aQogICAgIGNvbnN0IFFQZW4gb3JpZ2luYWxQZW4gPSBwYWludGVyLT5wZW4oKTsKIAog
ICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0
eWxlOgorICAgIGNhc2UgVGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBwYWlu
dGVyLT5zZXRQZW4oUXQ6OnJlZCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dENoZWNr
aW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJrZXJHcmFtbWFyTGluZVN0eWxl
OgogICAgICAgICBwYWludGVyLT5zZXRQZW4oUXQ6OmdyZWVuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IDRmNzljZmIwYjVlNjlj
NWM1NGU3M2JkMGUyY2JhOWEzOTVhZjY1ZWIuLjk5Mjc2N2UzMTUwYmI5OWY0OWZlZWEwMWJlN2Y3
OTVkNDI1NzFkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApAQCAtNjQ4LDcgKzY0OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQx
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3
UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBwdHMsIHBhaW50KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcihjb25zdCBGbG9hdFBvaW50
JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAKaW5kZXggZjNhOTE5ZDcxM2JhNmU3MzQ2ZDVlMzFhYTA2MjE0N2U2NTllNDIzZC4uNGVj
NzY4ZjNiYjMwYTRkOTYxZjhiOTk0YTZkZjFlMTVhMmMzNmVkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwCkBAIC0xODEsMTIgKzE4MSwxMiBAQCBzdGF0aWMgY29uc3QgQ29sb3ImIGdyYW1t
YXJQYXR0ZXJuQ29sb3IoKSB7CiAgICAgcmV0dXJuIGdyYW1tYXJDb2xvcjsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxlICE9
IFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlICYmIHN0eWxlICE9IFRleHRDaGVja2luZ0dy
YW1tYXJMaW5lU3R5bGUpCisgICAgaWYgKHN0eWxlICE9IFRleHRNYXJrZXJTcGVsbGluZ0xpbmVT
dHlsZSAmJiBzdHlsZSAhPSBUZXh0TWFya2VyR3JhbW1hckxpbmVTdHlsZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBtaXNzcGVsbGluZyBvciBiYWQg
Z3JhbW1hcgpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgY29uc3QgQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0
eWxlID09IFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGUgPyBncmFtbWFyUGF0dGVybkNvbG9y
KCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcigpOworICAgIGNvbnN0IENvbG9yJiBwYXR0ZXJuQ29s
b3IgPSBzdHlsZSA9PSBUZXh0TWFya2VyR3JhbW1hckxpbmVTdHlsZSA/IGdyYW1tYXJQYXR0ZXJu
Q29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7CiAgICAgc2V0Q0dTdHJva2VDb2xvcihj
b250ZXh0LCBwYXR0ZXJuQ29sb3IpOwogCiAgICAgd2tTZXRQYXR0ZXJuUGhhc2VJblVzZXJTcGFj
ZShjb250ZXh0LCBwb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKaW5kZXggOTZi
YzNkYzU1NDcwZThlN2UzODcwOWRiZGUzMjI2NDQ5YTg2YzVhMC4uMzg1MWRkOTRlYjRmYzBmYWEz
ZTMwNGM4NzNmY2I1YTE1MmMzZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcApA
QCAtMTAzMiw3ICsxMDMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib28KICAgICBzZXRTdHJv
a2VTdHlsZShvbGRTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2lu
Z0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRN
YXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0TWFya2VyTGluZVN0eWxl
IHN0eWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKaW5k
ZXggNDUyNjM4YjAxMDM4ZTdiNzI1YzczMmE5NzJhYjY2N2UxMDZlODQyNi4uOTAzZDllZGFkMTQ4
NzI2NzRhNDVkODY3NDAwOTkyMDZlYjQ1Mjg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcApAQCAtNDQy
LDEzICs0NDIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib28KICAgICByZXN0b3JlKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBG
bG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5
bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEZs
b2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
CiB7CiAgICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdM
aW5lU3R5bGU6CisgICAgY2FzZSBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU6CiAgICAgICAg
IG1fZGF0YS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKCp3eFJFRCwgMiwgd3hMT05HX0RBU0gpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgor
ICAgIGNhc2UgVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6CiAgICAgICAgIG1fZGF0YS0+Y29u
dGV4dC0+U2V0UGVuKHd4UGVuKCp3eEdSRUVOLCAyLCB3eExPTkdfREFTSCkpOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IDdhNmM1NjE0OTI2NDUyZjUwZTY0YWQ2OWRkZWNiMWNiMGFkMjY1OWYuLjRi
YmFhOThiOTg0NTg0OTcwOWM1ZjJmMWE1ZjA5MjVhZGRhMjU4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTk4MywyMiArOTgzLDI0IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKIH0KIAot
c3RhdGljIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nTGluZVN0eWxlIHRleHRDaGVja2lu
Z0xpbmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2Vy
VHlwZSkKK3N0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRNYXJrZXJMaW5lU3R5bGUgdGV4dE1h
cmtlckxpbmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFy
a2VyVHlwZSkKIHsKICAgICBzd2l0Y2ggKG1hcmtlclR5cGUpIHsKICAgICBjYXNlIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZzoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENo
ZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6
OlRleHRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZTsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpH
cmFtbWFyOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdHcmFt
bWFyTGluZVN0eWxlOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0TWFya2Vy
R3JhbW1hckxpbmVTdHlsZTsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdSZXBs
YWNlbWVudExpbmVTdHlsZTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1h
cmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU7CisgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0OjpUZXh0TWFya2VyRGljdGF0aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0OjpUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZTsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOwogICAgIH0K
IH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdy
YXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29s
IGdyYW1tYXIpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdHcmFtbWFyRGljdGF0
aW9uTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250
JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3Jh
bW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSkKQEAgLTEwNjMsNyArMTA2NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBG
bG9hCiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5kZXJs
aW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAgICB1
bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5kcmF3TGluZUZv
clRleHRDaGVja2luZyhGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2lu
LnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JN
YXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dE1hcmtl
cihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVy
bGluZU9mZnNldCksIHdpZHRoLCB0ZXh0TWFya2VyTGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJr
ZXItPnR5cGUoKSkpOwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFy
a2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250
KQpAQCAtMTEzMCw2ICsxMTMyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICAg
ICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6CiAgICAgICAgICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25BbHRlcm5hdGl2ZXM6CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmQpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTE1MywxNiArMTE1NiwxNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJr
ZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgIC8vIG1h
cmtlciBpbnRlcnNlY3RzIHRoaXMgcnVuLiAgUGFpbnQgaXQuCiAgICAgICAgIHN3aXRjaCAobWFy
a2VyLT50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
OgotICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJveE9y
aWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOworICAgICAgICAgICAgICAgIHBhaW50
U3BlbGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5
bGUsIGZvbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6Ci0gICAgICAgICAgICAgICAgcGFpbnRTcGVsbGlu
Z09yR3JhbW1hck1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCB0cnVl
KTsKKyAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihw
dCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCB0cnVlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaDoKICAg
ICAgICAgICAgICAgICBwYWludFRleHRNYXRjaE1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIs
IHN0eWxlLCBmb250KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3I6Ci0gICAgICAgICAgICAgICAgcGFp
bnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBm
b250LCBmYWxzZSk7CisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZXM6CisgICAgICAgICAgICAgICAgcGFpbnRTcGVsbGluZ0dyYW1tYXJEaWN0YXRp
b25NYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQ6CiAgICAgICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtl
cihtYXJrZXIsIHN0eWxlLCBmb250KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCmluZGV4IDU4OTcyZDEzNGRmMjQxYmM4MjJkYWJmMTFiMGJhYjYzYTA4ODk2NzguLjQ4
YjQzMDg5N2NiMDg1NjQ5MzNiYzdjZTEzYTVmNWUwZTgyYmRiNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTgyLDcgKzE4Miw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBpbnQgZGVjb3JhdGlvbiwgY29uc3QgU2hhZG93RGF0
YSopOwogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKLSAgICB2b2lk
IHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3Qg
Rm9udCYsIGJvb2wgZ3JhbW1hcik7CisgICAgdm9pZCBwYWludFNwZWxsaW5nR3JhbW1hckRpY3Rh
dGlvbk1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFy
KTsKICAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNv
bnN0IEZvbnQmKTsKICAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoRG9j
dW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGYyZjEwOTgwNDI0MDc2N2QyNTJhNTk2ODU0N2U2MTIz
NTY2OTk2MjkuLmY2MDM3NjRmYmNiYzY5Zjk3YjAxNWQ3ODljNGNjNmNkM2JiZmU3MDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTk2LDYgKzk2LDggQEAgc3RhdGljIGJv
b2wgbWFya2VyVHlwZXNGcm9tKGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUKICAgICAgICAgcmVzdWx0ID0gIERvY3VtZW50TWFya2VyOjpTcGVsbENo
ZWNraW5nRXhlbXB0aW9uOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1hcmtlclR5
cGUsICJEZWxldGVkQXV0b2NvcnJlY3Rpb24iKSkKICAgICAgICAgcmVzdWx0ID0gIERvY3VtZW50
TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb247CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobWFya2VyVHlwZSwgIkRpY3RhdGlvbkFsdGVybmF0aXZlcyIpKQorICAgICAgICByZXN1
bHQgPSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOwogICAgIGVsc2UKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjOGRlNzU1YjZjZDYyNmMxMTg0MTU3YmYwYTMyODUyY2Yx
MjQxY2YxLi4zNGZkYTUwMThmMWU1MTI4ZmJmNmU3MmYzZmIzMTg5MmM4MWJjZDE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MCw2
ICszNzAsMTAgQEAKIAkJQ0Q4RUFDNzMxMUNBQzlBMzAwNzc0MDc1IC8qIElPS2l0LmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEVB
QzcyMTFDQUM5QTMwMDc3NDA3NSAvKiBJT0tpdC5mcmFtZXdvcmsgKi87IH07CiAJCUNEQTYyQUUy
MTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNjJBRTAxMjVGODdDMjAwN0ZE
MTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggKi87IH07CiAJCUNEQTYyQUUzMTI1Rjg3
QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAv
KiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJQ0U3RkI4MUMxNTIyMzU0MTAw
QkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U3RkI4MTgxNTIyMzU0MDAwQkQxRUE5
IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovOyB9OworCQlDRTdGQjgxRDE1
MjIzNTQxMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U3RkI4MTkxNTIyMzU0
MDAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJ
Q0U3RkI4MUUxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U3RkI4MUExNTIy
MzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovOyB9OworCQlDRTdG
QjgxRjE1MjIzNTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U3RkI4MUIxNTIyMzU0
MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSAqLzsgfTsKIAkJREQ3Q0RF
RTcwQTIzQkE5RTAwMDY5OTI4IC8qIFdlYlR5cGVzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREN0NERUU2MEEyM0JBOUUwMDA2OTkyOCAv
KiBXZWJUeXBlc0ludGVybmFsLmggKi87IH07CiAJCUREODk2ODIwMDlBQTg3MjQwMDk3RTdGMCAv
KiBXZWJFbGVtZW50RGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREQ4OTY4MUUwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0
aW9uYXJ5LmggKi87IH07CiAJCUREODk2ODIxMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50
RGljdGlvbmFyeS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEREODk2ODFGMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5tbSAq
LzsgfTsKQEAgLTY5OSw2ICs3MDMsMTAgQEAKIAkJQ0Q4RUFDNzIxMUNBQzlBMzAwNzc0MDc1IC8q
IElPS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlDREE2MkFFMDEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RB
NjJBRTExMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFN0ZCODE4MTUyMjM1NDAwMEJE
MUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFN0ZCODE5MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFN0ZCODFBMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNF
N0ZCODFCMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUREN0NERUU2MEEyM0JBOUUw
MDA2OTkyOCAvKiBXZWJUeXBlc0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlR5cGVzSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
REQ4OTY4MUUwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRWxlbWVudERp
Y3Rpb25hcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUREODk2ODFGMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlv
bmFyeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViRWxlbWVudERpY3Rpb25hcnkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMTI5NCw2ICsxMzAyLDEwIEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQlCODI5NThEMTEzMjcwN0QwMDAwRDBFNzkgLyogQ29ycmVjdGlv
blBhbmVsLmggKi8sCiAJCQkJQjgyOTU4RDIxMzI3MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25Q
YW5lbC5tbSAqLywKKwkJCQlDRTdGQjgxODE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLmggKi8sCisJCQkJQ0U3RkI4MTkxNTIyMzU0MDAwQkQxRUE5IC8q
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSAqLywKKwkJCQlDRTdGQjgxQTE1MjIz
NTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi8sCisJCQkJQ0U3RkI4
MUIxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSAqLywKIAkJ
CQlCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oICovLAog
CQkJCUI2ODA0OTcyMEZGQkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tICov
LAogCQkJCUE1REVGQzExMTFENTM0NEIwMDg4NTI3MyAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlUXVv
dGFNYW5hZ2VyLmggKi8sCkBAIC0xNjQzLDYgKzE2NTUsOCBAQAogCQkJCTQxRjQ0ODRGMTAzMzhF
OEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEy
RTJGRTUxNEU0ODE4MjAwN0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzEyRTJGRTkxNEU0ODIxNTAwN0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbkludGVybmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDRTdGQjgxQzE1MjIzNTQxMDBCRDFFQTkgLyogRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRTdGQjgxRTE1
MjIzNTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIwMzAsNiArMjA0NCw4IEBACiAJCQkJQkMyRTQ2NEUwRkQ4QTk2ODAwQTlEOURFIC8q
IFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGNDQ4NTAxMDMzOEU4QzAwMzBF
NTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEyRTJGRTYx
NEU0ODE4MjAwN0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUNFN0ZCODFEMTUyMjM1NDEwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlDRTdGQjgxRjE1MjIzNTQxMDBCRDFFQTkgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODE2YTg3NjA4OWViMzU3OWUwYTI3MmYyNGMw
ODMzYzc4ZTJhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXJfaAor
I2RlZmluZSBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorT0JKQ19DTEFTUyBO
U1RleHRBbHRlcm5hdGl2ZXM7CitPQkpDX0NMQVNTIFdlYlZpZXc7CisKK2NsYXNzIERpY3RhdGlv
bkNvbnRleHRDb250cm9sbGVyOworCitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIgeworcHVibGljOgorICAgIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcigpIHsgfQor
ICAgIC8vIFJldHVybnMgYSBkaWN0YXRpb24gY29udGV4dCBJRC4KKyAgICB1aW50NjRfdCBhZGRB
bHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKTsKKyAgICB2
b2lkIGNsZWFyKCk7CisgICAgdm9pZCBzaG93QWx0ZXJuYXRpdmVzKFdlYlZpZXcqLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFN0cmluZywgdWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCk7CisgICAgdm9pZCBkaXNtaXNzQWx0ZXJuYXRpdmVzKCk7CisgICAg
dm9pZCByZW1vdmVBbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKE5TU3RyaW5nKiBhY2Nl
cHRlZEFsdGVybmF0aXZlLCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBOU1RleHRBbHRlcm5h
dGl2ZXMqKTsKKyAgICAKKyAgICBjbGFzcyBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlciB7Cisg
ICAgcHVibGljOgorICAgICAgICBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcigpIHsgfQorICAg
ICAgICB1aW50NjRfdCBhZGRBbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVy
bmF0aXZlcz4mKTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBOU1RleHRBbHRlcm5h
dGl2ZXMqIGFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCk7CisgICAgICAgIHZvaWQgcmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29u
dGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IGludmFsaWRDb250ZXh0ID0gMDsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8dWludDY0X3QsIFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+ID4gSGFzaE1h
cFR5cGU7CisgICAgICAgIEhhc2hNYXBUeXBlIG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwOworICAg
IH07CisKKyAgICBEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlciBtX2NvbnRleHRDb250cm9sbGVy
OworICAgIFJldGFpblB0cjxXZWJWaWV3PiBtX3ZpZXc7Cit9OworI2VuZGlmCisjZW5kaWYgLy8g
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZlQ29u
dHJvbGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjU4MzNiYzU0NDNmNGU5MTE3ZmE0ZDcxYWZhNmU5ZjU0
ZTdjN2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsMTExIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCisK
KyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKworI2ltcG9ydCA8QXBwS2l0L05TU3Bl
bGxDaGVja2VyLmg+CisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+CisjaW1w
b3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3Vp
bnQ2NF90IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENv
bnRyb2xsZXI6OmFkZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRp
dmVzPiYgYWx0ZXJuYXRpdmVzKQoreworICAgIHVpbnQ2NF90IGNvbnRleHQgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ2NF90PihhbHRlcm5hdGl2ZXMuZ2V0KCkpOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIGludmFsaWRDb250ZXh0OworICAgIHN0ZDo6cGFpcjxIYXNoTWFwVHlw
ZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmFkZChj
b250ZXh0LCBhbHRlcm5hdGl2ZXMpOworICAgIGlmIChyZXN1bHQuZmlyc3QgPT0gbV9hbHRlcm5h
dGl2ZXNPYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkQ29udGV4dDsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBjb250ZXh0OworfQorCitOU1RleHRBbHRlcm5hdGl2ZXMq
IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xs
ZXI6OmFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29u
dGV4dCkKK3sKKyAgICBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbV9hbHRlcm5h
dGl2ZXNPYmplY3RNYXAuZmluZChkaWN0YXRpb25Db250ZXh0KTsKKyAgICBpZiAoaXRyID09IG1f
YWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBy
ZXR1cm4gaXRyLT5zZWNvbmQuZ2V0KCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVz
Rm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1f
YWx0ZXJuYXRpdmVzT2JqZWN0TWFwLnJlbW92ZShkaWN0YXRpb25Db250ZXh0KTsKK30KKwordm9p
ZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9s
bGVyOjpjbGVhcigpCit7CisgICAgbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuY2xlYXIoKTsKK30K
KwordWludDY0X3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2
ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0Q29udHJvbGxlci5hZGRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRp
dmVzKTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmNsZWFyKCkK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0Q29udHJvbGxlci5jbGVhcigpOworfQorCit2b2lkIERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c2hvd0FsdGVybmF0aXZlcyhXZWJWaWV3KiB2
aWV3LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFN0cmlu
ZywgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBkaXNtaXNzQWx0ZXJuYXRpdmVz
KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgbV92aWV3ID0gdmlldzsK
KyAgICBOU1RleHRBbHRlcm5hdGl2ZXMqIGFsdGVybmF0aXZlcyA9IG1fY29udGV4dENvbnRyb2xs
ZXIuYWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKKyAg
ICBpZiAoIWFsdGVybmF0aXZlcykKKyAgICAgICAgcmV0dXJuOworICAgIE5TU3BlbGxDaGVja2Vy
KiBzcGVsbENoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAg
ICBbc3BlbGxDaGVja2VyIHNob3dDb3JyZWN0aW9uSW5kaWNhdG9yT2ZUeXBlOk5TQ29ycmVjdGlv
bkluZGljYXRvclR5cGVHdWVzc2VzIHByaW1hcnlTdHJpbmc6YWx0ZXJuYXRpdmVzLnByaW1hcnlT
dHJpbmcgYWx0ZXJuYXRpdmVTdHJpbmdzOmFsdGVybmF0aXZlcy5hbHRlcm5hdGl2ZVN0cmluZ3Mg
Zm9yU3RyaW5nSW5SZWN0Olt2aWV3IF9jb252ZXJ0UmVjdEZyb21Sb290Vmlldzpib3VuZGluZ0Jv
eE9mRGljdGF0ZWRTdHJpbmddIHZpZXc6bV92aWV3LmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4o
TlNTdHJpbmcqIGFjY2VwdGVkU3RyaW5nKSB7CisgICAgICAgIGlmIChhY2NlcHRlZFN0cmluZykK
KyAgICAgICAgICAgIGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoYWNjZXB0ZWRTdHJpbmcsIGRp
Y3RhdGlvbkNvbnRleHQsIGFsdGVybmF0aXZlcyk7CisgICAgfV07Cit9CisKK3ZvaWQgRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlKE5TU3Ry
aW5nKiBhY2NlcHRlZEFsdGVybmF0aXZlLCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBOU1Rl
eHRBbHRlcm5hdGl2ZXMqIGFsdGVybmF0aXZlcykKK3sKKyAgICBbYWx0ZXJuYXRpdmVzIG5vdGVT
ZWxlY3RlZEFsdGVybmF0aXZlU3RyaW5nOmFjY2VwdGVkQWx0ZXJuYXRpdmVdOworICAgIG1fY29u
dGV4dENvbnRyb2xsZXIucmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dChkaWN0
YXRpb25Db250ZXh0KTsKKyAgICBbbV92aWV3LmdldCgpIF9oYW5kbGVBY2NlcHRlZERpY3RhdGlv
bkFsdGVybmF0aXZlOmFjY2VwdGVkQWx0ZXJuYXRpdmVdOworICAgIG1fdmlldy5jbGVhcigpOwor
fQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6ZGlzbWlzc0FsdGVybmF0
aXZlcygpCit7CisgICAgaWYgKCFtX3ZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBbW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gZGlzbWlzc0NvcnJlY3Rpb25JbmRpY2F0b3JG
b3JWaWV3Om1fdmlldy5nZXQoKV07Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sK
KyAgICBtX2NvbnRleHRDb250cm9sbGVyLnJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNv
bnRleHQoZGljdGF0aW9uQ29udGV4dCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2FkZTZkN2VkMjJhZmQ4NjBiMTZkYmVkYWU3ZDcwOTQ4NTE4NmM4ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1RleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZV9oCisjZGVmaW5lIFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24u
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKK09CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOworCitzdHJ1Y3QgVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlIHsKKyAgICBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoTlNUZXh0
QWx0ZXJuYXRpdmVzKiBhbkFsdGVybmF0aXZlcywgTlNSYW5nZSBhUmFuZ2UpOworICAgIFRleHRB
bHRlcm5hdGl2ZVdpdGhSYW5nZShjb25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFub3Ro
ZXIpOworICAgIE5TUmFuZ2UgcmFuZ2U7CisgICAgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZl
cz4gYWx0ZXJuYXRpdmVzOworfTsKKworI2VuZGlmCisKKyNlbmRpZiAvLyBUZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZTA1Nzg3
MTNmMTg1YmQ4NWUzYjNmNzgxOGQzYzE2MTQ4MmY2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0K
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW1wb3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UuaCIKKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBw
S2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorCitUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U6OlRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShOU1RleHRBbHRlcm5hdGl2ZXMqIGFuQWx0ZXJuYXRpdmVz
LCBOU1JhbmdlIGFSYW5nZSkKKzogcmFuZ2UoYVJhbmdlKQorLCBhbHRlcm5hdGl2ZXMoYW5BbHRl
cm5hdGl2ZXMpCit7Cit9CisKK1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlKGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYW5vdGhlcikKKzog
cmFuZ2UoYW5vdGhlci5yYW5nZSkKKywgYWx0ZXJuYXRpdmVzKGFub3RoZXIuYWx0ZXJuYXRpdmVz
KQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDA2ZmNhOGQwZWJmZTFlOWZiZDdiMmJkYjVhYzk0MDg4
MTBjYjI0NWMuLjYzNDJlMjg1NDQ4OTYyZThlMzEzYTQ4ODU5ODA1YTU4ODEzMjBkNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
CkBAIC0xNDIsNiArMTQyLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNz
Q29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgT1ZFUlJJREU7CiAjZW5k
aWYKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpIE9WRVJSSURFOworI2VuZGlmCiBwcml2YXRlOgogICAgIHZvaWQg
cmVnaXN0ZXJVbmRvT3JSZWRvU3RlcChQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiwgYm9v
bCBpc1JlZG8pOwogICAgIFdlYkVkaXRvckNsaWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IGMzMDFlYjUwOGM4
N2MyYTQwNTUxMjlhMGU5NmRiMmZkNjNiZDJjNDEuLmVjMjU2NzI1ODAyM2RhNmUwZDJhYWFiMmRm
NjJkNzk5YmM1MGIyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTg4OSw2ICs4ODksMjMgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRv
Y29ycmVjdGlvblIKIH0KICNlbmRpZgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMp
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KQoreworICAgIFttX3dlYlZpZXcgX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOmJv
dW5kaW5nQm94T2ZEaWN0YXRlZFRleHQgZm9yRGljdGF0aW9uQ29udGV4dDpkaWN0YXRpb25Db250
ZXh0XTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5h
dGl2ZVVJKCkKK3sKKyAgICBbbV93ZWJWaWV3IF9kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVV
SV07Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBbbV93ZWJWaWV3IF9yZW1vdmVE
aWN0YXRpb25BbHRlcm5hdGl2ZXM6ZGljdGF0aW9uQ29udGV4dF07Cit9CisjZW5kaWYKKwogdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKIHsKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJl
ZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVkV29yZDptaXNz
cGVsbGVkV29yZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRl
eCBhOWIyOTFlNDk5ZjgwMjk3Y2M3NTY3OWYzOTBlZjZiZGUwNjFjNGE0Li43NmI4OTE2NWNlNjAy
NWU3Y2I4ZTVjOTc4MmI5NjNiYTNkZTgwOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkRPTURvY3VtZW50SW50
ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCiAjaW1wb3J0
ICJXZWJBcmNoaXZlLmgiCiAjaW1wb3J0ICJXZWJDbGlwVmlldy5oIgogI2ltcG9ydCAiV2ViRE9N
T3BlcmF0aW9uc0ludGVybmFsLmgiCkBAIC01ODg4LDYgKzU4ODksMjIgQEAgc3RhdGljIHZvaWQg
ZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21w
b3NpdGlvblVuZGUKICAgICB9CiB9CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
K3N0YXRpYyB2b2lkIGNvbGxlY3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKE5TQXR0cmlidXRl
ZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgYWx0ZXJu
YXRpdmVzKSB7CisgICAgTlNSYW5nZSBlZmZlY3RpdmVSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDAp
OworICAgIE5TVUludGVnZXIgbGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgIGRvIHsKKyAg
ICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRl
eDplZmZlY3RpdmVSYW5nZS5sb2NhdGlvbiBlZmZlY3RpdmVSYW5nZTomZWZmZWN0aXZlUmFuZ2Vd
OworICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
TlNUZXh0QWx0ZXJuYXRpdmVzICp0ZXh0QWx0ZXJuYXRpdmVzID0gW2F0dHJpYnV0ZXMgb2JqZWN0
Rm9yS2V5Ok5TVGV4dEFsdGVybmF0aXZlc0F0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAodGV4
dEFsdGVybmF0aXZlcykKKyAgICAgICAgICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlKHRleHRBbHRlcm5hdGl2ZXMsIGVmZmVjdGl2ZVJhbmdlKSk7CisgICAg
ICAgIGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5nZShlZmZlY3RpdmVSYW5nZSk7
CisgICAgfSB3aGlsZSAoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24gPCBsZW5ndGgpOworfQorI2Vu
ZGlmCisKIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiB7CiAgICAgQk9PTCBpc0F0dHJp
YnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBj
bGFzc11dOwpAQCAtNTkwNCw3ICs1OTIxLDE0IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxp
bmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAg
ICAgTlNSYW5nZSByZXBsYWNlbWVudFJhbmdlID0geyBOU05vdEZvdW5kLCAwIH07CiAgICAgYm9v
bCBpc0Zyb21JbnB1dE1ldGhvZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5o
YXNDb21wb3NpdGlvbigpOwogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAg
VmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzOwor
I2VuZGlmCisKICAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CisjaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCisgICAgICAgIGNvbGxlY3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVz
KHN0cmluZywgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyNlbmRpZgogICAgICAgICAvLyBGSVhN
RTogV2UgaWdub3JlIG1vc3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJpbmcsIHNvIGZvciBleGFt
cGxlIGluc2VydGluZyBmcm9tIENoYXJhY3RlciBQYWxldHRlIGxvc2VzIGZvbnQgYW5kIGdseXBo
IHZhcmlhdGlvbiBkYXRhLgogICAgICAgICAvLyBJdCBkb2VzIG5vdCBsb29rIGxpa2UgYW55IGlu
cHV0IG1ldGhvZHMgZXZlciB1c2UgaW5zZXJ0VGV4dDogd2l0aCBhdHRyaWJ1dGVzIG90aGVyIHRo
YW4gTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZS4KICAgICAgICAgdGV4
dCA9IFtzdHJpbmcgc3RyaW5nXTsKQEAgLTU5NDMsNyArNTk2NywxMiBAQCBzdGF0aWMgdm9pZCBl
eHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBv
c2l0aW9uVW5kZQogICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24o
KSkgewogICAgICAgICAvLyBBbiBpbnNlcnRUZXh0OiBtaWdodCBiZSBoYW5kbGVkIGJ5IG90aGVy
IHJlc3BvbmRlcnMgaW4gdGhlIGNoYWluIGlmIHdlIGRvbid0IGhhbmRsZSBpdC4KICAgICAgICAg
Ly8gT25lIGV4YW1wbGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxpbmcgZG93
biB0aGUgcGFnZS4KLSAgICAgICAgZXZlbnRIYW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+
aW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50KTsKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFU
SVZFUykKKyAgICAgICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlcy5zaXplKCkpCisgICAgICAg
ICAgICBldmVudEhhbmRsZWQgPSBbW3NlbGYgX3dlYlZpZXddIF9pbnNlcnREaWN0YXRlZFRleHQ6
ZXZlbnRUZXh0IGFsdGVybmF0aXZlczpkaWN0YXRpb25BbHRlcm5hdGl2ZXMgdHJpZ2dlcmluZ0V2
ZW50OmV2ZW50XTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBldmVudEhhbmRs
ZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihldmVudFRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IGM0MThiMDM5MWExODAxNTcyOTcwZjhiMTk0N2U0
MGU3ZGM4NjRjMzMuLmZhMTMzZDE4YTA3ODBkNDc1MjkwMDcyOGIxYTY5NTI5YTQ3YzI1YmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBv
cnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVmlld0RhdGEuaCIKIAorI2ltcG9y
dCAiRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJET01DU1NTdHls
ZURlY2xhcmF0aW9uSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgpAQCAtNjMzNCw2ICs2MzM1LDU1IEBAIHN0YXRpYyB2
b2lkIGdsaWJDb250ZXh0SXRlcmF0aW9uQ2FsbGJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENG
UnVuTG9vcEFjdGl2aXR5CiB9CiAjZW5kaWYKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQorLSAoQk9PTClfaW5zZXJ0RGljdGF0ZWRUZXh0Oihjb25zdCBTdHJpbmcmKXRleHQgYWx0
ZXJuYXRpdmVzOihjb25zdCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYpYWx0ZXJu
YXRpdmVzIHRyaWdnZXJpbmdFdmVudDooRXZlbnQqKXRyaWdnZXJpbmdFdmVudAoreworICAgIEFT
U0VSVCghYWx0ZXJuYXRpdmVzLmlzRW1wdHkoKSk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
W3NlbGYgX21haW5Db3JlRnJhbWVdOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBjb3JlRnJhbWUtPmVkaXRvcigpOworCisg
ICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbHRlcm5hdGl2ZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBh
bHRlcm5hdGl2ZVdpdGhSYW5nZSA9IGFsdGVybmF0aXZlc1tpXTsKKyAgICAgICAgdWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCA9IF9wcml2YXRlLT5tX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlci0+YWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlV2l0aFJhbmdlLmFsdGVybmF0aXZlcyk7
CisgICAgICAgIGlmIChkaWN0YXRpb25Db250ZXh0KQorICAgICAgICAgICAgZGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbnMuYXBwZW5kKERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24oYWx0
ZXJuYXRpdmVXaXRoUmFuZ2UucmFuZ2UubG9jYXRpb24sIGFsdGVybmF0aXZlV2l0aFJhbmdlLnJh
bmdlLmxlbmd0aCwgZGljdGF0aW9uQ29udGV4dCkpOworICAgIH0KKworICAgIGlmIChkaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlZGl0b3It
Pmluc2VydFRleHQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiBlZGl0b3ItPmluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9ucywgdHJpZ2dlcmluZ0V2ZW50KTsKK30KKworLSAodm9pZClfc2hvd0RpY3RhdGlv
bkFsdGVybmF0aXZlVUk6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpYm91bmRpbmdCb3hPZkRp
Y3RhdGVkVGV4dCBmb3JEaWN0YXRpb25Db250ZXh0Oih1aW50NjRfdClkaWN0YXRpb25Db250ZXh0
Cit7CisgICAgX3ByaXZhdGUtPm1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5zaG93
QWx0ZXJuYXRpdmVzKHNlbGYsIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3RhdGlvbkNv
bnRleHQpOworfQorCistICh2b2lkKV9kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSQorewor
ICAgIF9wcml2YXRlLT5tX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+ZGlzbWlzc0Fs
dGVybmF0aXZlcygpOworfQorCistICh2b2lkKV9yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXM6
KHVpbnQ2NF90KWRpY3RhdGlvbkNvbnRleHQKK3sKKyAgICBfcHJpdmF0ZS0+bV9kaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXItPnJlbW92ZUFsdGVybmF0aXZlcyhkaWN0YXRpb25Db250ZXh0
KTsKK30KKworLSAodm9pZClfaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZTooTlNT
dHJpbmcqKWFsdGVybmF0aXZlCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWlu
Q29yZUZyYW1lXTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoYWx0
ZXJuYXRpdmUpOworfQorI2VuZGlmCisKIC0gKE5TUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Sb290
VmlldzooTlNQb2ludClwb2ludAogewogICAgIHJldHVybiBOU01ha2VQb2ludChwb2ludC54LCBb
c2VsZiBib3VuZHNdLnNpemUuaGVpZ2h0IC0gcG9pbnQueSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdEYXRhLmgKaW5kZXggZWEyYmZjZjYwNzRlOWE1MTFjM2MzZWFlMmRiNGZmNWU1
ZWMzYzRmNi4uMmM4MzNmMGU4YWZiOWJlZmUyOGFiM2QxYWIyZjRkYzE4ZTRmOWJkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaApAQCAtMjksNiArMjksNyBAQAogCiAj
aW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJEZWxlZ2F0ZUltcGxlbWVu
dGF0aW9uQ2FjaGluZy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmluZy5oPgpAQCAtNTgsNiArNTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBAY2xhc3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI7CiAjZW5kaWYKIAorY2xhc3MgRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOworCiBleHRlcm4gQk9PTCBhcHBsaWNhdGlvbklzVGVy
bWluYXRpbmc7CiBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7CiAKQEAgLTIw
MCw1ICsyMDMsOSBAQCBwcml2YXRlOgogICAgIGludCB2YWxpZGF0aW9uTWVzc2FnZVRpbWVyTWFn
bmlmaWNhdGlvbjsKIAogICAgIGZsb2F0IGN1c3RvbURldmljZVNjYWxlRmFjdG9yOworCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgT3duUHRyPERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlcj4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7CisjZW5kaWYK
IH0KIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0Rh
dGEubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCmluZGV4IDBi
ODExN2EwOTcwNmQ1YjZlYzRlNjQ1N2MzMzk4ZTQ3NjI2YzU4YmEuLjIzNDY4MmU1ZjAzZjUxNDBj
MjRkZjg0NTkyYmEwMWE4NWU2ZjAxYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3RGF0YS5tbQpAQCAtMjksNiArMjksNyBAQAogCiAjaW1wb3J0ICJXZWJWaWV3RGF0YS5oIgog
CisjaW1wb3J0ICJEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldl
YktpdExvZ2dpbmcuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgpAQCAtMTAwLDYgKzEwMSwxMCBAQCBM
YXllckZsdXNoQ29udHJvbGxlcjo6TGF5ZXJGbHVzaENvbnRyb2xsZXIoV2ViVmlldyogd2ViVmll
dykKIAogICAgIHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQrKzsKIAorI2lmIFVTRShESUNUQVRJ
T05fQUxURVJOQVRJVkVTKQorICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyID0g
YWRvcHRQdHIobmV3IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcik7CisjZW5kaWYKKwog
ICAgIHJldHVybiBzZWxmOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
SW50ZXJuYWwuaAppbmRleCAwMmNjNTUwMTA2YjA0NGZiYzE3N2M5ZjU5YTFmODNmNTkwZGU1MGIw
Li5kOThlOTExNTA1M2ViYTljZjFkM2MyNDI5YmJlZTAxZDUxMTBhOTNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKQEAgLTM0LDEzICszNCwxNyBAQAog
I2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKKyNpbXBv
cnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbmRPcHRpb25zLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
S2V5Ym9hcmRVSU1vZGUuaD4KIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEV2ZW50OwogICAgIGNs
YXNzIEZyYW1lOwogICAgIGNsYXNzIEhpc3RvcnlJdGVtOwogICAgIGNsYXNzIEtVUkw7CkBAIC05
NSw2ICs5OSwxNCBAQCBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlT3B0aW9ucyhXZWJGaW5kT3B0
aW9ucyBvcHRpb25zKTsKIC0gKHZvaWQpX3NjaGVkdWxlR2xpYkNvbnRleHRJdGVyYXRpb25zOwog
I2VuZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKy0gKEJPT0wpX2luc2Vy
dERpY3RhdGVkVGV4dDooY29uc3QgU3RyaW5nJil0ZXh0IGFsdGVybmF0aXZlczooY29uc3QgVmVj
dG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mKWFsdGVybmF0aXZlcyB0cmlnZ2VyaW5nRXZl
bnQ6KFdlYkNvcmU6OkV2ZW50Kil0cmlnZ2VyaW5nRXZlbnQ7CistICh2b2lkKV9zaG93RGljdGF0
aW9uQWx0ZXJuYXRpdmVVSTooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jilib3VuZGluZ0JveE9m
RGljdGF0ZWRUZXh0IGZvckRpY3RhdGlvbkNvbnRleHQ6KHVpbnQ2NF90KWRpY3RhdGlvbkNvbnRl
eHQ7CistICh2b2lkKV9kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSTsKKy0gKHZvaWQpX3Jl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlczoodWludDY0X3QpZGljdGF0aW9uQ29udGV4dDsKKy0g
KHZvaWQpX2hhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6KE5TU3RyaW5nKilhbHRl
cm5hdGl2ZTsKKyNlbmRpZgorCiBAZW5kCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA1MDU0NjZjNmIwM2U1N2FhN2I4
OWIwNDAxZjc2YmExNjc5MjczODY4Li42ODdlY2JlYzIzMjQ4OGQwOTUxOWM5ZTFjNmMzMmRiNmM4
ZWEzZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhYmFz
ZURldGFpbHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CkBAIC02MzksNiAr
NjQwLDI0IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxLVVJMPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgS1VSTCYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEFy
Z3VtZW50Q29kZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj46OmVuY29kZShBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mIGFs
dGVybmF0aXZlc0xvY2F0aW9uKQoreworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChhbHRlcm5h
dGl2ZXNMb2NhdGlvbi5yYW5nZVN0YXJ0KTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQoYWx0
ZXJuYXRpdmVzTG9jYXRpb24ucmFuZ2VMZW5ndGgpOworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2
NChhbHRlcm5hdGl2ZXNMb2NhdGlvbi5kaWN0YXRpb25Db250ZXh0KTsKK30KKworYm9vbCBBcmd1
bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uJiBhbHRlcm5hdGl2
ZXNMb2NhdGlvbikKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChhbHRlcm5hdGl2
ZXNMb2NhdGlvbi5yYW5nZVN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlVUludDY0KGFsdGVybmF0aXZlc0xvY2F0aW9uLnJhbmdlTGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGFs
dGVybmF0aXZlc0xvY2F0aW9uLmRpY3RhdGlvbkNvbnRleHQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKICNpZiBQTEFURk9STShRVCkKIAogdm9pZCBBcmd1
bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDZmOTcwMGNjNTAzY2E5N2VlOGI3YWJm
MjRlZGVhZTczMzgwYmQzNmQuLjIxM2YxMmRmMThkYzQwZGMzZDI3ZGEyY2UwODU4NDk0YmY3NDU0
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
QEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKICAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogICAgIHN0cnVjdCBDb21wb3Np
dGlvblVuZGVybGluZTsKKyAgICBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbjsK
ICAgICBzdHJ1Y3QgRHJhZ1Nlc3Npb247CiAgICAgc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7
CiAgICAgc3RydWN0IEdyYW1tYXJEZXRhaWw7CkBAIC0yMjgsNiArMjI5LDExIEBAIHRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S1VSTD4gewogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpLVVJMJik7CiB9OwogCit0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYpOworICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uJik7Cit9OworCiAjaWYgUExBVEZPUk0oUVQpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCmluZGV4
IDhhZjc4YzdiYjVjYTY0M2Q5ZTNlMjRjYzM4NzJhM2QwNDM4ZTE3NjUuLmE4ODI1YjE2MTMxOGFi
MTJiNDk3MzA4Y2Y3OWQ5YjBkMTY3Mzk3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5j
bHVkZSAiQ29ycmVjdGlvblBhbmVsLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7CkBAIC0zNSw2
ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI7CiBjbGFzcyBGaW5kSW5kaWNhdG9yV2luZG93OwogCiBjbGFzcyBQYWdl
Q2xpZW50SW1wbCA6IHB1YmxpYyBQYWdlQ2xpZW50IHsKQEAgLTEyOCwxMiArMTMwLDIwIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tbWVuZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFu
Z2UoaW50MzJfdCBuZXdTdHlsZSk7CiAKICAgICB2aXJ0dWFsIFdLVmlldyogd2tWaWV3KCkgY29u
c3QgeyByZXR1cm4gbV93a1ZpZXc7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHVpbnQ2NF90IGFkZERp
Y3RhdGlvbkFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYp
OworICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3Rh
dGlvbkNvbnRleHQpOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRp
dmVVSSgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CiAKICAgICBXS1ZpZXcqIG1fd2tWaWV3OwogICAgIFJl
dGFpblB0cjxXS0VkaXRvclVuZG9UYXJnZXRPYmpDPiBtX3VuZG9UYXJnZXQ7CiAjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIENvcnJlY3Rpb25QYW5lbCBtX2NvcnJl
Y3Rpb25QYW5lbDsKICNlbmRpZgorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAg
IE93blB0cjxEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI+IG1fZGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0K
aW5kZXggMTU0YjQ1NWI2YTM3Y2Y0OTFhZmMzZmU3MGJhODE0NzE0MTM3NWVjYy4uNDBhNWQ2NTQy
ZWY4MDQyNzg5NjFmN2U1NTZmN2FkZmM4MTY2ZWNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KQEAgLTI2LDcgKzI2LDExIEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAKKyNpZiBV
U0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5h
dGl2ZXMuaD4KKyNlbmRpZgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgorI2ltcG9ydCAiRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJEaWN0aW9uYXJ5UG9wdXBJ
bmZvLmgiCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJOYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgiCkBAIC0xMjIsNiArMTI2LDkgQEAgUGFzc093blB0cjxQYWdlQ2xpZW50SW1w
bD4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZShXS1ZpZXcqIHdrVmlldykKIFBhZ2VDbGllbnRJbXBs
OjpQYWdlQ2xpZW50SW1wbChXS1ZpZXcqIHdrVmlldykKICAgICA6IG1fd2tWaWV3KHdrVmlldykK
ICAgICAsIG1fdW5kb1RhcmdldChBZG9wdE5TLCBbW1dLRWRpdG9yVW5kb1RhcmdldE9iakMgYWxs
b2NdIGluaXRdKQorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICwgbV9kaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIoYWRvcHRQdHIobmV3IERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlcikpCisjZW5kaWYKIHsKIH0KIApAQCAtMjEzLDYgKzIyMCw5IEBAIHZvaWQg
UGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCgpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpw
YWdlQ2xvc2VkKCkKIHsKICAgICBbbV93a1ZpZXcgX3BhZ2VDbG9zZWRdOworI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQorICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
LT5jbGVhcigpOworI2VuZGlmCiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbGF1bmNo
UHJvY2VzcygpCkBAIC01MjgsNSArNTM4LDM3IEBAIGJvb2wgUGFnZUNsaWVudEltcGw6OmV4ZWN1
dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcpCiB7
CiAgICAgcmV0dXJuIFttX3drVmlldyBfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3I6TlNT
ZWxlY3RvckZyb21TdHJpbmcoc2VsZWN0b3JTdHJpbmcpXTsKIH0KKyAgICAKK3VpbnQ2NF90IFBh
Z2VDbGllbnRJbXBsOjphZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5T
VGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKKyAgICByZXR1cm4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIt
PmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNl
bmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVV
SShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCisgICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwgIWlzVmlld0luV2luZG93KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+c2hvd0Fs
dGVybmF0aXZlcyhtX3drVmlldywgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9u
Q29udGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0RpY3Rh
dGlvbkFsdGVybmF0aXZlVUkoKQoreworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQor
ICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5kaXNtaXNzQWx0ZXJuYXRpdmVz
KCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlRGljdGF0aW9uQWx0
ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisjaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPnJl
bW92ZUFsdGVybmF0aXZlcyhkaWN0YXRpb25Db250ZXh0KTsKKyNlbmRpZgorfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQppbmRleCA3Zjk1NzlhNjJhNzc5MDgzZjJhZmEzNmIzYTI2M2QxYmQ4MTMzOTVjLi4xMDhhMjJk
NjgzNjMxNWZmOTZkNWJmNzlhNWI3OTRiMzIxOWNjNjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC0yNiw2ICsyNiwxMiBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJXS1ZpZXcuaCIKIAorI2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlLmgiCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBL
aXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+CisjaW1wb3J0IDxBcHBLaXQvTlNBdHRyaWJ1dGVkU3Ry
aW5nLmg+CisjZW5kaWYKKwogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAi
RGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKQEAgLTEx
NTEsNiArMTE1NywyMiBAQCBzdGF0aWMgY29uc3Qgc2hvcnQga0lPSElERXZlbnRUeXBlU2Nyb2xs
ID0gNjsKICAgICBbc2VsZiBpbnNlcnRUZXh0OnN0cmluZyByZXBsYWNlbWVudFJhbmdlOk5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApXTsKIH0KIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQorc3RhdGljIHZvaWQgY29sbGVjdERpY3RhdGlvblRleHRBbHRlcm5hdGl2ZXMoTlNBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JiBh
bHRlcm5hdGl2ZXMpIHsKKyAgICBOU1JhbmdlIGVmZmVjdGl2ZVJhbmdlID0gTlNNYWtlUmFuZ2Uo
MCwgMCk7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CisgICAgZG8g
eworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbc3RyaW5nIGF0dHJpYnV0ZXNB
dEluZGV4OmVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uIGVmZmVjdGl2ZVJhbmdlOiZlZmZlY3RpdmVS
YW5nZV07CisgICAgICAgIGlmICghYXR0cmlidXRlcykKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBOU1RleHRBbHRlcm5hdGl2ZXMgKnRleHRBbHRlcm5hdGl2ZXMgPSBbYXR0cmlidXRlcyBv
YmplY3RGb3JLZXk6TlNUZXh0QWx0ZXJuYXRpdmVzQXR0cmlidXRlTmFtZV07CisgICAgICAgIGlm
ICh0ZXh0QWx0ZXJuYXRpdmVzKQorICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UodGV4dEFsdGVybmF0aXZlcywgZWZmZWN0aXZlUmFuZ2UpKTsK
KyAgICAgICAgZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24gPSBOU01heFJhbmdlKGVmZmVjdGl2ZVJh
bmdlKTsKKyAgICB9IHdoaWxlIChlZmZlY3RpdmVSYW5nZS5sb2NhdGlvbiA8IGxlbmd0aCk7Cit9
CisjZW5kaWYKKwogLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5n
ZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCiB7CiAgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJp
bmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOwpA
QCAtMTE2Nyw3ICsxMTg5LDEyIEBAIHN0YXRpYyBjb25zdCBzaG9ydCBrSU9ISURFdmVudFR5cGVT
Y3JvbGwgPSA2OwogICAgIE5TU3RyaW5nICp0ZXh0OwogICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRo
b2QgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb247CiAKKyAgICBW
ZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXM7CisK
ICAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCisgICAgICAgIGNvbGxlY3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKHN0cmluZywg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyNlbmRpZgogICAgICAgICAvLyBGSVhNRTogV2UgaWdu
b3JlIG1vc3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJpbmcsIHNvIGZvciBleGFtcGxlIGluc2Vy
dGluZyBmcm9tIENoYXJhY3RlciBQYWxldHRlIGxvc2VzIGZvbnQgYW5kIGdseXBoIHZhcmlhdGlv
biBkYXRhLgogICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOwogICAgIH0gZWxzZQpAQCAt
MTE4Nyw3ICsxMjE0LDExIEBAIHN0YXRpYyBjb25zdCBzaG9ydCBrSU9ISURFdmVudFR5cGVTY3Jv
bGwgPSA2OwogCiAgICAgU3RyaW5nIGV2ZW50VGV4dCA9IHRleHQ7CiAgICAgZXZlbnRUZXh0LnJl
cGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcg
aXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCi0gICAgYm9vbCBldmVudEhhbmRs
ZWQgPSBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQoZXZlbnRUZXh0LCByZXBsYWNlbWVudFJhbmdl
LmxvY2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpKTsKKyAgICBib29sIGV2ZW50
SGFuZGxlZDsKKyAgICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVzLnNpemUoKSkKKyAgICAgICAg
ZXZlbnRIYW5kbGVkID0gX2RhdGEtPl9wYWdlLT5pbnNlcnREaWN0YXRlZFRleHQoZXZlbnRUZXh0
LCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50UmFuZ2Up
LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGVsc2UKKyAgICAgICAgZXZlbnRIYW5kbGVk
ID0gX2RhdGEtPl9wYWdlLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5s
b2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSk7CiAKICAgICBpZiAocGFyYW1l
dGVycykKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVFZmZl
Y3RzIHw9IGV2ZW50SGFuZGxlZDsKQEAgLTI4NTUsNiArMjg4NiwxMyBAQCBzdGF0aWMgTlNTdHJp
bmcgKnBhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoKE5TU3RyaW5nICpwYXRoKQogICAgIF9k
YXRhLT5fcGFnZS0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KHJlc3VsdCk7CiB9CiAKKy0g
KHZvaWQpaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZTooTlNTdHJpbmcgKilhbHRl
cm5hdGl2ZQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTElPTikKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUFjY2VwdGVk
RGljdGF0aW9uQWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOworI2VuZGlmCit9CisKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCmluZGV4IGFkNDZkMGFhYWJkZDU0ZDJi
ODVlMTIxZDljOTg4MjFkMzIxOTc0MTUuLjllMzdjMTBmYmJjZjY5MzczYjgyMDg2ZTVmOGU5ZTM1
MDA2ZjQ0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3SW50ZXJuYWwuaApAQCAtOTYsNSArOTYsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLSAo
TlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50VGFnOwogLSAodm9pZCloYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQ6KE5TU3RyaW5nKilyZXN1bHQ7CistICh2b2lkKWhhbmRsZUFjY2VwdGVk
RGljdGF0aW9uQWx0ZXJuYXRpdmU6KE5TU3RyaW5nKilhbHRlcm5hdGl2ZTsKIAogQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggNDk5OTAxYWQzNmEwOTg2NzViNjc0
NzI3NTIyMTIyMjkyZDBiMDk5Mi4uM2NjMWFiYzQxODY1ZjdhNDJmNjQzOGMyZDJlYTliNjY1NDYz
Yzg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSAiUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAKIE9CSkNfQ0xB
U1MgV0tWaWV3OworT0JKQ19DTEFTUyBOU1RleHRBbHRlcm5hdGl2ZXM7CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTkyLDYgKzE5MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHJlY29tbWVuZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHls
ZSkgPSAwOwogICAgIAogICAgIHZpcnR1YWwgV0tWaWV3KiB3a1ZpZXcoKSBjb25zdCA9IDA7Cisg
ICAgCisgICAgdmlydHVhbCB1aW50NjRfdCBhZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoY29uc3Qg
UmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNo
b3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlv
bkNvbnRleHQpID0gMDsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9s
bGJhcnNGb3JNYWluRnJhbWUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCmluZGV4IDNlNjMyYWI0ZjU3ZDVjZWYzYzMwYTA4ZDEwZDNkZTM1YWQ1
ZjZjMzcuLmI3YzIxZjhkNGM4ZDhjZTIzMmUzNzUwZDE2MTMwMWJmOGE1NTZkZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0zNzE1LDYgKzM3MTUsMzIg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBT
dHJpbmcmIHJlc3VsdCkKICAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpIYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOwogI2Vu
ZGlmCiB9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVy
bmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUpCit7CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQorICAgIGlm
ICghaXNDbG9zZWQoKSkKKyAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpIYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGFsdGVybmF0aXZlKSwgbV9wYWdl
SUQsIDApOworI2VuZGlmCit9CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlv
bkNvbnRleHQpCit7CisgICAgbV9wYWdlQ2xpZW50LT5zaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVV
SShib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0KTsKK30KKwordm9p
ZCBXZWJQYWdlUHJveHk6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkKK3sKKyAgICBt
X3BhZ2VDbGllbnQtPmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0
aW9uQ29udGV4dCkKK3sKKyAgICAKK30KKyNlbmRpZgorCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCBiNDA5ZjA0ZmQyNGY2ZDBlMGFiZTAzNjhiYjc2MTNkYzg2NzM1MTU0Li4z
N2VjMjdjMzRiNzBjYzVkMWQwZTNmOTVhODExYzFiZTJhNzE2MjIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiV2Vi
UG9wdXBNZW51UHJveHkuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJVSUNsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RyYWdTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVz
dWx0Lmg+CkBAIC0xMDYsNiArMTA3LDcgQEAgY2xhc3MgUVF1aWNrTmV0d29ya1JlcGx5OwogI2Vs
c2UKIGNsYXNzIFdLVmlldzsKICNlbmRpZgorc3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtMzQ1LDYgKzM0Nyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwogICAgIHZvaWQgY2FuY2VsQ29tcG9z
aXRpb24oKTsKICAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRf
dCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOwor
ICAgIGJvb2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3Qg
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25z
dCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KTsKICAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3Qm
IGxlbmd0aCk7CiAgICAgdm9pZCBnZXRTZWxlY3RlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwg
dWludDY0X3QmIGxlbmd0aCk7CiAgICAgdm9pZCBnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJh
bmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgsIEF0dHJpYnV0ZWRTdHJpbmcm
KTsKQEAgLTYxMiw2ICs2MTUsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
dm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpOwor
ICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcm
IGFsdGVybmF0aXZlKTsKICNlbmRpZgogCiAgICAgc3RhdGljIHZvaWQgc2V0RGVidWdQYWludEZs
YWdzKFdLUGFnZURlYnVnUGFpbnRGbGFncyBmbGFncykgeyBzX2RlYnVnUGFpbnRGbGFncyA9IGZs
YWdzOyB9CkBAIC04NzEsNiArODc1LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgU3RyaW5nJiByZXN1bHQpOwogICAgIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
Zyk7CiAjZW5kaWYgLy8gIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFVT
RShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVybmF0
aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0
LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICB2b2lkIGRpc21pc3NEaWN0YXRpb25B
bHRlcm5hdGl2ZVVJKCk7CisgICAgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisjZW5kaWYKICNlbmRpZiAvLyBQTEFURk9STShNQUMp
CiAKICAgICB2b2lkIGNsZWFyTG9hZERlcGVuZGVudENhbGxiYWNrcygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNGMzNWM0
ZGFmYTRlM2Q5NWMwOWQzNjFhZmVhMTY5ZDQxNTJhNmQzZS4uZDMwYzE5ZmYxNmRiMDVlOTM0N2Qy
Y2VkNTExOGQ1MjQ5Y2RmYzY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yNzYsNiArMjc2LDEyIEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CiAgICAgUmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShpbnQzMl90
IHJlc3BvbnNlVHlwZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZW1lbnRT
dHJpbmcpOwogI2VuZGlmCiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBT
aG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRpbmdCb3hP
ZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKKyAgICBEaXNtaXNzRGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSSgpCisgICAgUmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgIyBXaW5kb3dzIDcgR2VzdHVyZSBNZXNzYWdlcwogICAgIFNldEdlc3R1cmVSZWFjaGVkU2Ny
b2xsaW5nTGltaXQoYm9vbCBsaW1pdFJlYWNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZGUxNGFjOTFjMGVjZDIwM2MwNThkZDU0MWIwMDcwNzZhYjdlNzY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXJfaAorI2RlZmluZSBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQorT0JKQ19DTEFTUyBOU1RleHRBbHRlcm5hdGl2ZXM7CitP
QkpDX0NMQVNTIFdLVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERpY3RhdGlv
bkNvbnRleHRDb250cm9sbGVyOworCitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIgeworcHVibGljOgorICAgIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcigpIHsgfQor
ICAgIC8vIFJldHVybnMgYSBkaWN0YXRpb24gY29udGV4dCBJRC4KKyAgICB1aW50NjRfdCBhZGRB
bHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKTsKKyAgICB2
b2lkIGNsZWFyKCk7CisgICAgdm9pZCBzaG93QWx0ZXJuYXRpdmVzKFdLVmlldyosIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nLCB1aW50NjRfdCBk
aWN0YXRpb25Db250ZXh0KTsKKyAgICB2b2lkIGRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKKyAgICB2
b2lkIHJlbW92ZUFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUoTlNTdHJpbmcqIGFjY2Vw
dGVkQWx0ZXJuYXRpdmUsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIE5TVGV4dEFsdGVybmF0
aXZlcyopOworICAgIAorICAgIGNsYXNzIERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyKCkgeyB9CisgICAg
ICAgIHVpbnQ2NF90IGFkZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJu
YXRpdmVzPiYpOworICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIE5TVGV4dEFsdGVybmF0
aXZlcyogYWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KTsKKyAgICAgICAgdm9pZCByZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250
ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworICAgICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgaW52YWxpZENvbnRleHQgPSAwOworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50NjRfdCwgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4gPiBIYXNoTWFw
VHlwZTsKKyAgICAgICAgSGFzaE1hcFR5cGUgbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXA7CisgICAg
fTsKKworICAgIERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyIG1fY29udGV4dENvbnRyb2xsZXI7
CisgICAgUmV0YWluUHRyPFdLVmlldz4gbV92aWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgorI2VuZGlmIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1MTk1MzU4N2Q1ZmQxZWMw
MTYwZGYyMTM4MDRlMmYyYWZiMzZlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbQpAQCAtMCww
ICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgiCisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKKyNpbXBvcnQgPEFwcEtpdC9OU1NwZWxsQ2hlY2tlci5oPgorI2ltcG9ydCA8QXBw
S2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1aW50NjRf
dCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9s
bGVyOjphZGRBbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4m
IGFsdGVybmF0aXZlcykKK3sKKyAgICB1aW50NjRfdCBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50NjRfdD4oYWx0ZXJuYXRpdmVzLmdldCgpKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBpbnZhbGlkQ29udGV4dDsKKyAgICBzdGQ6OnBhaXI8SGFzaE1hcFR5cGU6Oml0
ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5hZGQoY29udGV4
dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICBpZiAocmVzdWx0LmZpcnN0ID09IG1fYWx0ZXJuYXRpdmVz
T2JqZWN0TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaW52YWxpZENvbnRleHQ7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gY29udGV4dDsKK30KKworTlNUZXh0QWx0ZXJuYXRpdmVzKiBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjph
bHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
Cit7CisgICAgSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1fYWx0ZXJuYXRpdmVz
T2JqZWN0TWFwLmZpbmQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgaWYgKGl0ciA9PSBtX2FsdGVy
bmF0aXZlc09iamVjdE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJu
IGl0ci0+c2Vjb25kLmdldCgpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckRp
Y3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX2FsdGVy
bmF0aXZlc09iamVjdE1hcC5yZW1vdmUoZGljdGF0aW9uQ29udGV4dCk7Cit9CisKK3ZvaWQgRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6
Y2xlYXIoKQoreworICAgIG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmNsZWFyKCk7Cit9CisKK3Vp
bnQ2NF90IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6YWRkQWx0ZXJuYXRpdmVzKGNv
bnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2ZXMpCit7CisgICAg
cmV0dXJuIG1fY29udGV4dENvbnRyb2xsZXIuYWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlcyk7
Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpjbGVhcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dENvbnRyb2xsZXIuY2xlYXIoKTsKK30KKwordm9pZCBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnNob3dBbHRlcm5hdGl2ZXMoV0tWaWV3KiB2aWV3LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFN0cmluZywgdWlu
dDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBkaXNtaXNzQWx0ZXJuYXRpdmVzKCk7Cisg
ICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXcgPSB2aWV3OworICAg
IE5TVGV4dEFsdGVybmF0aXZlcyogYWx0ZXJuYXRpdmVzID0gbV9jb250ZXh0Q29udHJvbGxlci5h
bHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpOworICAgIGlm
ICghYWx0ZXJuYXRpdmVzKQorICAgICAgICByZXR1cm47CisgICAgTlNTcGVsbENoZWNrZXIqIHNw
ZWxsQ2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAgIFtz
cGVsbENoZWNrZXIgc2hvd0NvcnJlY3Rpb25JbmRpY2F0b3JPZlR5cGU6TlNDb3JyZWN0aW9uSW5k
aWNhdG9yVHlwZUd1ZXNzZXMgcHJpbWFyeVN0cmluZzphbHRlcm5hdGl2ZXMucHJpbWFyeVN0cmlu
ZyBhbHRlcm5hdGl2ZVN0cmluZ3M6YWx0ZXJuYXRpdmVzLmFsdGVybmF0aXZlU3RyaW5ncyBmb3JT
dHJpbmdJblJlY3Q6Ym91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nIHZpZXc6bV92aWV3LmdldCgp
IGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcqIGFjY2VwdGVkU3RyaW5nKSB7CisgICAgICAg
IGlmIChhY2NlcHRlZFN0cmluZykKKyAgICAgICAgICAgIGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRp
dmUoYWNjZXB0ZWRTdHJpbmcsIGRpY3RhdGlvbkNvbnRleHQsIGFsdGVybmF0aXZlcyk7CisgICAg
fV07Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpoYW5kbGVBY2Nl
cHRlZEFsdGVybmF0aXZlKE5TU3RyaW5nKiBhY2NlcHRlZEFsdGVybmF0aXZlLCB1aW50NjRfdCBk
aWN0YXRpb25Db250ZXh0LCBOU1RleHRBbHRlcm5hdGl2ZXMqIGFsdGVybmF0aXZlcykKK3sKKyAg
ICBbYWx0ZXJuYXRpdmVzIG5vdGVTZWxlY3RlZEFsdGVybmF0aXZlU3RyaW5nOmFjY2VwdGVkQWx0
ZXJuYXRpdmVdOworICAgIG1fY29udGV4dENvbnRyb2xsZXIucmVtb3ZlQWx0ZXJuYXRpdmVzRm9y
RGljdGF0aW9uQ29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKKyAgICBbbV92aWV3LmdldCgpIGhh
bmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmU6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07Cisg
ICAgbV92aWV3LmNsZWFyKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOjpkaXNtaXNzQWx0ZXJuYXRpdmVzKCkKK3sKKyAgICBpZiAoIW1fdmlldykKKyAgICAgICAg
cmV0dXJuOworICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNz
Q29ycmVjdGlvbkluZGljYXRvckZvclZpZXc6bV92aWV3LmdldCgpXTsKK30KKwordm9pZCBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlcyh1aW50NjRfdCBk
aWN0YXRpb25Db250ZXh0KQoreworICAgIG1fY29udGV4dENvbnRyb2xsZXIucmVtb3ZlQWx0ZXJu
YXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKK30KK30KKyNlbmRp
ZiAvLyBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI4MDAyMzMxMTc4YmFkMzkxNDM4NWY5NTQ4NTk5MTJkZGJkNjk2Y2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRBbHRlcm5hdGl2
ZVdpdGhSYW5nZV9oCisjZGVmaW5lIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK09CSkNf
Q0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOworCitzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlIHsKKyAgICBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoTlNUZXh0QWx0ZXJuYXRpdmVzKiBh
bkFsdGVybmF0aXZlcywgTlNSYW5nZSBhUmFuZ2UpOworICAgIFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZShjb25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFub3RoZXIpOworICAgIE5TUmFu
Z2UgcmFuZ2U7CisgICAgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4gYWx0ZXJuYXRpdmVz
OworfTsKKworI2Vsc2UKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UgeyB9OworI2Vu
ZGlmCisKKyNlbmRpZiAvLyBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MDYxNTQyZGE5ZGViMGUxOWM1ZWIxYTg3N2Q0NDQyOGY5ODdiZWNhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UubW0KQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgorCisjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRp
dmVzLmg+CisKK1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlKE5TVGV4dEFsdGVybmF0aXZlcyogYW5BbHRlcm5hdGl2ZXMsIE5TUmFuZ2UgYVJhbmdlKQor
OiByYW5nZShhUmFuZ2UpCissIGFsdGVybmF0aXZlcyhhbkFsdGVybmF0aXZlcykKK3sKK30KKwor
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoY29uc3Qg
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKQorOiByYW5nZShhbm90aGVyLnJhbmdl
KQorLCBhbHRlcm5hdGl2ZXMoYW5vdGhlci5hbHRlcm5hdGl2ZXMpCit7Cit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXgg
MzU4NDcxODJlMTQwYjdkODRkMDk4MzQ2YjY4YjczZWIxYTA4NjRmMC4uY2FkYzk0NDc3M2VkY2M1
MmQzNThkYjM4MTliZThmYmUzZjFmZjhiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTM1LDkgKzM1LDExIEBACiAjaW1wb3J0ICJQ
YWdlQ2xpZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogI2ltcG9ydCAiU3RyaW5n
VXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKICNpbXBv
cnQgIlRleHRDaGVja2VyLmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZS5oPgpAQCAtMTk4LDYgKzIwMCwzNSBAQCBib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydAogICAg
IHJldHVybiBoYW5kbGVkOwogfQogCitib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8VGV4dEFsdGVybmF0aXZl
V2l0aFJhbmdlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQorICAgIGlmIChkaWN0YXRpb25BbHRlcm5hdGl2ZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJl
cGxhY2VtZW50UmFuZ2VFbmQpOworICAgIAorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBk
aWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UgPSBkaWN0YXRpb25B
bHRlcm5hdGl2ZXNbaV07CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBtX3Bh
Z2VDbGllbnQtPmFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZVdpdGhSYW5nZS5h
bHRlcm5hdGl2ZXMpOworICAgICAgICBpZiAoZGljdGF0aW9uQ29udGV4dCkKKyAgICAgICAgICAg
IGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uKGFsdGVybmF0aXZlV2l0aFJhbmdlLnJhbmdlLmxvY2F0aW9uLCBhbHRlcm5hdGl2
ZVdpdGhSYW5nZS5yYW5nZS5sZW5ndGgsIGRpY3RhdGlvbkNvbnRleHQpKTsKKyAgICB9CisKKyAg
ICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50
UmFuZ2VFbmQpOworICAgIAorICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CisgICAgcHJvY2Vzcygp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0RGljdGF0ZWRUZXh0KHRleHQsIHJl
cGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCwgZGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbnMpLCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0RGljdGF0ZWRUZXh0OjpS
ZXBseShoYW5kbGVkLCBtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOworICAgIHJldHVybiBoYW5k
bGVkOworI2Vsc2UKKyAgICByZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFnZVBy
b3h5OjpnZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgp
CiB7CiAgICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE3OWM5NjFmNDdkYTc5M2RmNDE4
ZTA3NWUzODdiMzNiYWEzYjU2YmUuLmMyZTAwNjRiZjE4YTI4MjI4MjZjNzA4MDNlNWNmN2MxMGJh
NmUxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg4Myw2ICs4ODMsOSBAQAogCQlDRENBODVDOTEzMkFCQTRFMDBFOTYxREYg
LyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0RDQTg1RDUxMzJBQzJCMzAwRTk2
MURGIC8qIElPS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQ0E4NUQ0MTMyQUMyQjMwMEU5NjFERiAvKiBJT0tpdC5mcmFtZXdv
cmsgKi87IH07CiAJCUNEQ0E4NUVFMTMyQUQ3MDEwMEU5NjFERiAvKiBXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RDQTg1REUxMzJBRDA1MzAwRTk2MURGIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHlNYWMubW0gKi87IH07CisJCUNFNjI1QjZFMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRTYyNUI2QzE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLm1tICovOyB9OworCQlDRTYyNUI2RjE1MUI2RjQ4MDA4OUJDRDggLyog
RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTYyNUI2RDE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggKi87IH07CisJCUNFRDJCNzgyMTUxQTVFNDYwMDNB
QkNFRiAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUE2OUQzQjE1MUE0MUM0MDBGNzQzREUgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovOyB9OwogCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJC
MzkgLyogV2ViUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3Bw
ICovOyB9OwogCQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MzExRkY0
QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi87IH07CiAJCUQzQjk0ODQ4MTFGRjRCNjUw
MDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNl
YXJjaFBvcHVwTWVudS5jcHAgKi87IH07CkBAIC0xOTM3LDYgKzE5NDAsMTAgQEAKIAkJQ0RDQTg1
QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRENBODVENDEzMkFDMkIzMDBFOTYx
REYgLyogSU9LaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJT0tpdC5mcmFtZXdvcms7
IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcms7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUNEQ0E4NURFMTMyQUQwNTMwMEU5NjFERiAvKiBX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0U2MjVCNkMxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0U2MjVCNkQxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0VBNjlEM0IxNTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VBNjlEM0Mx
NTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBUZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDIxMUZG
NEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBN
ZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBv
cHVwTWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDMyLDYgKzM0Mzks
MTAgQEAKIAkJCQkxQTY0MjkyQzEyREU1Rjk4MDBDQUFFMkMgLyogQmFja2luZ1N0b3JlTWFjLm1t
ICovLAogCQkJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAq
LywKIAkJCQlCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tICov
LAorCQkJCUNFNjI1QjZEMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuaCAqLywKKwkJCQlDRTYyNUI2QzE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tICovLAorCQkJCUNFQTY5RDNDMTUxQTQxQzQwMEY3NDNE
RSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLywKKwkJCQlDRUE2OUQzQjE1MUE0MUM0
MDBGNzQzREUgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovLAogCQkJCTFBQTQxN0VE
MTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSAqLywKIAkJCQkxQUYwNUQ4NTE0
Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oICov
LAogCQkJCTFBRjA1RDg0MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYVByb3h5Lm1tICovLApAQCAtNDE3OCw2ICs0MTg5LDcgQEAKIAkJCQkzNzYwODgyMzE1
MDQxNEY3MDBGQzgyQzcgLyogV0tSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
OTQ4NDA0MTUwQzM1MDYwMEU1MkNFOSAvKiBXZWJSZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc5NDg0MDkxNTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUNFNjI1QjZGMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDY1MSw2ICs0NjYzLDcgQEAKIAkJ
CQlDMDFBMjYwMTEyNjYyRjIxMDBDOUVENTUgLyogU2hhcmVhYmxlQml0bWFwQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUEyNEJGM0ExMjA4OTZBNjAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeU1h
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAgLyogU3Rh
dGlzdGljc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0VEMkI3ODIxNTFBNUU0NjAwM0FC
Q0VGIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
QTQxN0VGMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjUwMTIyMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0Y1MDFCNDEyM0VGNjAyMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNo
ZXJNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTQ5MjEsNiArNDkzNCw3IEBACiAJCQkJMzc2MDg4
MjIxNTA0MTRGNzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTM3OTQ4NDAzMTUwQzM1MDYwMEU1MkNFOSAvKiBXZWJSZW5kZXJMYXllci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzNzk0ODQwODE1MEM0Qjk3MDBFNTJDRTkgLyogV0tSZW5kZXJMYXllci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlDRTYyNUI2RTE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaAppbmRleCA3OGVhOGRiZmVlMTRmYzc3ZjA2NjY1MjA4ZTZmNTllMWIwNTkwMTMyLi5iYjQ4
NWFjMmRhMTU4ZjNkYzg1MjFiYTc3OTNkZGM0NzA4ZmEwMTBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKQEAgLTE0OCw2ICsxNDgsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgT1ZFUlJJREU7CiAj
ZW5kaWYKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2
NF90IGRpY3RhdGlvbkNvbnRleHQpIE9WRVJSSURFOworI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RL
KQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUoKSBPVkVSUklERTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCmluZGV4IDUyM2NiZGY3MjA2
M2I0ZDFkNzk0YzgxYWM1MGVmMTYwNGIxZTIyYmYuLmU2NWViZTBlYzMyZDI5MjgxMzk3OGJmZjBj
N2E1ODkzOGI1MmY5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KQEAg
LTI2Miw0ICsyNjIsMjEgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblIKIH0KICNlbmRpZgogCisj
aWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGlj
dGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShib3Vu
ZGluZ0JveE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0KSk7Cit9CisgICAgCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKQoreworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaXNtaXNzRGljdGF0aW9uQWx0
ZXJuYXRpdmVVSSgpKTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlbW92ZURpY3RhdGlv
bkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMo
ZGljdGF0aW9uQ29udGV4dCkpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDlm
OGZiOGUyNDZiMTFiNDIwZGVlZjBjOGQxOWNkMTZlYzAwYTkwMDkuLjBhMTA0ZmY4MWE5MWMxMjRh
ODNkZTI1Y2Y4NTE1Yjc5YjMxM2QyZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTI5OTYsNyArMjk5Niw4IEBAIGJvb2wgV2ViUGFnZTo6
Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CiAgICAgcmV0dXJuIHBsYXRmb3JtQ2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKIH0KIAotI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiB2
b2lkIFdlYlBhZ2U6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJl
c3VsdCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTMwMDQsNiArMzAwNSwxNyBAQCB2b2lkIFdlYlBhZ2U6
OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKICAgICAg
ICAgcmV0dXJuOwogICAgIGZyYW1lLT5lZGl0b3IoKS0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVz
dWx0KHJlc3VsdCk7CiB9CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQordm9pZCBX
ZWJQYWdlOjpoYW5kbGVBY2NlcHRlZERpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYg
YWx0ZXJuYXRpdmUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGZyYW1lLT5lZGl0b3IoKS0+aGFuZGxlQWNjZXB0ZWREaWN0YXRpb25BbHRlcm5h
dGl2ZShhbHRlcm5hdGl2ZSk7Cit9CisjZW5kaWYKKyNlbmRpZgogI2VuZGlmCiAKIHZvaWQgV2Vi
UGFnZTo6c2ltdWxhdGVNb3VzZURvd24oaW50IGJ1dHRvbiwgV2ViQ29yZTo6SW50UG9pbnQgcG9z
aXRpb24sIGludCBjbGlja0NvdW50LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91Ymxl
IHRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRl
eCBlOWRlMmVkYzBjOGYzNTI5MTg1YTU2MTlkYTU2MjRmNjEzOTQxYjNmLi5iNDllYWNmODYzMTc5
ZWNlNzI1MjU3MDc1YzZjZTJhNGQzYzViNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJTYW5kYm94
RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2Vi
VW5kb1N0ZXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9F
ZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KQEAgLTQwMyw3
ICs0MDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZl
bnQoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYgcmVzdWx0KTsKICAgICB2b2lk
IGFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVudE51bWJlciwgY29uc3QgV2ViS2l0OjpXZWJNb3Vz
ZUV2ZW50JiwgYm9vbCYgcmVzdWx0KTsKICAgICBib29sIHBlcmZvcm1Ob25FZGl0aW5nQmVoYXZp
b3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsKLQorICAgIHZvaWQgaW5zZXJ0RGljdGF0ZWRU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCBi
b29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwogI2VsaWYgUExBVEZPUk0oV0lO
KQogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25T
dHJpbmcpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGNvbXBv
c2l0aW9uU3RyaW5nLCBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVy
bGluZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90IGN1cnNvclBvc2l0aW9uKTsKQEAgLTQ4NSw5ICs0
ODYsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCB1bm1hcmtBbGxNaXNzcGVsbGluZ3MoKTsKICAg
ICB2b2lkIHVubWFya0FsbEJhZEdyYW1tYXIoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgdm9pZCBoYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJik7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
TElPTikKKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJik7CisjZW5kaWYKKyNlbmRpZgogI2VuZGlmCiAKICAgICAvLyBGb3IgdGVzdGluZyBw
dXJwb3NlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgppbmRleCAxOTM1ZmUzMzM3Zjc1NDAwZjQzMTMxZDUzMzdmNDQwYmI4
NmMyZWQ5Li5mNjhiYTRiZmU0NDgwNmIyMDhhZDdmOWE2N2Y2MDk2MmQ4YjJjNjZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgpAQCAtMjQxLDYgKzI0MSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIEV4ZWN1
dGVLZXlwcmVzc0NvbW1hbmRzKFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVk
Q29tbWFuZHMpIC0+IChib29sIGhhbmRsZWQsIFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUp
CiAgICAgU2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVu
dCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQogICAgIEFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVu
dE51bWJlciwgV2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCisg
ICAgSW5zZXJ0RGljdGF0ZWRUZXh0KFdURjo6U3RyaW5nIHRleHQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgV1RGOjpWZWN0b3I8
V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4gZGljdGF0aW9uQWx0ZXJuYXRp
dmVzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIEZJWE1FOiBVbmlmeSB3aXRoIE1hYyBjb3Vu
dGVycGFydHMuCkBAIC0yNTcsNyArMjU4LDEyIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAg
IEZpbmRab29tYWJsZUFyZWFGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCisjaWYgUExBVEZPUk0oTUFDKQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKICAgICBIYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoU3RyaW5nIHJlc3VsdCkKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQorICAgIEhhbmRsZUFjY2VwdGVkRGljdGF0aW9u
QWx0ZXJuYXRpdmUoU3RyaW5nIGFsdGVybmF0aXZlKQorI2VuZGlmCisjZW5kaWYKICNlbmRpZgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCmluZGV4IGVjYTUyM2QxZmNiZWZmOTY3ZjBhYjBkMjM0ZGM3MGRhZWQyZjM4NWQuLjYy
MTA5YTk0Njg3ODE3OGRjYzE0NGZkMDYxZGNkMGE5NWU5MGE2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTI4Niw2
ICsyODYsMjEgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW4KICAgICBuZXdTdGF0ZSA9IGVkaXRv
clN0YXRlKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBs
YWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCBib29sJiBoYW5kbGVk
LCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgCisgICAgaWYgKHJl
cGxhY2VtZW50UmFuZ2VTdGFydCAhPSBOU05vdEZvdW5kKSB7CisgICAgICAgIFJlZlB0cjxSYW5n
ZT4gcmVwbGFjZW1lbnRSYW5nZSA9IGNvbnZlcnRUb1JhbmdlKGZyYW1lLCBOU01ha2VSYW5nZShy
ZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQgLSByZXBsYWNlbWVudFJh
bmdlU3RhcnQpKTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCisgICAgICAgICAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlcGxhY2Vt
ZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgfQorCisgICAgQVNT
RVJUKCFmcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpOworICAgIGhhbmRsZWQgPSBm
cmFtZS0+ZWRpdG9yKCktPmluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCBkaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9ucywgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCk7CisgICAgbmV3
U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdl
KHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKIHsKICAgICBsb2NhdGlvbiA9
IE5TTm90Rm91bmQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134925</attachid>
            <date>2012-03-30 18:41:17 -0700</date>
            <delta_ts>2012-04-02 22:08:07 -0700</delta_ts>
            <desc>Patch (v5)</desc>
            <filename>bug-82503-20120330184116.patch</filename>
            <type>text/plain</type>
            <size>310960</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRkOWNlNGI0YTM1Yzc0
MWJhNzgxZmZhOTE4NzQwMmM2YjExMTEzNi4uODNhMjI4MTZlZjYyZmU3YjkwZTNiMTZiMTg4MzY4
YmY0ZjdlNzJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1MyBAQAorMjAxMi0wMy0zMCAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0ZXJu
YXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIE9TWCBzcGVjaWZpYyBwYXRjaCB0aGF0
IGFsbG93cyBXZWJLaXQgdG8gdXRpbGl6ZSBBcHBLaXQgVUkgdG8gZGlzcGxheSBhbHRlcm5hdGl2
ZQorICAgICAgICBkaWN0YXRpb24gcmVzdWx0cyBmb3IgYSBnaXZlbiB0ZXh0LiBUbyBhY2hpZXZl
IHRoaXMsIHRoaXMgcmVsYXRpdmVseSBsYXJnZSBwYXRjaCBpbnRyb2R1Y2VkCisgICAgICAgIGZv
bGxvd2luZyBtYWpvciBjaGFuZ2VzOgorCisgICAgICAgIDEuIE1vZGlmaWVkIFRleHRFdmVudCB0
byBob2xkIGRpY3RhdGlvbiByZWxhdGVkIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIHRleHQu
CisgICAgICAgIDIuIEludHJvZHVjZWQgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyB0byBtYXJrIHRleHQgZm9yIHdoaWNoIGRpY3RhdGlvbgorICAgICAgICAgICAgc3lzdGVt
IHByb3ZpZGVkIGFsdGVybmF0aXZlcy4KKyAgICAgICAgMy4gSW50cm9kdWNlZCBEaWN0YXRpb25D
b21tYW5kIHdoaWNoIHdpbGwgYWRkIERpY3RhdGlvbkFsdGVybmF0aXZlIG1hcmtlcnMgdG8gdGV4
dAorICAgICAgICAgICBpbnNlcnRlZCBieSB0aGUgY29tbWFuZC4KKyAgICAgICAgNC4gQWRkZWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KCkgdG8gRWRpdG9yLgorICAgICAgICA1LiBSZW5hbWVkIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciwgd2hp
Y2ggbm93IGNvbnRhaW5zIGxvZ2ljIGZvcgorICAgICAgICAgICBjb250cm9sbGluZyBib3RoIHNw
ZWxsaW5nIGNvcnJlY3Rpb24gVUkgYW5kIGRpY3RhdGlvbiBhbHRlcm5hdGl2ZSBVSS4KKyAgICAg
ICAgNi4gQWRkZWQgbmVjZXNzYXJ5IGludGVyZmFjZSB0byBFZGl0b3JDbGllbnQgc2ltaWxhciB0
byB0aG9zZSBhZGRlZCBmb3IgY29ycmVjdGlvbiBwYW5lbCBVSSBvbiBPU1guCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcik6IENyZWF0ZSBtYXJrZXIgdXNp
bmcgc3VwcGxpZWQgRG9jdW1lbnRNYXJrZXJEZXRhaWxzIG9iamVjdC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnM6OkFsbE1hcmtlcnMpOgorICAgICAgICAoRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKERvY3VtZW50TWFya2VyQ29udHJvbGxlcik6CisgICAgICAgICogZG9tL1RleHRFdmVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbik6
IENyZWF0ZSBUZXh0RXZlbnQgZ2VuZXJhdGVkIGJ5IGRpY3RhdGlvbi4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpUZXh0RXZlbnQpOgorICAgICAgICAq
IGRvbS9UZXh0RXZlbnQuaDoKKyAgICAgICAgKFRleHRFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0RXZlbnQ6OmlzRGljdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBkb20vVGV4dEV2ZW50SW5wdXRUeXBl
Lmg6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDogUmVu
YW1lZCBmcm9tIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZUJvdW5kaW5nQm94SW5Sb290Vmlldyk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZXBsYWNlVGV4dEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUZXh0SW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZvOjpzZXRSYW5nZVdpdGhBbHRlcm5hdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZvOjpjbGVhclJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dEluZm86OnJhbmdlV2l0aEFsdGVybmF0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dEluZm86OnNldERldGFpbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0SW5mbzo6ZGV0YWlscyk6CisgICAgICAgIChBdXRv
Y29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvY29y
cmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpyZXBsYWNlbWVudFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6QXV0b2NvcnJl
Y3Rpb25BbHRlcm5hdGl2ZURldGFpbHMpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVE
ZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6
ZGljdGF0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZURldGFpbHM6OkRpY3RhdGlvbkFsdGVybmF0aXZlRGV0YWlscyk6CisgICAgICAgIChXZWJDb3Jl
OjptYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtl
clR5cGVzRm9yUmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JE
aWN0YXRpb25BbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJzSGF2ZUlkZW50
aWNhbERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6fkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RhcnRBbHRlcm5hdGl2
ZVRleHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRp
bmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3MpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
c2hvdWxkU3RhcnRUaW1lckZvcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hl
Y2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNl
ZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc0RpY3Rh
dGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgKKyAgICAgICAgICB3aXRoIG5ldyBjb2RlIGZvciBkaWN0YXRp
b24gYWx0ZXJuYXRpdmVzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBbHRlcm5hdGl2
ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dERldGFpbHM6
OkFsdGVybmF0aXZlVGV4dERldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0RGV0YWlsczo6fkFsdGVybmF0aXZlVGV4dERldGFpbHMpOgorICAgICAgICAoQWx0ZXJuYXRp
dmVUZXh0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZvOjp+QWx0
ZXJuYXRpdmVUZXh0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZv
OjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dEluZm86OnR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0SW5mbzo6c2V0SXNBY3RpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0SW5mbzo6aXNBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0SW5mbzo6c2V0T3JpZ2luYWxUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dEluZm86Om9yaWdpbmFsVGV4dCk6CisgICAgICAg
IChEaWN0YXRpb25NYXJrZXJEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbk1h
cmtlckRldGFpbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25NYXJrZXJE
ZXRhaWxzOjpvcmlnaW5hbFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uTWFya2Vy
RGV0YWlsczo6ZGljdGF0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25N
YXJrZXJEZXRhaWxzOjpEaWN0YXRpb25NYXJrZXJEZXRhaWxzKToKKyAgICAgICAgKEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKToKKyAgICAgICAg
KiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRUZXh0V2l0aE1hcmtlcnNJbnRvTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjppc0RpY3RhdGlvbkNvbW1hbmQpOgorICAgICAgICAoQ29tcG9zaXRlRWRpdENvbW1hbmQp
OgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHA6IEFk
ZGVkCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb246OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24pOgorICAgICAgICAq
IGVkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oOiBBZGRlZC4gSXQgY29udGFp
bnMgdGhlIHJhbmdlIGluIHdoaWNoIHRoZQorICAgICAgICAgIGlucHV0IHRleHQgaGFzIGFsdGVy
bmF0aXZlIGRpY3RhdGlvbiByZXN1bHQsIGFuZCBhbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZnkgZGlj
dGF0aW9uIGNvbnRleHQuCisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRp
b25Db21tYW5kOjpEaWN0YXRpb25Db21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlv
bkNvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kOjppbnNlcnRU
ZXh0UnVuV2l0aG91dE5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRp
b25Db21tYW5kOjpjb2xsZWN0RGljdGF0aW9uTWFya2Vyc0luUmFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvRGljdGF0aW9uQ29tbWFuZC5oOiBTaW1pbGFyIHRvIFR5cGluZ0NvbW1hbmQsIGJ1dCBh
bGxvd3MgdXMgdG8KKyAgICAgICAgICBwYXNzIGFkZGl0aW9uYWwgZGljdGF0aW9uIHJlbGF0ZWQg
aW5mb3JtYXRpb24gYWxvbmcgd2l0aCB0aGUgdGV4dC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRGljdGF0aW9uQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21t
YW5kOjppc0RpY3RhdGlvbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29t
bWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6IENoYW5nZXMgaW4g
dGhpcyBmaWxlIGFyZSBtYWlubHkgY2F1c2VkIGJ5IHJlbmFtaW5nIG1fc3BlbGxpbmdDb3JyZWN0
aW9uCisgICAgICAgICAgdG8gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpub3RpZnlDb21wb25lbnRzT25DaGFuZ2VkU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
cmVhcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydERpY3RhdGVkVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5k
aW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFr
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1Rv
UmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVs
bENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0
ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
dGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpo
YW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChFZGl0b3IpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUpOgorICAgICAg
ICAoSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6SW5z
ZXJ0VGV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRU
ZXh0Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKEluc2VydFRleHRDb21tYW5kKToKKyAgICAg
ICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAqIGVk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgor
ICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKToKKyAg
ICAgICAgKEVtcHR5RWRpdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9y
Q2xpZW50OjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZl
cyk6CisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlRGljdGF0aW9uSW5wdXRFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9y
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRNYXJrZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRNYXJrZXJMaW5lU3R5bGVGb3JN
YXJrZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxp
bmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oOgorICAgICAgICAoSW5saW5lVGV4dEJveCk6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGcm9tKToKKwogMjAxMi0w
My0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgYSBj
b21waWxlIGFzc2VydCBmb3IgdGhlIHNpemUgb2YgRm9udERlc2NyaXB0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGI3MzFiZDlkNTk0YTMwNjAzYWQ2Y2Y0ZWY4YjhkNjI2YzUzMzMxNGMuLmIyMjFlYmI1M2Q0OWU4
NmE4NDEyYjU1MzE3NTlmNTU0ZDVkNGJmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTItMDMtMzAgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBVSSB0
byBzaG93IGFsdGVybmF0aXZlIHN0cmluZ3Mgb2YgZGljdGF0ZWQgdGV4dC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTAzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VlIFdlYkNvcmUvQ2hhbmdlTG9n
IGZvciBkZXRhaWxzLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMTItMDMtMjIgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPHJha3Vjb0BGcmVlQlNE
Lm9yZz4KIAogICAgICAgICBbQ01ha2VdIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIxMTE3
NzguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZjAwNTlhNzNlN2UxNGQxNWVlNGZiMjQwYjU1YmVkMzUy
Mjk4NjM3Yy4uMmIyNGY3ZDExNGRlOTA5YjAxZTJmMWJjMWY0NDZkY2IyN2E5OWFmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTAzLTMwICBKaWEgUHUgIDxqcHVAYXBw
bGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgVUkgdG8gc2hvdyBhbHRlcm5hdGl2ZSBzdHJpbmdz
IG9mIGRpY3RhdGVkIHRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNlZSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRldGFpbHMuIEEgc2ln
bmlmaWNhbnQgcG9ydGlvbiBvZiB0aGVzZSBjaGFuZ2VzIGFyZQorICAgICAgICBjYXVzZWQgYnkg
cmVuYW1pbmcgc29tZSBjbGFzc2VzIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Db3JyZWN0aW9uUGFuZWwuaDoKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbCk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tOgorICAgICAgICAoY29ycmVj
dGlvbkluZGljYXRvclR5cGUpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9u
UGFuZWwpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKToKKyAg
ICAgICAgKENvcnJlY3Rpb25QYW5lbDo6c2hvdyk6CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWw6
OmRpc21pc3MpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwpOgor
ICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDog
QWRkZWQuIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKyAgICAgICAgICAxKSBSZXRh
aW4gdGhlIGRpY3RhdGlvbiBhbHRlcm5hdGl2ZSBvYmplY3RzIHByb3ZpZGVkIGJ5IEFwcEtpdCwg
YW5kIHByb3ZpZGUgYW4KKyAgICAgICAgICAgICBpbnRlZ2VyIHRvIG9iamVjdCBtYXBwaW5nIGZv
ciBXZWJDb3JlLgorICAgICAgICAgIDIpIENvbnRyb2wgZGljdGF0aW9uIGFsdGVybmF0aXZlIFVJ
LgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKToKKyAgICAgICAgKERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyKToKKyAgICAgICAgKERpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyKToKKyAgICAgICAgKERp
Y3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6
OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9E
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW06IEFkZGVkLgorICAgICAgICAoRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6YWRk
QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRl
eHQpOgorICAgICAgICAoRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25D
b250ZXh0Q29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCk6
CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRl
eHRDb250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI6OmFkZEFsdGVybmF0aXZlcyk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI6OmNsZWFyKToKKyAgICAgICAgKERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cjo6c2hvd0FsdGVybmF0aXZlcyk6CisgICAgICAgIChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmUpOgorICAgICAgICAoRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyOjpkaXNtaXNzQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaDogQWRkZWQuIEEgc2lt
cGxlIHN0cnVjdCB0aGF0IGhlbHBzIHRvCisgICAgICAgICAgcGFzcyBhcm91bmQgYSBjb3VwbGUg
b2YgcGllY2VzIG9mIGluZm9ybWF0aW9uLgorICAgICAgICAoVGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
bW06IEFkZGVkLgorICAgICAgICAoVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJFZGl0
b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG93
RGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21p
c3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVt
b3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tOgorICAgICAgICAoY29sbGVjdERpY3RhdGlvblRleHRBbHRlcm5hdGl2ZXMpOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDpd
KToKKyAgICAgICAgKC1bV2ViVmlldyBfZ2V0V2ViQ29yZURpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb25zOldlYkNvcmU6OmZyb21UZXh0QWx0ZXJuYXRpdmVzOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IF9zaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSTpXZWJDb3JlOjpmb3JEaWN0YXRpb25Db250
ZXh0Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IF9kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVV
SV0pOgorICAgICAgICAoLVtXZWJWaWV3IF9yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXM6XSk6
CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlld0RhdGEubW06CisgICAgICAgICgtW1dlYlZpZXdQcml2YXRlIGluaXRdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oOgorCiAyMDEyLTAzLTMwICBNYXJrIFBpbGdyaW0g
IDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBHRU9MT0NBVElPTiBzaG91bGQgYmUg
aW1wbGVtZW50ZWQgYXMgUGFnZSBTdXBwbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTRmZDEzZTYyZDJj
NTkxNGM2YTgzNjdiY2NjOWViZjZlZGQ4YzkzMy4uZDAwYzJlMGM5YTdjZDAwMTA1OTcxMjRjNzk0
NjU3ZTgzZTdhOTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wMy0zMCAg
SmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIFVJIHRvIHNob3cgYWx0
ZXJuYXRpdmUgc3RyaW5ncyBvZiBkaWN0YXRlZCB0ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWUgV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIGRldGFp
bHMuIEEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBjYXVzZWQKKyAg
ICAgICAgYnkgcmVuYW1pbmcgY2xhc3NlcyBpbiBXZWJDb3JlLgorCisgICAgICAgICogU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6
CisgICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OlBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBh
Z2VDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rp
b25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxTb29uKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjphZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIChj
b2xsZWN0RGljdGF0aW9uVGV4dEFsdGVybmF0aXZlcyk6CisgICAgICAgICgtW1dLVmlldyBpbnNl
cnRUZXh0OnJlcGxhY2VtZW50UmFuZ2U6XSk6CisgICAgICAgICgtW1dLVmlldyBoYW5kbGVBY2Nl
cHRlZEFsdGVybmF0aXZlVGV4dDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAg
IChQYWdlQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBhZ2VEaWRTY3JvbGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0KToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0RpY3RhdGlvbkFsdGVy
bmF0aXZlVUkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc21pc3NEaWN0YXRp
b25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZW1vdmVE
aWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5l
bC5oOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L0NvcnJlY3Rpb25QYW5lbC5tbToKKyAgICAgICAgKGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKToK
KyAgICAgICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwpOgorICAg
ICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6On5Db3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6OnNob3cpOgorICAgICAgICAoV2ViS2l0OjpDb3Jy
ZWN0aW9uUGFuZWw6OmRpc21pc3MpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6
OmRpc21pc3NJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6aGFu
ZGxlQWNjZXB0ZWRSZXBsYWNlbWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDogQWRkZWQuICBUaGlzIGNsYXNzIHNlcnZlcyB0d28g
cHVycG9zZXM6CisgICAgICAgICAgMSkgUmV0YWluIHRoZSBkaWN0YXRpb24gYWx0ZXJuYXRpdmUg
b2JqZWN0cyBwcm92aWRlZCBieSBBcHBLaXQsIGFuZCBwcm92aWRlIGFuCisgICAgICAgICAgICAg
aW50ZWdlciB0byBvYmplY3QgbWFwcGluZyBmb3IgV2ViQ29yZS4KKyAgICAgICAgICAyKSBDb250
cm9sIGRpY3RhdGlvbiBhbHRlcm5hdGl2ZSBVSS4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
cik6CisgICAgICAgIChEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJL
aXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRy
b2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6
OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2ZXMpOgorICAgICAgICAo
V2ViS2l0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRD
b250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0Q29u
dHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4
dENvbnRyb2xsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2ZXMpOgorICAgICAgICAoV2ViS2l0OjpEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpzaG93QWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKFdl
YktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpoYW5kbGVBY2NlcHRlZEFsdGVy
bmF0aXZlKToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
OjpkaXNtaXNzQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKFdlYktpdDo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg6IEFkZGVkLiBBIHNpbXBsZSBzdHJ1Y3Qg
dGhhdCBoZWxwcyB0bworICAgICAgICAgIHBhc3MgYXJvdW5kIGEgY291cGxlIG9mIHBpZWNlcyBv
ZiBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW06IEFkZGVkLgor
ICAgICAgICAoVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFu
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4dCk6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBh
bmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsU29vbik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViUGFnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjppbnNlcnREaWN0YXRlZFRleHQpOgorICAgICAgICAoV2ViS2l0KToKKwogMjAxMi0wMy0z
MCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBM
aW9uIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA0YTVlYjliMWMyMzc1NWE0MWMyY2E3
OWI0YjJkYWQ1ZWQ5Zjk3MzVkLi4zNzFhZTY2NGFmZTc1NGE2ZmJkODQzNmM1Y2Q5M2I2NWQ5OTA1
YTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNjUzLDYgKzY1Myw3IEBAIFNFVChXZWJDb3Jl
X1NPVVJDRVMKIAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNw
cAogCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAogICAgIGVkaXRp
bmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENv
bW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTY2Myw2ICs2
NjQsOCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9EZWxldGVCdXR0b25Db250
cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisgICAgZWRpdGluZy9EaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcAorICAgIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5j
cHAKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjkyLDcgKzY5NSw2IEBAIFNFVChXZWJD
b3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCiAgICAgZWRp
dGluZy9TbWFydFJlcGxhY2UuY3BwCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCi0gICAg
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmlu
ZGV4IDYwNGEwZTQ3ZThkOGQxYjZmMzE4NjM0MmY2MDE2MTM0MjJlMWNiY2EuLmU1N2ZlMjkxYzZl
YTQ3OWY4NDUyMWVmMmM0NGNmZTc2NmI4ZjdkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNjI3LDYgKzYy
Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBcCiAgICAgZG9tL1dp
bmRvd0V2ZW50Q29udGV4dC5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmNwcCBcCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAgXApAQCAtNjM3LDYgKzYzOCw4IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvRGVs
ZXRlQnV0dG9uLmNwcCBcCiAgICAgZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNw
cCBcCiAgICAgZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBcCisgICAgZWRpdGlu
Zy9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCBcCisgICAgZWRpdGluZy9EaWN0YXRp
b25Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgXAogICAgIGVkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0b3IuY3BwIFwKQEAgLTY2OCw3
ICs2NzEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQu
Y3BwIFwKICAgICBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgXAotICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIFwKQEAgLTE3NTcsNiArMTc1OSw3
IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9XZWJLaXROYW1lZEZsb3cuaCBcCiAgICAgZG9tL1dl
YktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAgICBkb20vV2hlZWxFdmVudC5oIFwKKyAgICBlZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2Rl
Q29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oIFwKICAg
ICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmggXApAQCAtMTc2Nyw2ICsxNzcwLDggQEAgSEVB
REVSUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVCdXR0b24uaCBcCiAgICAgZWRpdGluZy9EZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5oIFwKKyAgICBlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCBcCisg
ICAgZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmggXAogICAgIGVkaXRpbmcvRWRpdENvbW1hbmQu
aCBcCiAgICAgZWRpdGluZy9FZGl0aW5nU3R5bGUuaCBcCiAgICAgZWRpdGluZy9FZGl0aW5nQmVo
YXZpb3IuaCBcCkBAIC0xNzk4LDcgKzE4MDMsNiBAQCBIRUFERVJTICs9IFwKICAgICBlZGl0aW5n
L1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmgg
XAogICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKLSAgICBlZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBcCiAgICAg
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCBiYzQ5YjEwMzdmYzMxMGQ5YTVkZDAyNDhhMDgyZTdkYTg3MWU1Y2Uz
Li42MjgwOGM1Yjc2MzVjMjliZWQ3YmM4ODIyYmNiMTMzMjhkZmYwNzk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgpAQCAtNzEwLDYgKzcxMCw5IEBAIF9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzRXYKK19fWk43V2ViQ29yZTI4RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbkMxRVJLUzBfCitfX1pON1dlYkNvcmUyOERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb25DMUV5eXkKK19fWk43V2ViQ29yZTI4RGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbkMxRXYKIF9fWk43V2ViQ29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6
ZUV2CiBfX1pON1dlYkNvcmUyOGNvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnNFdgogX19aTjdX
ZWJDb3JlMjhjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzRXYKQEAgLTg2OCw2ICs4NzEsNyBA
QCBfX1pON1dlYkNvcmU2RWRpdG9yMTdjYW5jZWxDb21wb3NpdGlvbkV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJt
Q29tcG9zaXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJt
Q29tcG9zaXRpb25FdgorX19aTjdXZWJDb3JlNkVkaXRvcjE4aW5zZXJ0RGljdGF0ZWRUZXh0RVJL
TjNXVEY2U3RyaW5nRVJLTlMxXzZWZWN0b3JJTlNfMjhEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uRUxtMEVFRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNG
b3JUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFuZ2VFampiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTlkZWxldGVXaXRoRGlyZWN0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdy
YW51bGFyaXR5RWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYK
QEAgLTg4MSwxMSArODg1LDExIEBAIF9fWk43V2ViQ29yZTZFZGl0b3IyNHJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dEVSS04zV1RGNlN0cmluZ0ViYgogX19aTjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBFRUUKLV9fWk43V2Vi
Q29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTZFZGl0b3IyN3JlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZEVSS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTZEb2N1bWVudEZyYWdtZW50RUVFYmJiCiBfX1pON1dl
YkNvcmU2RWRpdG9yMjljYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNv
cmU2RWRpdG9yMjljYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CitfX1pON1dlYkNvcmU2
RWRpdG9yMjloYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dEVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTZFZGl0b3IzMGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZUViCiBfX1pO
N1dlYkNvcmU2RWRpdG9yMzBwYXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhUTUxFdgogX19aTjdX
ZWJDb3JlNkVkaXRvcjMyZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb25FdgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDZmNThjNTA2YjYxNTVjZjdhZjAwZTI3NDdmZWM5M2YyM2U0YjJlOTAuLmQ2
OTYxYjc0Yzg2NzhhNjBjNzZiMDY0MGNjYWY1ZTlhNGYyNzYzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTk3LDYgKzk3LDcgQEAKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oJywKKyAgICAg
ICAgICAgICdlZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCcsCiAgICAgICAg
ICAgICAnZWRpdGluZy9FZGl0QWN0aW9uLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdENv
bW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaCcsCkBAIC0y
NDg3LDYgKzI0ODgsOCBAQAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRDU1NTaGFkZXJWYWx1ZS5j
cHAnLAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRDU1NTaGFkZXJWYWx1ZS5oJywKICAgICAgICAg
ICAgICdjc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwJywKKyAgICAgICAgICAgICdlZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBl
bmROb2RlQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1h
bmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3Bw
JywKQEAgLTI1MDQsNiArMjUwNyw4IEBACiAgICAgICAgICAgICAnZWRpdGluZy9EZWxldGVGcm9t
VGV4dE5vZGVDb21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9EZWxldGVGcm9tVGV4
dE5vZGVDb21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2Nh
dGlvbi5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAnLAog
ICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcCcsCkBAIC0yNTU2LDggKzI1NjEsNiBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvU21h
cnRSZXBsYWNlSUNVLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
JywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKLSAgICAgICAgICAgICdl
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICdl
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3Bs
aXRFbGVtZW50Q29tbWFuZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCA0NDE4NTZkZDAxMmY3NjVjZWZkMzFjZTc1NTk3YTljMmQ1Zjgx
MTMzLi5mZDQ4N2E3NTA1NWMxYjVlZjlhYTUxZWY3ZDJlMmI4NGE0ZGVhN2FmIDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTQwNzAsNiArNTQw
NzAsNjIgQEAKIAkJCU5hbWU9ImVkaXRpbmciCiAJCQk+CiAJCQk8RmlsZQorCQkJICAgIFJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCIKKwkJCSAg
ICA+CisJCQkgICAgPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgor
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2lu
MzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJ
CQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1
Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJ
CTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVh
c2VfTFRDR3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJ
CQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkgICAgUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKKwkJCSAgICA+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xBcHBlbmRO
b2RlQ29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpAQCAtNTQ1Nzgs
NiArNTQ2MzQsMjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJICAgIFJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCIKKwkJ
CSAgICA+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cZWRp
dGluZ1xEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCisJCQkgICAgPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcRGljdGF0aW9uQ29t
bWFuZC5jcHAiCisJCQkgICAgPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCSAgICBSZWxhdGl2
ZVBhdGg9Ii4uXGVkaXRpbmdcRGljdGF0aW9uQ29tbWFuZC5oIgorCQkJICAgID4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEVkaXRBY3Rpb24uaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC01NjQ0Niw2MiArNTY1MTgsNiBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
Ci0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJ
CS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJ
CQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1
cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZV9MVENHfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxlZGl0aW5nXFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjMGE0MjhlODViMGQ4Njc5OGE1NDY4Y2RjNmY4YjNlNTkyMDAyNjU4
Li40YzY4ODY3YTc0M2FjNGJkM2JlNjdkOWZhMTBhM2RjN2QzYzU3NTljIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zODcsMTEg
KzM4Nyw2IEBACiAJCTFBMkU2RTdBMENDNTU2RDUwMDRBMjA2MiAvKiBTUUxpdGVBdXRob3JpemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkU2
RTc4MENDNTU2RDUwMDRBMjA2MiAvKiBTUUxpdGVBdXRob3JpemVyLmNwcCAqLzsgfTsKIAkJMUEz
NDE3QzkwQ0VDRkYyNTAwNDlDQkRFIC8qIEpTQ3VzdG9tVm9pZENhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTM0MTdDNzBDRUNGRjI1MDA0
OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCAqLzsgfTsKIAkJMUEzNDE3Q0EwQ0VDRkYy
NTAwNDlDQkRFIC8qIEpTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMzQxN0M4MENFQ0ZGMjUwMDQ5Q0JERSAvKiBK
U0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgKi87IH07Ci0JCTFBMzU4NjJDMTUyNTIyNTQwMDIyQTY1
OSAvKiBTY3JvbGxpbmdUcmVlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUEzNTg2MkExNTI1MjI1NDAwMjJBNjU5IC8qIFNjcm9sbGluZ1RyZWVN
YWMubW0gKi87IH07Ci0JCTFBMzU4NkRGMTUyNjRDNDUwMDIyQTY1OSAvKiBSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEzNTg2REQxNTI2NEM0NTAwMjJBNjU5IC8qIFJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZC5jcHAgKi87IH07Ci0JCTFBMzU4NkUwMTUyNjRDNDUwMDIyQTY1OSAvKiBSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMzU4NkRFMTUyNjRDNDUwMDIyQTY1OSAvKiBSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQuaCAqLzsgfTsKLQkJMUEzNTg2RTExNTI2NEY5NTAwMjJBNjU5IC8qIFNWR0Fu
aW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUU2MjNDRTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCAqLzsgfTsKLQkJMUEzRkY5QzMxNTI2NTM1
OTAwMjI4OEExIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg1RjIzRTE1MTkxODczMDBCQzE3QkUgLyog
UmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCAqLzsgfTsKIAkJMUE0OTRCRkEwQTEyMkY0NDAwRkRB
RkMxIC8qIEpTSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE0OTRCRjgwQTEyMkY0NDAwRkRBRkMxIC8qIEpTSFRNTEVsZW1lbnQu
Y3BwICovOyB9OwogCQkxQTQ5NEJGQjBBMTIyRjQ0MDBGREFGQzEgLyogSlNIVE1MRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0OTRCRjkw
QTEyMkY0NDAwRkRBRkMxIC8qIEpTSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTQ5NEUzNDBBMTIzNThCMDBGREFGQzEgLyog
SlNIVE1MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE0OTRFMzIwQTEyMzU4QTAwRkRBRkMxIC8qIEpTSFRNTERvY3VtZW50LmNwcCAq
LzsgfTsKQEAgLTM3MDEsOCArMzY5Niw4IEBACiAJCUE2MjJBOEZGMTIyQzQ0QTYwMEE3ODVCMyAv
KiBHZW5lcmljQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggKi87
IH07CiAJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDE2OTYxMTM0NkI0OUIw
MDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCAqLzsgfTsKIAkJQTZEMTY5NjQxMzQ2QjRDMTAwMEVC
NzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE2RDE2OTYzMTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTcwMDVDQ0MxMzMw
QzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAw
MENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OwotCQlBNzAw
NUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMw
QzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzAwNUNDQzEzMzBDNEJB
MDAwQ0MwQkEgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEg
LyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi87IH07CisJCUE3MDA1Q0NEMTMzMEM0
QkEwMDBDQzBCQSAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEg
LyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0
Q2hlY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTIx
MzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MDEzNEJCQkVDMDBEOEU3
MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTcxNUU2NTMxMzRCQkJF
QzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5oICovOyB9OwpAQCAtNTU1Miw2ICs1NTQ3LDcgQEAKIAkJQkNF
N0IxOTMwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U3QjE5MjBENEU4Njk2MDA3NUE1
MzkgLyogSlNIaXN0b3J5Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkNFOTNGNDUxNTE3QzU2NzAwOEND
Rjc0IC8qIFJlbmRlclJlZ2lvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNl
dC5oICovOyB9OwogCQlCQ0U5M0Y0NzE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyUmVnaW9uU2V0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkz
RjQ2MTUxN0M2RDUwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuY3BwICovOyB9OworCQlCQ0U5
M0Y1MzE1MTdFMEIwMDA4Q0NGNzQgLyogKG51bGwpIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyB9OwogCQlCQ0VBNDc4RjA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRUE0NzdDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwICovOyB9OwogCQlCQ0VBNDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0VBNDc3RDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkNFQTQ4NTIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJsb2NrTGluZUxheW91
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VB
NDgxMzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCAqLzsgfTsK
QEAgLTU3MjgsOSArNTcyNCwxNiBAQAogCQlDRTAyRjBDNDExRTgzQUREMDBDNjY4NEEgLyogU2Ny
aXB0Q29udHJvbGxlckJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENFMDJGMEMzMTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNF
MDU3RkE1MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTMxMjIw
NzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgKi87IH07CiAJCUNF
MDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMDU3RkE0MTIyMDcz
MTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDRTIyMzIwOTE1MjY4MTAxMDA1NzFE
QUMgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODVGMjNFMTUxOTE4NzMwMEJDMTdCRSAvKiBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQuY3BwICovOyB9OworCQlDRTIyMzIwQjE1MjY4MTU4MDA1NzFEQUMgLyog
U2Nyb2xsaW5nVHJlZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMzU4NjJBMTUyNTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVlTWFjLm1t
ICovOyB9OworCQlDRTIyMzIwQzE1MjY4MURCMDA1NzFEQUMgLyogU1ZHQW5pbWF0ZWRJbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxRTYyM0NFMTUxRjcyQTYwMDM2RTJGNCAvKiBTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXIuY3BwICovOyB9OwogCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0QzggLyog
U2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92
aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUNFNzgxMEJCMTUyNUZEQzEwMDAyREUyNyAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUI4MjMx
QTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFQTM5NDlDMTFE
NDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENG
IC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi87IH07CiAJCUNFQTM5NDlEMTFENDVDREEw
MDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQTM5NDlCMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0
aWNIYXNoU2V0Tm9kZUxpc3QuaCAqLzsgfTsKKwkJQ0VCODIzMTQxNTIzREVGNzAwMzk2MUMwIC8q
IERpY3RhdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0VCODIzMTIxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQu
Y3BwICovOyB9OworCQlDRUI4MjMxNTE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIz
MTMxNTIzREVGNzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQuaCAqLzsgfTsKKwkJQ0VCODIz
MUQxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VCODIzMTkxNTIz
REYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uY3BwICovOyB9Owog
CQlDRUNDRkMzQjE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUNDRkMzQTE0MTk3
M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi87IH07CiAJCUNFRjQxOENF
MTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2NzhDMDA5RDExMkMg
LyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjExNzk2NzhDMDA5RDEx
MkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3Vt
ZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xMDY5OCw4ICsxMDcwMSw4IEBACiAJCUE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5l
cmljQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljQmlu
ZGluZy5oOyBwYXRoID0gZ2VuZXJpYy9HZW5lcmljQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNkQxNjk2MTEzNDZCNDlCMDAwRUI3NzAgLyogU2hhZG93Um9vdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkb3dSb290LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTZEMTY5NjMxMzQ2QjRDMTAwMEVCNzcwIC8qIFNo
YWRvd1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93Um9vdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVD
Q0IxMzMwQzRCQTAwMENDMEJBIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyog
VGV4dENoZWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dENoZWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2NTAx
MzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyogUHJv
Z3Jlc3NTaGFkb3dFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b2dyZXNzU2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4
MTcsNiArMTI4MjAsMTAgQEAKIAkJQ0U1Q0IxQjMxNEVEQUI2RjAwQkIyNzk1IC8qIEV2ZW50U2Vu
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50U2VuZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFQTM5NDlBMTFENDVDREEwMDMwOTRDRiAvKiBT
dGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VCODIzMTIxNTIzREVGNzAwMzk2MUMw
IC8qIERpY3RhdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRGljdGF0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNFQjgyMzEzMTUyM0RFRjcwMDM5NjFDMCAvKiBEaWN0YXRpb25Db21tYW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0VCODIzMTkxNTIzREYzNDAwMzk2MUMwIC8qIERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNFQjgyMzFBMTUyM0RGMzQwMDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VDQ0ZD
M0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0
QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdw
b3J0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0Qx
MTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNjU3MSw2ICsxNjU3OCw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUVENTAxREM5MEIyNDlGMzkwMEFFMThEOSAvKiBtYWMgKi8sCisJCQkJ
QTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
ICovLAorCQkJCUE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEODcwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVD
b21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOUQ4ODA5OUU2NDkxMDA1NkU1ODEgLyogQXBwZW5kTm9k
ZUNvbW1hbmQuaCAqLywKIAkJCQk5QjQxNzA2MzEyNTY2MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9j
a0VsZW1lbnRDb21tYW5kLmNwcCAqLywKQEAgLTE2NTkxLDYgKzE2NjAwLDEwIEBACiAJCQkJOTMz
MDlEOTAwOTlFNjQ5MTAwNTZFNTgxIC8qIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaCAqLywK
IAkJCQk5MzMwOUQ5MTA5OUU2NDkxMDA1NkU1ODEgLyogRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAgKi8sCiAJCQkJOTMzMDlEOTIwOTlFNjQ5MTAwNTZFNTgxIC8qIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuaCAqLywKKwkJCQlDRUI4MjMxOTE1MjNERjM0MDAzOTYxQzAgLyogRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbi5jcHAgKi8sCisJCQkJQ0VCODIzMUExNTIzREYzNDAwMzk2MUMwIC8q
IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCAqLywKKwkJCQlDRUI4MjMxMjE1MjNERUY3
MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi8sCisJCQkJQ0VCODIzMTMxNTIzREVG
NzAwMzk2MUMwIC8qIERpY3RhdGlvbkNvbW1hbmQuaCAqLywKIAkJCQk5MzMwOUQ5MzA5OUU2NDkx
MDA1NkU1ODEgLyogRWRpdEFjdGlvbi5oICovLAogCQkJCTkzMzA5RDk0MDk5RTY0OTEwMDU2RTU4
MSAvKiBFZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEOTUwOTlFNjQ5MTAwNTZFNTgxIC8q
IEVkaXRDb21tYW5kLmggKi8sCkBAIC0xNjY2Miw4ICsxNjY3NSw2IEBACiAJCQkJQTc4RkUxM0Ex
MjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oICovLAogCQkJCUI4REJEQjQ5MTMwQjBG
OEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLywKIAkJCQlCOERC
REI0QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovLAot
CQkJCUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmNwcCAqLywKLQkJCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMzA5REMyMDk5RTY0OTEwMDU2RTU4MSAvKiBT
cGxpdEVsZW1lbnRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURDMzA5OUU2NDkxMDA1NkU1ODEg
LyogU3BsaXRFbGVtZW50Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REM0MDk5RTY0OTEwMDU2RTU4
MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgKi8sCkBAIC0yMTQ4NSw2ICsyMTQ5Niw3IEBA
CiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlDRTc4MTBCQjE1MjVGREMxMDAwMkRFMjcgLyog
RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5
REIxNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjlBODEyMkUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjI0OTQsNiArMjI1MDYsNyBAQAogCQkJCUE3
Q0E1OTVEMEIyN0JEOUUwMEZBMDIxRCAvKiBEcmFnQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdCNkU2OUYwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0NGQjNEMjBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDRUI4MjMxNTE1MjNERUY3MDAzOTYxQzAgLyogRGljdGF0aW9uQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2OTM3OUMxNDYwOUM2QzAwQzAxMzYyIC8qIERyYWdTZXNz
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUY2NUZGNjEzNzg4RkFBMDBGRjZGMkQgLyogRHJh
Z1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTg3NzBEQzEyNDJDNTM1MDAyMjI2QkEgLyog
RHJhd2luZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDA3MCw3ICsyNDA4Myw3IEBACiAJ
CQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4RkUxM0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3MDA1Q0NEMTMzMEM0
QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNw
bGl0RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE0MDk5RTY0OTIw
MDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlFMTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ2NjAsNyArMjQ2NzMsMTEgQEAKIAkJCQlFMUJF
NTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxQTM1ODZFMDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQyRUMg
LyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTkzRjQ1MTUx
N0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
Rjg5QTQyMTUxOEZERUEwMEU1NDdCNSAvKiBUaWxlZEJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZCNzhBRDJFMTUxQkY1RTYwMEZFNTREMyAvKiBDU1NQYXJzZXJNb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MUU2MjNEMTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5pbWF0ZWRJbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI1MDE4LDYgKzI1MDM1LDkgQEAK
IAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUNFMjIzMjBDMTUyNjgxREIwMDU3MURBQyAvKiBT
VkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0UyMjMyMEIxNTI2ODE1ODAwNTcxREFDIC8qIFNjcm9sbGluZ1RyZWVNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQlDRTIyMzIwOTE1MjY4MTAxMDA1NzFEQUMgLyogUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2OURBMTUwNUYwNzYwMDFCNzRBQyAvKiBB
YnN0cmFjdERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4Njkw
MDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI5QzE2
RTEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjcxODMsNyArMjcyMDMsNyBAQAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2
OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RkUx
M0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzAwNUNDQzEz
MzBDNEJBMDAwQ0MwQkEgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MzMwOUUxMTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMzA5OUU2NDkyMDA1NkU1ODEgLyogU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTUwOTlFNjQ5
MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNzY0NywxMCArMjc2NjcsOSBAQAogCQkJCUUxQkU1MTJEMENGNkM1
MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3
RTJFMEUxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTFBMzU4NjJDMTUyNTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUEzNTg2REYxNTI2NEM0NTAwMjJBNjU5IC8qIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTM1ODZFMTE1MjY0Rjk1
MDAyMkE2NTkgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTFBM0ZGOUMzMTUyNjUzNTkwMDIyODhBMSAvKiBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkNFOTNGNTMxNTE3RTBCMDAwOENDRjc0IC8q
IChudWxsKSBpbiBTb3VyY2VzICovLAorCQkJCUNFQjgyMzE0MTUyM0RFRjcwMDM5NjFDMCAvKiBE
aWN0YXRpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFQjgyMzFEMTUyM0RGMzQw
MDM5NjFDMCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5jcHAKaW5kZXggYjRmOTk5NGRiNGVmNmFl
Y2ZkOGM1Njc5MzBiODE3Nzg4ZWViZDYxYS4uNTNkNDNlNGVhYjU2MDZhNmNjNjVjNzhiM2Y3ZmVh
M2IzMzQxY2YwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuY3BwCkBAIC0xMjMs
NiArMTIzLDE0IEBAIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjCiB7CiB9CiAKK0RvY3VtZW50TWFy
a2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIFBhc3NSZWZQdHI8RG9jdW1lbnRNYXJrZXJEZXRhaWxzPiBk
ZXRhaWxzKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KQorICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICwgbV9kZXRhaWxzKGRldGFp
bHMpCit7Cit9CisKIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQgZGVsdGEp
CiB7CiAgICAgbV9zdGFydE9mZnNldCArPSBkZWx0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyLmgKaW5kZXggNDFlZDg0ODM2NDBkY2U1Zjk5MWZjNzM2YWMzM2JkN2U1NmU5NjI0NS4uYzFl
NzM4ZDQzNjk1MWQ2ZTcxNDQ4YTAwZjAwOTk1NmNkZTRiNzdmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyLmgKQEAgLTYzLDcgKzYzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gcmFu
Z2UgdGhhdCBiZWFycyB0aGlzIG1hcmtlci4gSW4gc29tZSBwbGF0Zm9ybXMsIGlmIHRoZSB1c2Vy
IGxhdGVyIGluc2VydHMgdGhlIHNhbWUgb3JpZ2luYWwKICAgICAgICAgLy8gd29yZCBhZ2FpbiBh
dCB0aGlzIHBvc2l0aW9uLCBpdCB3aWxsIG5vdCBiZSBhdXRvY29ycmVjdGVkIGFnYWluLiBUaGUg
ZGVzY3JpcHRpb24gb2YgdGhpcwogICAgICAgICAvLyBtYXJrZXIgaXMgdGhlIG9yaWdpbmFsIHdv
cmQgYmVmb3JlIGF1dG9jb3JyZWN0aW9uIHdhcyBhcHBsaWVkLgotICAgICAgICBEZWxldGVkQXV0
b2NvcnJlY3Rpb24gPSAxIDw8IDgKKyAgICAgICAgRGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gMSA8
PCA4LAorICAgICAgICAvLyBUaGlzIG1hcmtlciBpbmRpY2F0ZXMgdGhhdCB0aGUgcmFuZ2Ugb2Yg
dGV4dCBzcGFubmVkIGJ5IHRoZSBtYXJrZXIgaXMgZW50ZXJlZCBieSB2b2ljZSBkaWN0YXRpb24s
CisgICAgICAgIC8vIGFuZCBpdCBoYXMgYWx0ZXJuYXRpdmUgdGV4dC4KKyAgICAgICAgRGljdGF0
aW9uQWx0ZXJuYXRpdmVzID0gMSA8PCA5CiAgICAgfTsKIAogICAgIGNsYXNzIE1hcmtlclR5cGVz
IHsKQEAgLTg1LDcgKzg4LDcgQEAgcHVibGljOgogICAgIGNsYXNzIEFsbE1hcmtlcnMgOiBwdWJs
aWMgTWFya2VyVHlwZXMgewogICAgIHB1YmxpYzoKICAgICAgICAgQWxsTWFya2VycygpCi0gICAg
ICAgICAgICA6IE1hcmtlclR5cGVzKFNwZWxsaW5nIHwgR3JhbW1hciB8IFRleHRNYXRjaCB8IFJl
cGxhY2VtZW50IHwgQ29ycmVjdGlvbkluZGljYXRvciB8IFJlamVjdGVkQ29ycmVjdGlvbiB8IEF1
dG9jb3JyZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRGVsZXRlZEF1dG9jb3JyZWN0
aW9uKQorICAgICAgICAgICAgOiBNYXJrZXJUeXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0
TWF0Y2ggfCBSZXBsYWNlbWVudCB8IENvcnJlY3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJl
Y3Rpb24gfCBBdXRvY29ycmVjdGVkIHwgU3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRB
dXRvY29ycmVjdGlvbiB8IERpY3RhdGlvbkFsdGVybmF0aXZlcykKICAgICAgICAgewogICAgICAg
ICB9CiAgICAgfTsKQEAgLTk0LDYgKzk3LDcgQEAgcHVibGljOgogICAgIERvY3VtZW50TWFya2Vy
KE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwog
ICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIERvY3VtZW50
TWFya2VyKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0
aXZlTWF0Y2gpOworICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIFBhc3NSZWZQdHI8RG9jdW1lbnRNYXJrZXJEZXRh
aWxzPik7CiAKICAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRl
eCBlMDY3MmQwZDNkMWZkOGRiN2FlYTRiZDkxZDM2ZjRjNjdlMmFkYWNkLi40YmMyMTBjZTUwMjY5
ZTg5YWE2N2JhNWUwOWE2NmMyYzc3NTY4NDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOworICAgIHZvaWQgYWRkTWFy
a2VyKE5vZGUqLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOwogICAgIHZvaWQgYWRkVGV4dE1hdGNo
TWFya2VyKFJhbmdlKiwgYm9vbCBhY3RpdmVNYXRjaCk7CiAKICAgICB2b2lkIGNvcHlNYXJrZXJz
KE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBk
c3ROb2RlLCBpbnQgZGVsdGEpOwpAQCAtODAsOCArODEsNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKLSAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXIm
KTsKLQogICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxp
c3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTWFya2VyTGlzdCo+IE1hcmtl
ck1hcDsKICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAppbmRleCAxZGZmYjAxNGVlZDVmNmIzMTA0
NTM3OTczMGQ4NjM1ZjkxNmYxZGY3Li5hMWQyNTdmYjExZjUwZTU4ZjZiNzJlYWQ3NDJlZjdlMmEw
NzYzNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcApAQCAtNTcsNiArNTcsMTEgQEAgUGFz
c1JlZlB0cjxUZXh0RXZlbnQ+IFRleHRFdmVudDo6Y3JlYXRlRm9yRHJvcChQYXNzUmVmUHRyPEFi
c3RyYWN0Vmlldz4gdmlldywgY28KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCh2
aWV3LCBkYXRhLCBUZXh0RXZlbnRJbnB1dERyb3ApKTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0RXZl
bnQ+IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3
PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEsIGRpY3RhdGlvbkFsdGVybmF0aXZlcykpOwor
fQorCiBUZXh0RXZlbnQ6OlRleHRFdmVudCgpCiAgICAgOiBtX2lucHV0VHlwZShUZXh0RXZlbnRJ
bnB1dEtleWJvYXJkKQogICAgICwgbV9zaG91bGRTbWFydFJlcGxhY2UoZmFsc2UpCkBAIC04NSw2
ICs5MCwxNiBAQCBUZXh0RXZlbnQ6OlRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4g
dmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUAogewogfQogCitUZXh0RXZlbnQ6OlRl
eHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRh
LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFs
dGVybmF0aXZlcykKKyAgICA6IFVJRXZlbnQoZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50LCB0
cnVlLCB0cnVlLCB2aWV3LCAwKQorICAgICwgbV9pbnB1dFR5cGUoVGV4dEV2ZW50SW5wdXREaWN0
YXRpb24pCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fc2hvdWxkU21hcnRSZXBsYWNlKGZh
bHNlKQorICAgICwgbV9zaG91bGRNYXRjaFN0eWxlKGZhbHNlKQorICAgICwgbV9kaWN0YXRpb25B
bHRlcm5hdGl2ZXMoZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworfQorCiBUZXh0RXZlbnQ6On5U
ZXh0RXZlbnQoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCmluZGV4IDliMDg3N2FkNGZlY2Iy
MWFkZmQ3NDhjYTMxZDNjYzg3NmNmODJhMDkuLjFiY2RkNDUwODNjYTg2MTMzZjMxM2IzN2EwOWU1
NGYyYWQwMzg1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNp
Zm5kZWYgVGV4dEV2ZW50X2gKICNkZWZpbmUgVGV4dEV2ZW50X2gKIAorI2luY2x1ZGUgIkRpY3Rh
dGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUZXh0RXZlbnRJbnB1dFR5cGUu
aCIKICNpbmNsdWRlICJVSUV2ZW50LmgiCiAKQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvclBs
YWluVGV4dFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcm
IGRhdGEsIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dEV2ZW50PiBjcmVhdGVGb3JGcmFnbWVudFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RW
aWV3PiB2aWV3LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRhdGEsIGJvb2wgc2hvdWxk
U21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOwogICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckRyb3AoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+
IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHRFdmVudD4gY3JlYXRlRm9yRGljdGF0aW9uKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29u
c3QgU3RyaW5nJiBkYXRhLCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlv
bj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAKICAgICAgICAgdmlydHVhbCB+VGV4dEV2ZW50
KCk7CiAgICAgCkBAIC01NiwxMCArNTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIGlzQmFja1RhYigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVu
dElucHV0QmFja1RhYjsgfQogICAgICAgICBib29sIGlzUGFzdGUoKSBjb25zdCB7IHJldHVybiBt
X2lucHV0VHlwZSA9PSBUZXh0RXZlbnRJbnB1dFBhc3RlOyB9CiAgICAgICAgIGJvb2wgaXNEcm9w
KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXREcm9wOyB9Cisg
ICAgICAgIGJvb2wgaXNEaWN0YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lucHV0VHlwZSA9PSBU
ZXh0RXZlbnRJbnB1dERpY3RhdGlvbjsgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkU21hcnRSZXBs
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTbWFydFJlcGxhY2U7IH0KICAgICAgICAgYm9v
bCBzaG91bGRNYXRjaFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYXRjaFN0eWxlOyB9
CiAgICAgICAgIERvY3VtZW50RnJhZ21lbnQqIHBhc3RpbmdGcmFnbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFzdGluZ0ZyYWdtZW50LmdldCgpOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxEaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZXM7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFRleHRFdmVudCgpOwpAQCAtNjcsNiArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYg
ZGF0YSwgVGV4dEV2ZW50SW5wdXRUeXBlID0gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CiAgICAg
ICAgIFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0
YSwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwKICAgICAgICAgICAgICAgICAgIGJvb2wg
c2hvdWxkU21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOworICAgICAgICBUZXh0
RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0aW9uQWx0ZXJuYXRp
dmVzKTsKIAogICAgICAgICBUZXh0RXZlbnRJbnB1dFR5cGUgbV9pbnB1dFR5cGU7CiAgICAgICAg
IFN0cmluZyBtX2RhdGE7CkBAIC03NCw2ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fcGFzdGluZ0ZyYWdtZW50OwogICAgICAg
ICBib29sIG1fc2hvdWxkU21hcnRSZXBsYWNlOwogICAgICAgICBib29sIG1fc2hvdWxkTWF0Y2hT
dHlsZTsKKyAgICAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IG1fZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnRJbnB1dFR5cGUuaAppbmRleCA5OGJmMzQzMmQ4YjQ2OTM3
ODJlYWJmY2MzODBhYWZlZWRhMDBhMmVlLi44YmUyMzNjNGJmZjBiYTVmNWYyZjk2ZDUwMzBkMTg4
YjVjNTZiYTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50SW5wdXRU
eXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudElucHV0VHlwZS5oCkBAIC0z
NSw2ICszNSw3IEBAIGVudW0gVGV4dEV2ZW50SW5wdXRUeXBlIHsKICAgICBUZXh0RXZlbnRJbnB1
dEJhY2tUYWIsCiAgICAgVGV4dEV2ZW50SW5wdXRQYXN0ZSwKICAgICBUZXh0RXZlbnRJbnB1dERy
b3AsCisgICAgVGV4dEV2ZW50SW5wdXREaWN0YXRpb24sCiAgICAgVGV4dEV2ZW50SW5wdXRPdGhl
ciwKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjM2E2ZDU0Zjg1MGQ4YmIwMWQ4ZTNkZGM3ZTFj
YjlhOTEzY2QyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNzM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21t
YW5kLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJUZXh0
Q2hlY2tpbmdIZWxwZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJW
aXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJt
YXJrdXAuaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK3N0YXRp
YyBGbG9hdFJlY3QgcmFuZ2VCb3VuZGluZ0JveEluUm9vdFZpZXcoY29uc3QgU2Nyb2xsVmlldyog
dmlldywgY29uc3QgUmFuZ2UqIHJhbmdlKQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICBy
YW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsK
KyAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNb
aV0uYm91bmRpbmdCb3goKSk7CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhJ
bnRSZWN0KGJvdW5kaW5nUmVjdCkpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gcmVw
bGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgUmFuZ2UqIHJhbmdlLCBGcmFt
ZSogZnJhbWUsIGJvb2wgZm9yU3BlbGxpbmdDb3JyZWN0aW9uKQoreworICAgIGlmICghcmFuZ2Ug
fHwgIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcmFuZ2UtPmNsb25lUmFu
Z2UoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgc2V0U3Rh
cnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3Jh
cGgocmFuZ2UtPmVuZFBvc2l0aW9uKCkpKTsKKyAgICAKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNl
IHRoZSB3b3JkIGF0ICdyYW5nZScsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5n
ZS4KKyAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUg
dmFsdWUgb2YgJ3JhbmdlJyBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUg
d2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgJ3JhbmdlJworICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlv
biBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSByZXBsYWNlbWVudFN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBv
YnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAv
LyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBv
c2l0aW9uIG9mICdyYW5nZScuCisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAoZWMpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9C
ZVJlcGxhY2VkID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICByZXBsYWNlbWVudFN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0Jl
UmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNl
ZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgc3RhcnQgbG9jYXRp
b24gb2YgdGhlIHJhbmdlIHRvIGJlIHJlcGxhY2VkLCBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2Vy
IGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgorICAgIGludCByZXBsYWNlbWVudFN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJlcGxhY2Vt
ZW50U3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIENs
b25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0
byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZVRvQmVSZXBsYWNlZCA9IHJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBpZiAoZm9yU3BlbGxp
bmdDb3JyZWN0aW9uKQorICAgICAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBuZXdUZXh0KSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQocmFuZ2UsIG5ld1RleHQpOworICAgICAgICBpZiAoZnJhZ21lbnQpIHsKKyAgICAg
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHJhbmdlLCBGcmFtZVNlbGVj
dGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkIHwgRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nIHwg
RnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5bGUpOworICAgICAgICAgICAgYXBwbHlDb21t
YW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCksIGZyYWdtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZywgRWRpdEFjdGlv
blBhc3RlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdl
dCgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdy
YXBoUmFuZ2UuZ2V0KCksIHJlcGxhY2VtZW50U3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG5ld1Rl
eHQubGVuZ3RoKCkpOworICAgIAorICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBz
dWNjZWVkZWQuCisgICAgU3RyaW5nIHRleHRBZnRlclJlcGxhY2VtZW50ID0gcGxhaW5UZXh0KHJl
cGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworICAgIGlmICh0ZXh0QWZ0ZXJSZXBsYWNlbWVudCAhPSBu
ZXdUZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcmVwbGFjZW1lbnRSYW5nZTsK
K30KKworCitBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVRleHRJbmZvKCkKKzogbV9y
YW5nZVdpdGhBbHRlcm5hdGl2ZSgwKQorLCBtX2lzQWN0aXZlKGZhbHNlKQorLCBtX2RldGFpbHMo
MCkKK3sgfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dEluZm86OnNldFJhbmdlV2l0aEFsdGVybmF0
aXZlKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQoreworICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRp
dmUgPSByYW5nZTsKK30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRJbmZvOjpjbGVhclJhbmdlKCkK
K3sKKyAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmNsZWFyKCk7Cit9CisKK1Bhc3NSZWZQdHI8
UmFuZ2U+IEFsdGVybmF0aXZlVGV4dEluZm86OnJhbmdlV2l0aEFsdGVybmF0aXZlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZTsKK30KKyAgICAKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0SW5mbzo6c2V0RGV0YWlscyhQYXNzUmVmUHRyPEFsdGVybmF0aXZlVGV4dERl
dGFpbHM+IGRldGFpbHMpCit7CisgICAgbV9kZXRhaWxzID0gZGV0YWlsczsKK30KKworY29uc3Qg
QWx0ZXJuYXRpdmVUZXh0RGV0YWlscyogQWx0ZXJuYXRpdmVUZXh0SW5mbzo6ZGV0YWlscygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGV0YWlscy5nZXQoKTsKK30KKworY2xhc3MgQXV0b2NvcnJl
Y3Rpb25BbHRlcm5hdGl2ZURldGFpbHMgOiBwdWJsaWMgQWx0ZXJuYXRpdmVUZXh0RGV0YWlscyB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2
ZURldGFpbHM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0
YWlscyhyZXBsYWNlbWVudFN0cmluZykpOworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlcGxhY2VtZW50U3RyaW5nOyB9Citw
cml2YXRlOgorICAgIEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcpCisgICAgOiBtX3JlcGxhY2VtZW50U3RyaW5nKHJlcGxhY2Vt
ZW50U3RyaW5nKQorICAgIHsgfQorCisgICAgU3RyaW5nIG1fcmVwbGFjZW1lbnRTdHJpbmc7Cit9
OworCitjbGFzcyBEaWN0YXRpb25BbHRlcm5hdGl2ZURldGFpbHMgOiBwdWJsaWMgQWx0ZXJuYXRp
dmVUZXh0RGV0YWlscyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGljdGF0aW9u
QWx0ZXJuYXRpdmVEZXRhaWxzPiBjcmVhdGUodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGljdGF0aW9uQWx0ZXJuYXRpdmVEZXRh
aWxzKGRpY3RhdGlvbkNvbnRleHQpKTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kaWN0YXRpb25Db250ZXh0OyB9CisKK3ByaXZhdGU6
CisgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRl
eHQpCisgICAgOiBtX2RpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCkKKyAgICB7IH0K
KworICAgIHVpbnQ2NF90IG1fZGljdGF0aW9uQ29udGV4dDsKK307CisKKyNpZiBVU0UoQVVUT0NP
UlJFQ1RJT05fUEFORUwpCisKK3N0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5
cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsKKyAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlv
bi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgbWFya2VyVHlw
ZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRp
Y2F0b3IpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgICAgIG1hcmtlclR5cGVz
Rm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsK
KyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb247Cit9CisKK3N0
YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBl
c0ZvclJlcGxhY2VtZW50KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQsICgpKTsK
KyAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbWFya2Vy
VHlwZXNGb3JSZXBsYWNlbWVudDsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yRGljdGF0aW9uQWx0ZXJuYXRpdmUoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiwgbWFya2VyVHlwZXNGb3JEaWN0YXRpb25BbHRlcm5hdGl2ZSwgKCkpOworICAgIGlmICht
YXJrZXJUeXBlc0ZvckRpY3RhdGlvbkFsdGVybmF0aXZlLmlzRW1wdHkoKSkKKyAgICAgICAgbWFy
a2VyVHlwZXNGb3JEaWN0YXRpb25BbHRlcm5hdGl2ZS5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckRpY3RhdGlv
bkFsdGVybmF0aXZlOworfQorCitzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcio+JiBtYXJrZXJzKQoreworICAgIGlm
IChtYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS0+ZGVzY3JpcHRpb24oKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGRl
c2NyaXB0aW9uICE9IG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3RpbWVyKHRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjp0aW1lckZpcmVkKQoreworfQorCitBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp+
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpCit7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNt
aXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dElu
Zm86OkFsdGVybmF0aXZlVHlwZSB0eXBlKQoreworICAgIGNvbnN0IGRvdWJsZSB0aW1lckludGVy
dmFsID0gMC4zOworICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJz
aW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xl
YXIgaXQuCisgICAgaWYgKHR5cGUgPT0gQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVU
eXBlQ29ycmVjdGlvbikKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS5jbGVhclJhbmdlKCk7CisgICAg
bV9hbHRlcm5hdGl2ZS5zZXRUeXBlKHR5cGUpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KHRp
bWVySW50ZXJ2YWwpOworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKK3sKKyAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICBtX2Fs
dGVybmF0aXZlLmNsZWFyUmFuZ2UoKTsKK30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJl
Y3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxv
dy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVy
KCk7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3Jl
ZCk7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29y
cmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykKK3sK
KyAgICBpZiAobV9hbHRlcm5hdGl2ZS50eXBlKCkgIT0gQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0
ZXJuYXRpdmVUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQXBwbHkg
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2lu
Zy4KKyAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgp
OworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0
YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZX
b3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChj
dXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBT
dHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSk7CisgICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3Vv
dXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAg
ICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0Fw
cGx5Q29ycmVjdGlvbikKKyAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlz
bWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2FsdGVybmF0aXZlLmNsZWFyUmFuZ2UoKTsKK30KKworYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmFuZ2VXaXRoQWx0ZXJuYXRpdmUoKS5nZXQoKTsK
K30KKworYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxs
b3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAoreworICAgIHJl
dHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxs
aW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
K30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQoreworICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KG1fZnJhbWUt
PnZpZXcoKSwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIGlmIChib3VuZGluZ0JveC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgb3JpZ2luYWxUZXh0ID0gcGxhaW5U
ZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2FsdGVybmF0aXZlLnNldFJhbmdlV2l0
aEFsdGVybmF0aXZlKHJhbmdlVG9SZXBsYWNlKTsKKyAgICBtX2FsdGVybmF0aXZlLnNldE9yaWdp
bmFsVGV4dChvcmlnaW5hbFRleHQpOworICAgIG1fYWx0ZXJuYXRpdmUuc2V0RGV0YWlscyhBdXRv
Y29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6Y3JlYXRlKHJlcGxhY2VtZW50KSk7CisgICAg
bV9hbHRlcm5hdGl2ZS5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2FsdGVybmF0aXZlLnR5cGUoKSwgYm91bmRpbmdCb3gsIG9yaWdpbmFsVGV4
dCwgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOworfQorCit2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit7CisgICAgaWYgKCFtX2Fs
dGVybmF0aXZlLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2FsdGVybmF0aXZl
LnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRl
cm5hdGl2ZVRleHRDYW5jZWxsZWQpOworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb25Gb3JE
aXNtaXNzaW5nKQoreworICAgIGlmICghbV9hbHRlcm5hdGl2ZS5pc0FjdGl2ZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9hbHRlcm5hdGl2ZS5zZXRJc0FjdGl2ZShmYWxzZSk7CisgICAgbV9p
c0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAg
aWYgKG1fYWx0ZXJuYXRpdmUudHlwZSgpID09IEFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0
aXZlVHlwZURpY3RhdGlvbkFsdGVybmF0aXZlcykKKyAgICAgICAgICAgIGRpc21pc3NEaWN0YXRp
b25BbHRlcm5hdGl2ZVVJKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsaWVudCgpLT5k
aXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOworICAgIH0KK30KKwor
U3RyaW5nIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBBU1NF
UlQobV9hbHRlcm5hdGl2ZS50eXBlKCkgIT0gQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRp
dmVUeXBlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKworICAgIGlmICghbV9hbHRlcm5hdGl2ZS5p
c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgbV9hbHRlcm5hdGl2ZS5z
ZXRJc0FjdGl2ZShmYWxzZSk7CisgICAgbV9pc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAg
ICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGNs
aWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsK
K30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4
dChjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQoreworICAgIGlmICghbV9hbHRlcm5hdGl2
ZS5yYW5nZVdpdGhBbHRlcm5hdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSByZXBsYWNlVGV4dEluUmFuZ2UoYWx0ZXJuYXRpdmUs
IG1fYWx0ZXJuYXRpdmUucmFuZ2VXaXRoQWx0ZXJuYXRpdmUoKS5nZXQoKSwgbV9mcmFtZSwgbV9h
bHRlcm5hdGl2ZS50eXBlKCkgPT0gQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBl
RGljdGF0aW9uQWx0ZXJuYXRpdmVzID8gZmFsc2UgOiB0cnVlKTsKKyAgICBpZiAoIXJlcGxhY2Vt
ZW50UmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIq
IG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCk7CisgICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAg
ICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBpZiAobV9hbHRlcm5hdGl2ZS50eXBl
KCkgIT0gQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlUmV2ZXJzaW9uICYmICht
YXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09
IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9u
ID0gbV9hbHRlcm5hdGl2ZS5vcmlnaW5hbFRleHQoKTsKKyAgICAgICAgbWFya2Vycy0+YWRkTWFy
a2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0aW9uKTsKKyAg
ICB9Cit9CisKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQoreworICAgIGlmICghbV9hbHRlcm5hdGl2
ZS5yYW5nZVdpdGhBbHRlcm5hdGl2ZSgpIHx8ICFtX2FsdGVybmF0aXZlLmlzQWN0aXZlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2FsdGVybmF0aXZlLnR5cGUoKSAhPSBB
bHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVDb3JyZWN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9hbHRlcm5hdGl2ZS5y
YW5nZVdpdGhBbHRlcm5hdGl2ZSgpLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsK
KyAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0gCisgICAgCisgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdh
eXMgYmUgd2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVl
LCB3ZSBzdGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRo
ZSBjb3JyZWN0aW9uLgorICAgIEFTU0VSVChtX2FsdGVybmF0aXZlLnJhbmdlV2l0aEFsdGVybmF0
aXZlKCktPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7CisgICAgZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGll
ZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJl
Y3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikK
K3sKKyAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGll
bnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246
OkNsb3NlVHlwaW5nIHwgRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5bGUgfCBGcmFtZVNl
bGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLmVuZCgpKTsKKworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJz
KHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6
QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlcik7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQoreworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGlmICgh
Y3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0
aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgLy8gQ3JlYXRpbmcg
YSBWaXNpYmxlIHBvc2l0aW9uIHRyaWdnZXJzIGEgbGF5b3V0IGFuZCB0aGVyZSBpcyBubworICAg
IC8vIGd1YXJhbnRlZSB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgc3RpbGwgdmFsaWQuCisgICAgaWYg
KHNlbGVjdGlvblBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBv
c2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgaWYgKHNlbGVjdGlvblBvc2l0aW9u
ICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUG9zaXRp
b24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOworICAgIGlm
IChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5v
ZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihub2RlKTsKKyAgICBzaXplX3Qg
bWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIq
IG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghbWFya2VyKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAocmVzcG9uZFRvTWFya2VyQXRFbmRPZldv
cmQoKm1hcmtlciwgcG9zaXRpb24sIG9wdGlvbnMpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoVGltZXI8
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4qKQoreworICAgIG1faXNEaXNtaXNzZWRCeUVkaXRv
ciA9IGZhbHNlOworICAgIHN3aXRjaCAobV9hbHRlcm5hdGl2ZS50eXBlKCkpIHsKKyAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZUNvcnJlY3Rpb246IHsKKyAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgp
LCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3Rh
cnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAg
ICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVTaG93Q29y
cmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDAp
OworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRJbmZvOjpB
bHRlcm5hdGl2ZVR5cGVSZXZlcnNpb246CisgICAgeworICAgICAgICBjb25zdCBSYW5nZSogcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlLnJhbmdlV2l0aEFsdGVybmF0aXZlKCku
Z2V0KCk7CisgICAgICAgIGNvbnN0IEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKiBk
ZXRhaWxzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFp
bHMqPihtX2FsdGVybmF0aXZlLmRldGFpbHMoKSk7CisgICAgICAgIGlmICghcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUgfHwgIWRldGFpbHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbV9hbHRl
cm5hdGl2ZS5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9
IHBsYWluVGV4dChyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmUu
c2V0T3JpZ2luYWxUZXh0KG9yaWdpbmFsVGV4dCk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KG1fZnJhbWUtPnZpZXcoKSwgcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fYWx0ZXJuYXRpdmUudHlw
ZSgpLCBib3VuZGluZ0JveCwgb3JpZ2luYWxUZXh0LCBkZXRhaWxzLT5yZXBsYWNlbWVudFN0cmlu
ZygpLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoK
KyAgICB7CisgICAgICAgIGNvbnN0IFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG1fYWx0
ZXJuYXRpdmUucmFuZ2VXaXRoQWx0ZXJuYXRpdmUoKS5nZXQoKTsKKyAgICAgICAgaWYgKCFyYW5n
ZVdpdGhBbHRlcm5hdGl2ZSB8fCBwbGFpblRleHQocmFuZ2VXaXRoQWx0ZXJuYXRpdmUpICE9IG1f
YWx0ZXJuYXRpdmUub3JpZ2luYWxUZXh0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
U3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1f
YWx0ZXJuYXRpdmUucmFuZ2VXaXRoQWx0ZXJuYXRpdmUoKSkucGFyYWdyYXBoUmFuZ2UoKS5nZXQo
KSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hl
Y2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlLm9yaWdpbmFsVGV4dCgpLCBw
YXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmUuY2xlYXJSYW5nZSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBz
dWdnZXN0aW9ucy5maXJzdCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CisgICAg
ICAgIG1fYWx0ZXJuYXRpdmUuc2V0SXNBY3RpdmUodHJ1ZSk7CisgICAgICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHJhbmdlQm91bmRpbmdCb3hJblJvb3RWaWV3KG1fZnJhbWUtPnZpZXcoKSwg
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fYWx0ZXJuYXRp
dmUudHlwZSgpLCBib3VuZGluZ0JveCwgbV9hbHRlcm5hdGl2ZS5vcmlnaW5hbFRleHQoKSwgdG9w
U3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVEaWN0YXRpb25BbHRlcm5hdGl2
ZXM6CisgICAgeworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICAgICBjb25z
dCBSYW5nZSogcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlLnJhbmdlV2l0aEFs
dGVybmF0aXZlKCkuZ2V0KCk7CisgICAgICAgIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlRGV0
YWlscyogZGV0YWlscyA9IHN0YXRpY19jYXN0PGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlRGV0
YWlscyo+KG1fYWx0ZXJuYXRpdmUuZGV0YWlscygpKTsKKyAgICAgICAgaWYgKCFyYW5nZVdpdGhB
bHRlcm5hdGl2ZSB8fCAhZGV0YWlscyB8fCAhZGV0YWlscy0+ZGljdGF0aW9uQ29udGV4dCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByYW5n
ZUJvdW5kaW5nQm94SW5Sb290VmlldyhtX2ZyYW1lLT52aWV3KCksIHJhbmdlV2l0aEFsdGVybmF0
aXZlKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAg
aWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0Rp
Y3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdCb3gsIGRldGFpbHMtPmRpY3RhdGlvbkNvbnRl
eHQoKSk7CisjZW5kaWYKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChj
b25zdCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBSYW5nZSogcmFuZ2VXaXRoQWx0ZXJuYXRpdmUg
PSBtX2FsdGVybmF0aXZlLnJhbmdlV2l0aEFsdGVybmF0aXZlKCkuZ2V0KCk7CisgICAgaWYgKCFy
YW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJhbmdlV2l0aEFs
dGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CisgICAgCisg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhh
cyBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRy
aWdnZXJlZC4KKyAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9hbHRlcm5hdGl2ZS5vcmlnaW5hbFRl
eHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hbHRlcm5hdGl2ZS5zZXRJc0FjdGl2ZShm
YWxzZSk7CisKKyAgICBzd2l0Y2ggKG1fYWx0ZXJuYXRpdmUudHlwZSgpKSB7CisgICAgY2FzZSBB
bHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVDb3JyZWN0aW9uOgorICAgICAgICBp
ZiAocmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHQocmVz
dWx0LCBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICBlbHNlIGlmICgh
bV9pc0Rpc21pc3NlZEJ5RWRpdG9yKQorICAgICAgICAgICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUt
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJhbmdl
V2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2Fs
dGVybmF0aXZlLm9yaWdpbmFsVGV4dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbHRl
cm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVSZXZlcnNpb246CisgICAgY2FzZSBBbHRl
cm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAg
ICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRl
eHQocmVzdWx0LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZURpY3RhdGlvbkFs
dGVybmF0aXZlczoKKyAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGFw
cGx5QWx0ZXJuYXRpdmVUZXh0KHJlc3VsdCwgbWFya2VyVHlwZXNGb3JEaWN0YXRpb25BbHRlcm5h
dGl2ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9hbHRlcm5hdGl2ZS5jbGVh
clJhbmdlKCk7Cit9CisKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYg
Y2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCiti
b29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3Qg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXIgJm1hcmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKCgobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbigpLmlzTnVsbCgpKSB8fCBtYXJrZXIudHlwZSgpID09
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8fCBtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVu
ZE9mZnNldCgpKSA9PSBlbmRPZmZzZXQpOworfQorCitib29sIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJiBt
YXJrZXIsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZldvcmRQb3NpdGlvbiwgRnJhbWVTZWxlY3Rpb246
OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAob3B0aW9ucyAmIEZyYW1l
U2VsZWN0aW9uOjpEaWN0YXRpb25UcmlnZ2VyZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOworICAgIFJlZlB0cjxSYW5n
ZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBt
YXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBTdHJp
bmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKKyAgICBpZiAoIWN1
cnJlbnRXb3JkLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9hbHRlcm5h
dGl2ZS5zZXRPcmlnaW5hbFRleHQoY3VycmVudFdvcmQpOworICAgIHN3aXRjaCAobWFya2VyLnR5
cGUoKSkgeworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgorICAgICAgICBtX2Fs
dGVybmF0aXZlLnNldFJhbmdlV2l0aEFsdGVybmF0aXZlKHdvcmRSYW5nZSk7CisgICAgICAgIG1f
YWx0ZXJuYXRpdmUuc2V0RGV0YWlscyhBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6
Y3JlYXRlKCIiKSk7CisgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5h
dGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CisgICAgICAg
IG1fYWx0ZXJuYXRpdmUuc2V0UmFuZ2VXaXRoQWx0ZXJuYXRpdmUod29yZFJhbmdlKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGl2ZS5zZXREZXRhaWxzKEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRh
aWxzOjpjcmVhdGUobWFya2VyLmRlc2NyaXB0aW9uKCkpKTsKKyAgICAgICAgc3RhcnRBbHRlcm5h
dGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZVJldmVy
c2lvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlv
bkFsdGVybmF0aXZlczogeworICAgICAgICBjb25zdCBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKiBt
YXJrZXJEZXRhaWxzID0gc3RhdGljX2Nhc3Q8Y29uc3QgRGljdGF0aW9uTWFya2VyRGV0YWlscyo+
KG1hcmtlci5kZXRhaWxzKCkpOworICAgICAgICBpZiAoIW1hcmtlckRldGFpbHMpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChjdXJyZW50V29yZCAhPSBtYXJrZXJEZXRh
aWxzLT5vcmlnaW5hbFRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
bV9hbHRlcm5hdGl2ZS5zZXRSYW5nZVdpdGhBbHRlcm5hdGl2ZSh3b3JkUmFuZ2UpOworICAgICAg
ICBtX2FsdGVybmF0aXZlLnNldERldGFpbHMoRGljdGF0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpj
cmVhdGUobWFya2VyRGV0YWlscy0+ZGljdGF0aW9uQ29udGV4dCgpKSk7CisgICAgICAgIHN0YXJ0
QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5
cGVEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkK
K3sKKyAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hv
dWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0
aW9uSW5kaWNhdG9yKTsKKworICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1
dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOworICAgIG1fb3JpZ2luYWxTdHJpbmdG
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uKiBjb21tYW5kKQoreworICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlu
a0NvbW1hbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0
aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAg
aWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJz
LT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Cisg
ICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxD
aGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK0VkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6Y2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFt
ZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IDA7Cit9CisKK1RleHRDaGVja2VyQ2xpZW50KiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCit7CisgICAgaWYgKEVkaXRv
ckNsaWVudCogb3duZXIgPSBjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIG93bmVyLT50ZXh0Q2hl
Y2tlcigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQoreworICAgIGNs
aWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2Nv
cnJlY3Rpb25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKK30K
Kwordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxS
YW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3sKKyAgICByZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdl
dCgpKSk7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkKK3sKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhjaGFu
Z2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBj
aGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdF
eGVtcHRpb24pOworfQorCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3Jy
ZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcpCit7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBt
YXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpOworICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07CisgICAgICAg
IGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJU
eXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQorICAgICAgICAgICAgbWFya2Vy
cy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIHJlcGxhY2VkU3Ry
aW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxh
Y2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUpOworICAgIH0KK30KKwordm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29y
cmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVk
LCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgaWYgKCFyYW5nZU9mQ29ycmVjdGlv
bikKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2Vy
cyA9IHJhbmdlT2ZDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMg
PSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIGlmIChjb3JyZWN0ZWRPbmNlTWFya2Vycy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBTcGVsbGluZyBjb3JyZWN0ZWQgdGV4
dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdXNlciBoYXMg
cmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgorICAgIC8vIGVkaXRlZCBpdCB0byBzb21l
dGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIgYWNjb3JkaW5nbHkuCisgICAgaWYg
KG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29ycmVjdGVkT25jZU1hcmtlcnMpICYm
IGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigpID09IGNvcnJlY3RlZCkKKyAg
ICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50
OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIGVs
c2UKKyAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9y
Q2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAg
ICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcik7Cit9CisKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCit7CisgICAgbV9vcmlnaW5hbFN0cmlu
Z0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBvcmlnaW5hbFN0cmluZzsKKyAgICBtX3Bv
c2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IHBvc2l0aW9uOworfQorCit2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKiBjb21tYW5kKQorewor
ICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gY29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCku
ZW5kKCk7CisgICAgaWYgKGVuZE9mU2VsZWN0aW9uICE9IG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBwcmVjZWRp
bmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGVuZE9mU2VsZWN0aW9uLnByZXZpb3VzKCk7CisgICAgaWYg
KGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biwgZW5kT2ZTZWxlY3Rpb24pOworICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFp
c1doaXRlc3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxl
dGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCisgICAgLy8gd2hpdGVzcGFjZS4g
U28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlz
IHBvc2l0aW9uLCB3ZQorICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0IGl0IGFnYWluLgorICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29y
aWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7Cit9CisKK2Jvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9C
ZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK3sKKyAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7CisgICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFu
Z2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKKyAgICAgICAg
aWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKKyAgICAgICAg
ICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdl
VG9CZVJlcGxhY2VkLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1hcmtlckNvbnRyb2xsZXIt
Pmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENv
cnJlY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBiZWdpbm5p
bmdPZlJhbmdlID0gcmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3Np
dGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlv
dXMoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwg
YmVnaW5uaW5nT2ZSYW5nZSk7CisKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
ID0gbWFya2VyQ29udHJvbGxlci0+bWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtYXJrZXJzW2ldLT5kZXNjcmlwdGlvbigpID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlcikKK3sKKyNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFtYXJrZXIgfHwgbWFya2Vy
LT50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGNvbnN0IERpY3RhdGlvbk1hcmtlckRldGFpbHMqIG1hcmtl
ckRldGFpbHMgPSBzdGF0aWNfY2FzdDxjb25zdCBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKj4obWFy
a2VyLT5kZXRhaWxzKCkpOworICAgIGNsaWVudCgpLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXMobWFya2VyRGV0YWlscy0+ZGljdGF0aW9uQ29udGV4dCgpKTsKKyNlbmRpZgorfQorCit2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
KCkKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSSgpOworI2Vu
ZGlmCit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NjNlYmE3YmI4NDA5ZjI0YzM1N2I1OWM3MzI2ZjEyMGYwOTE0MmU2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAg
LTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cl9oCisjZGVmaW5lIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0b3JDbGllbnQ7CitjbGFzcyBFZGl0
Q29tbWFuZDsKK2NsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247CitjbGFzcyBGcmFtZTsKK2Ns
YXNzIFRleHRDaGVja2VyQ2xpZW50OworCitjbGFzcyBBbHRlcm5hdGl2ZVRleHREZXRhaWxzIDog
cHVibGljIFJlZkNvdW50ZWQ8QWx0ZXJuYXRpdmVUZXh0RGV0YWlscz4geworcHVibGljOgorICAg
IEFsdGVybmF0aXZlVGV4dERldGFpbHMoKSB7IH0KKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGl2ZVRl
eHREZXRhaWxzKCkgeyB9Cit9OworICAgIAorY2xhc3MgQWx0ZXJuYXRpdmVUZXh0SW5mbyB7Citw
dWJsaWM6CisgICAgZW51bSBBbHRlcm5hdGl2ZVR5cGUgeworICAgICAgICBBbHRlcm5hdGl2ZVR5
cGVDb3JyZWN0aW9uID0gMCwKKyAgICAgICAgQWx0ZXJuYXRpdmVUeXBlUmV2ZXJzaW9uLAorICAg
ICAgICBBbHRlcm5hdGl2ZVR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zLAorICAgICAgICBBbHRlcm5h
dGl2ZVR5cGVEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyAgICB9OworCisgICAgQWx0ZXJuYXRpdmVU
ZXh0SW5mbygpOworICAgIHZpcnR1YWwgfkFsdGVybmF0aXZlVGV4dEluZm8oKSB7IH0KKyAgICB2
b2lkIHNldFJhbmdlV2l0aEFsdGVybmF0aXZlKFBhc3NSZWZQdHI8UmFuZ2U+KTsKKyAgICB2b2lk
IGNsZWFyUmFuZ2UoKTsKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVdpdGhBbHRlcm5hdGl2
ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlwZShBbHRlcm5hdGl2ZVR5cGUgdHlwZSkgeyBtX1R5
cGUgPSB0eXBlOyB9CisgICAgQWx0ZXJuYXRpdmVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X1R5cGU7IH0KKyAgICB2b2lkIHNldERldGFpbHMoUGFzc1JlZlB0cjxBbHRlcm5hdGl2ZVRleHRE
ZXRhaWxzPik7CisgICAgY29uc3QgQWx0ZXJuYXRpdmVUZXh0RGV0YWlscyogZGV0YWlscygpIGNv
bnN0OworICAgIHZvaWQgc2V0SXNBY3RpdmUoYm9vbCBpc0FjdGl2ZSkgeyBtX2lzQWN0aXZlID0g
aXNBY3RpdmU7IH0KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FjdGl2
ZTsgfQorICAgIHZvaWQgc2V0T3JpZ2luYWxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBtX29y
aWdpbmFsVGV4dCA9IHRleHQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxUZXh0OyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxSYW5n
ZT4gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZTsKKyAgICBib29sIG1faXNBY3RpdmU7CisgICAgQWx0
ZXJuYXRpdmVUeXBlIG1fVHlwZTsKKyAgICBTdHJpbmcgbV9vcmlnaW5hbFRleHQ7CisgICAgUmVm
UHRyPEFsdGVybmF0aXZlVGV4dERldGFpbHM+IG1fZGV0YWlsczsKK307CisKK3N0cnVjdCBUZXh0
Q2hlY2tpbmdSZXN1bHQ7CisKK2VudW0gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCB7CisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCA9IDAs
CisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQsCisgICAgUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkCit9OworCitjbGFzcyBEaWN0
YXRpb25NYXJrZXJEZXRhaWxzIDogcHVibGljIERvY3VtZW50TWFya2VyRGV0YWlscyB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGljdGF0aW9uTWFya2VyRGV0YWlscz4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWN0YXRpb25NYXJrZXJEZXRhaWxz
KG9yaWdpbmFsVGV4dCwgZGljdGF0aW9uQ29udGV4dCkpOworICAgIH0KKyAgICBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxUZXh0OyB9CisgICAg
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGF0aW9uQ29u
dGV4dDsgfQorcHJpdmF0ZToKKyAgICBEaWN0YXRpb25NYXJrZXJEZXRhaWxzKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorICAgIDogbV9kaWN0
YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpCisgICAgLCBtX29yaWdpbmFsVGV4dChvcmln
aW5hbFRleHQpCisgICAgeyB9CisgICAgCisgICAgdWludDY0X3QgbV9kaWN0YXRpb25Db250ZXh0
OworICAgIFN0cmluZyBtX29yaWdpbmFsVGV4dDsKK307CisKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJ
T05fUEFORUwpCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgXAorO1wKKwor
I2Vsc2UKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkK
KyNlbmRpZgorCitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZy
YW1lKikgVU5MRVNTX0VOQUJMRUQoeyB9KQorICAgIH5BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
KCkgVU5MRVNTX0VOQUJMRUQoeyB9KQorCisgICAgdm9pZCBzdGFydEFsdGVybmF0aXZlVGV4dFVJ
VGltZXIoQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlKSBVTkxFU1NfRU5BQkxF
RCh7IH0pCisgICAgdm9pZCBzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpIFVOTEVTU19FTkFC
TEVEKHsgfSkKKworICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0KSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5B
QkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNl
bWVudCk7IH0pCisgICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwg
ZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGlu
Z0lmQXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKworICAg
IHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0o
Y29ycmVjdGlvbik7IH0pCisgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3Np
dGVFZGl0Q29tbWFuZCopIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb1Vu
YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsg
fSkKKworICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0
aW9uKTsgfSkKKyAgICB2b2lkIGFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKKworICAgIHZvaWQgaGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpIFVOTEVTU19FTkFCTEVEKHsgVU5V
U0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9u
KCkgVU5MRVNTX0VOQUJMRUQoeyB9KQorCisgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlvbigp
IGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorICAgIGJvb2wgaXNTcGVs
bGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVy
biB0cnVlOyB9KQorICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBzaG91bGRSZW1v
dmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKKworICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJl
cGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9KQorICAgIHZv
aWQgbWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKKyAgICB2b2lkIG1hcmtDb3Jy
ZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2Up
OyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyB9KQorCisgICAgLy8gVGhpcyBmdW5jdGlv
biByZXR1cm5zIGZhbHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQg
b3V0LgorICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChj
b25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqLCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0
IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyBy
ZXR1cm4gdHJ1ZTsgfSk7CisgICAgdm9pZCBkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9u
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0ob3JpZ2luYWxTdHJpbmcpOyB9KQorCisgICAgdm9pZCByZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHJlbW92ZURpY3RhdGlv
bkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciopOworCisjaWYgVVNF
KEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorcHJpdmF0ZToKKyAgICB2b2lkIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKKworICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1l
ckZvcihjb25zdCBEb2N1bWVudE1hcmtlciYsIGludCBlbmRPZmZzZXQpIGNvbnN0OworCisgICAg
U3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpOwor
ICAgIHZvaWQgYXBwbHlBbHRlcm5hdGl2ZVRleHQoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwg
Y29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpOworICAgIHZvaWQgdGlt
ZXJGaXJlZChUaW1lcjxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPiopOworICAgIHZvaWQgcmVj
b3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdl
T2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKTsKKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENoZWNrZXJD
bGllbnQqIHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdl
KGNvbnN0IFJhbmdlKikgY29uc3Q7CisgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZv
ckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOworICAgIGJv
b2wgcmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZXb3JkUG9zaXRpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rp
b25PcHRpb25zKTsKKyAgICB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCk7CisK
KyAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAg
VGltZXI8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4gbV90aW1lcjsKKyAgICBBbHRlcm5hdGl2
ZVRleHRJbmZvIG1fYWx0ZXJuYXRpdmU7CisgICAgYm9vbCBtX2lzRGlzbWlzc2VkQnlFZGl0b3I7
CisKKyAgICBTdHJpbmcgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rp
b247CisgICAgUG9zaXRpb24gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247
CisjZW5kaWYKK307CisKKyN1bmRlZiBVTkxFU1NfRU5BQkxFRAorCitpbmxpbmUgYm9vbCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQor
eworI2lmIFVTRShNQVJLRVJfUkVNT1ZBTF9VUE9OX0VESVRJTkcpCisgICAgcmV0dXJuIHRydWU7
CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggODMwZWFj
ZjZmZWVkNmZlNGViM2QwNjQzZWQwMzFkOWQ3NDI0OTBkZS4uMjQyNDY3NzA2ZjMwNWE3MDhhMmM0
ZmY3OWE1NDBmMzQ2Nzg3YjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTQ2MSw2ICs0NjEsMTIgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0VGV4dEludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5z
aWduZWQgb2YKICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgdGV4dCkpOwogfQogCit2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjppbnNlcnRUZXh0V2l0aE1hcmtlcnNJbnRvTm9kZShQYXNzUmVmUHRy
PFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQoreworICAgIGlmICghdGV4dC5pc0VtcHR5
KCkpCisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIHRleHQsIG1hcmtlcnMpKTsKK30KKwogdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4g
bm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUobm9kZSwgb2Zm
c2V0LCBjb3VudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5oCmluZGV4IGY3ZDE3NDk0Mzk0MGI1ZTljNTdmMjUzYTA0NmYyZjg0NTE4ZmM5YzAuLmIw
Nzk3NzliZTVlMGQ4NzJkOWNkODA4OThhZjg1MThkY2ZkYjc3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudE1hcmtlcjsKIGNsYXNzIEVkaXRp
bmdTdHlsZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgU3R5bGVkRWxlbWVudDsKQEAgLTgy
LDYgKzgzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzQ3JlYXRlTGlua0NvbW1h
bmQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzRGljdGF0aW9uQ29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
KGJvb2wpOwpAQCAtMTExLDYgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGluc2VydFBh
cmFncmFwaFNlcGFyYXRvcihib29sIHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50ID0gZmFsc2Up
OwogICAgIHZvaWQgaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgdm9pZCBpbnNlcnRUZXh0SW50b05v
ZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQp
OworICAgIHZvaWQgaW5zZXJ0VGV4dFdpdGhNYXJrZXJzSW50b05vZGUoUGFzc1JlZlB0cjxUZXh0
PiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcj4mIG1hcmtlcnMpOwogICAgIHZvaWQgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhQ
YXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lkIHJlYmFs
YW5jZVdoaXRlc3BhY2UoKTsKICAgICB2b2lkIHJlYmFsYW5jZVdoaXRlc3BhY2VBdChjb25zdCBQ
b3NpdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9u
QWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQxOGQyZGNhN2IwNWE1Zjg2Y2Nm
NmY2ZjI1YWJlNTI4NjAzN2NmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5jcHAKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbjo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbih1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVuZ3RoLCB1
aW50NjRfdCBjb250ZXh0KQorOiByYW5nZVN0YXJ0KHN0YXJ0KQorLCByYW5nZUxlbmd0aChsZW5n
dGgpCissIGRpY3RhdGlvbkNvbnRleHQoY29udGV4dCkKK3sgfQorICAgIAorRGljdGF0aW9uQWx0
ZXJuYXRpdmVMb2NhdGlvbjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbigpCis6IHJhbmdl
U3RhcnQoMCkKKywgcmFuZ2VMZW5ndGgoMCkKKywgZGljdGF0aW9uQ29udGV4dCgwKQoreyB9CisK
K0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb246OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24oY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYW5vdGhlcikKKzogcmFuZ2VT
dGFydChhbm90aGVyLnJhbmdlU3RhcnQpCissIHJhbmdlTGVuZ3RoKGFub3RoZXIucmFuZ2VMZW5n
dGgpCissIGRpY3RhdGlvbkNvbnRleHQoYW5vdGhlci5kaWN0YXRpb25Db250ZXh0KQoreyB9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRp
dmVMb2NhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNiYTYwMTVhZTc1MmMzZGI1ODQ2ZmYzYjVlZTNmYWVm
ZGNkNjMwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25faAorI2RlZmluZSBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uX2gKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MSU9OKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhbHRl
cm5hdGl2ZSBkaWN0YXRpb24gdGV4dC4KKyNkZWZpbmUgV1RGX1VTRV9ESUNUQVRJT05fQUxURVJO
QVRJVkVTIDEKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTElPTikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IERpY3Rh
dGlvbkFsdGVybmF0aXZlTG9jYXRpb24geworICAgIERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24odWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgY29udGV4dCk7Cisg
ICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbigpOworICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24oY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYgYW5vdGhlcik7
CisgICAgdWludDY0X3QgcmFuZ2VTdGFydDsKKyAgICB1aW50NjRfdCByYW5nZUxlbmd0aDsKKyAg
ICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0OworfTsKKworfQorCisjZW5kaWYgLy8gRGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRp
b25Db21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjRlMDQyZWRmZjJhNTY0ZWEyNTBmMDZjYzYzYzEx
Y2MxN2U2ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0
YXRpb25Db21tYW5kLmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RGljdGF0aW9uQ29tbWFuZC5oIgorCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5oIgorI2luY2x1ZGUg
Ikluc2VydFRleHRDb21tYW5kLmgiCisjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0RpY3RhdGlvbkNvbW1hbmQ6OkRpY3RhdGlvbkNvbW1hbmQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgYWx0ZXJuYXRpdmVzKQorICAgIDogQ29tcG9zaXRlRWRp
dENvbW1hbmQoZG9jdW1lbnQpCisgICAgLCBtX3RleHRUb0luc2VydCh0ZXh0KQorICAgICwgbV9h
bHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKQoreworfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6
Omluc2VydFRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBhbHRlcm5hdGl2ZXMsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbikKK3sKKyAgICBSZWZQdHI8
RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKwor
ICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCk7CisgICAgYm9vbCBjaGFuZ2VTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0
aW9uICE9IHNlbGVjdGlvbkZvckluc2VydGlvbjsKKworICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4
dDsKKyAgICBpZiAoTm9kZSogc3RhcnROb2RlID0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0
KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGlmIChzdGFydE5vZGUtPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gU2VuZCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dC4gVGhlIGV2ZW50IGhhbmRsZXIgd2lsbCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0
ZXh0KTsKKyAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNw
YXRjaEV2ZW50KGV2dCwgZWMpOworICAgICAgICAgICAgbmV3VGV4dCA9IGV2dC0+dGV4dCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPERpY3RhdGlvbkNvbW1hbmQ+IGNtZDsKKyAg
ICBpZiAobmV3VGV4dCA9PSB0ZXh0KQorICAgICAgICBjbWQgPSBEaWN0YXRpb25Db21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIG5ld1RleHQsIGFsdGVybmF0aXZlcyk7CisgICAgZWxzZQorICAgICAg
ICAvLyBJZiB0aGUgdGV4dCB3YXMgbW9kaWZpZWQgYmVmb3JlIGluc2VydGlvbiwgdGhlIGxvY2F0
aW9uIG9mIGRpY3RhdGlvbiBhbHRlcm5hdGl2ZXMKKyAgICAgICAgLy8gd2lsbCBub3QgYmUgdmFs
aWQgYW55bW9yZS4gV2Ugd2lsbCBqdXN0IGRyb3AgdGhlIGFsdGVybmF0aXZlcy4KKyAgICAgICAg
Y21kID0gRGljdGF0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBuZXdUZXh0LCBWZWN0b3I8
RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4oKSk7CisKKyAgICBpZiAoY2hhbmdlU2VsZWN0
aW9uKSB7CisgICAgICAgIGNtZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5z
ZXJ0aW9uKTsKKyAgICAgICAgY21kLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5z
ZXJ0aW9uKTsKKyAgICB9CisgICAgYXBwbHlDb21tYW5kKGNtZCk7CisgICAgaWYgKGNoYW5nZVNl
bGVjdGlvbikgeworICAgICAgICBjbWQtPnNldEVuZGluZ1NlbGVjdGlvbihjdXJyZW50U2VsZWN0
aW9uKTsKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oY3VycmVudFNl
bGVjdGlvbik7CisgICAgfQorfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQor
eworICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisgICAgc2l6ZV90IG5ld2xpbmU7CisgICAgd2hp
bGUgKChuZXdsaW5lID0gbV90ZXh0VG9JbnNlcnQuZmluZCgnXG4nLCBvZmZzZXQpKSAhPSBub3RG
b3VuZCkgeworICAgICAgICBpZiAobmV3bGluZSAhPSBvZmZzZXQpCisgICAgICAgICAgICBpbnNl
cnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKG9mZnNldCwgbmV3bGluZSAtIG9mZnNldCk7CisgICAg
ICAgIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOworICAgICAgICBvZmZzZXQgPSBuZXdsaW5l
ICsgMTsKKyAgICB9CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIGluc2VydFRleHRSdW5XaXRo
b3V0TmV3bGluZXMoMCwgbV90ZXh0VG9JbnNlcnQubGVuZ3RoKCkpOworICAgIGVsc2UgeworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RleHRUb0luc2VydC5sZW5ndGgoKTsKKyAgICAgICAg
aWYgKGxlbmd0aCAhPSBvZmZzZXQpCisgICAgICAgICAgICBpbnNlcnRUZXh0UnVuV2l0aG91dE5l
d2xpbmVzKG9mZnNldCwgbGVuZ3RoIC0gb2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgRGljdGF0
aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhzaXplX3QgbGluZVN0YXJ0
LCBzaXplX3QgbGluZUxlbmd0aCkKK3sKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGRvY3Vt
ZW50TWFya2VyczsKKyAgICBjb2xsZWN0RGljdGF0aW9uTWFya2Vyc0luUmFuZ2UobGluZVN0YXJ0
LCBsaW5lTGVuZ3RoLCBkb2N1bWVudE1hcmtlcnMpOworICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29t
bWFuZD4gY29tbWFuZCA9IEluc2VydFRleHRDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV90
ZXh0VG9JbnNlcnQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGluZUxlbmd0aCksIGRvY3VtZW50TWFy
a2Vycyk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY29tbWFuZCwgZW5kaW5nU2VsZWN0
aW9uKCkpOworfQorCit2b2lkIERpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvcigpCit7CisgICAgaWYgKCFjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0aW9uKGVuZGlu
Z1NlbGVjdGlvbigpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkp
KTsKK30KKwordm9pZCBEaWN0YXRpb25Db21tYW5kOjpjb2xsZWN0RGljdGF0aW9uTWFya2Vyc0lu
UmFuZ2Uoc2l6ZV90IHJhbmdlU3RhcnQsIHNpemVfdCByYW5nZUxlbmd0aCwgVmVjdG9yPERvY3Vt
ZW50TWFya2VyPiYgbWFya2VycykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWx0
ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb24mIGFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZXNbaV07CisgICAgICAgIGlm
IChhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ID49IHJhbmdlU3RhcnQgJiYgKGFsdGVybmF0aXZlLnJh
bmdlU3RhcnQgKyBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCkgPD0gcmFuZ2VTdGFydCArIHJhbmdl
TGVuZ3RoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBtYXJrZXJTdGFydE9mZnNldCA9IGFsdGVy
bmF0aXZlLnJhbmdlU3RhcnQgLSByYW5nZVN0YXJ0OworICAgICAgICAgICAgdW5zaWduZWQgbWFy
a2VyRW5kT2Zmc2V0ID0gbWFya2VyU3RhcnRPZmZzZXQgKyBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0
aDsKKyAgICAgICAgICAgIG1hcmtlcnMuYXBwZW5kKERvY3VtZW50TWFya2VyKERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIG1hcmtlclN0YXJ0T2Zmc2V0LCBtYXJrZXJFbmRP
ZmZzZXQsIERpY3RhdGlvbk1hcmtlckRldGFpbHM6OmNyZWF0ZShtX3RleHRUb0luc2VydC5zdWJz
dHJpbmcoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgpLCBh
bHRlcm5hdGl2ZS5kaWN0YXRpb25Db250ZXh0KSkpOworICAgICAgICAgICAgbWFya2Vycy5hcHBl
bmQoRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24s
IG1hcmtlclN0YXJ0T2Zmc2V0LCBtYXJrZXJFbmRPZmZzZXQpKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21t
YW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNTFmMGEzOWJjZjhlYTFjYmVjZWQxYWY1YTI0Zjg3NWY2ZjVhMzdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERpY3RhdGlvbkNvbW1hbmRfaAorI2RlZmluZSBEaWN0YXRpb25Db21tYW5kX2gK
KworI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRGljdGF0aW9u
QWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERv
Y3VtZW50TWFya2VyOworCitjbGFzcyBEaWN0YXRpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0
ZUVkaXRDb21tYW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRUZXh0KERvY3Vt
ZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24+IGFsdGVybmF0aXZlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHZpcnR1
YWwgYm9vbCBpc0RpY3RhdGlvbkNvbW1hbmQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Citwcml2
YXRlOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERpY3RhdGlvbkNvbW1hbmQ+IGNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlv
bkFsdGVybmF0aXZlTG9jYXRpb24+JiBhbHRlcm5hdGl2ZXMpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERpY3RhdGlvbkNvbW1hbmQoZG9jdW1lbnQsIHRleHQsIGFsdGVybmF0
aXZlcykpOworICAgIH0KKworICAgIERpY3RhdGlvbkNvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYg
YWx0ZXJuYXRpdmVzKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOworCisgICAg
dm9pZCBpbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKHNpemVfdCBsaW5lU3RhcnQsIHNpemVf
dCBsaW5lTGVuZ3RoKTsKKyAgICB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOworICAg
IHZvaWQgY29sbGVjdERpY3RhdGlvbk1hcmtlcnNJblJhbmdlKHNpemVfdCByYW5nZVN0YXJ0LCBz
aXplX3QgcmFuZ2VMZW5ndGgsIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpOworCisg
ICAgU3RyaW5nIG1fdGV4dFRvSW5zZXJ0OworICAgIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uPiBtX2FsdGVybmF0aXZlczsKK307Cit9CisKKyNlbmRpZiAvLyBEaWN0YXRpb25D
b21tYW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA3MmUyMWZhMjRhNTg1NTkx
NGZjYjhlNDgzYzkyZjRlMzc2YWJlYWI5Li41MTRjNTQ4MDJiMWM2OTcwN2FjNzM1OGIzNjRiY2Rj
MDNlZWQwN2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFwcGx5U3R5bGVD
b21tYW5kLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHkuaCIKQEAgLTM3LDEwICszOCwxMCBAQAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNsdWRl
ICJDb21wb3NpdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRl
QnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIK
KyNpbmNsdWRlICJEaWN0YXRpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVu
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVk
aXRpbmdUZXh0LmgiCkBAIC00NzYsMTMgKzQ3NywxMyBAQCBib29sIEVkaXRvcjo6c2hvdWxkU2hv
d0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICByZXR1cm4g
Y2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoZWxlbWVudCk7
CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3ZvaWQgRWRpdG9yOjpub3RpZnlDb21wb25lbnRz
T25DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwg
RnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAo
Y2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1f
ZnJhbWUpOwogICAgIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsKICAgICBtX2Rl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0
aW9uKTsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KG9sZFNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5k
aW5nU2VsZWN0aW9uKQpAQCAtNzgyLDEwICs3ODMsMTIgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRF
ZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGNtZCkKICAgICBkaXNwYXRj
aEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCgpLCBjb21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgp
KTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlv
bigpKTsKIAotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5n
KGNtZC5nZXQoKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9B
cHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogCisgICAgCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhl
IHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRo
aW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgotICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29t
bWFuZChuZXdTZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7CisgICAgRnJhbWVTZWxlY3Rpb246OlNl
dFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IGNtZC0+aXNEaWN0YXRpb25Db21tYW5kKCkgPyBG
cmFtZVNlbGVjdGlvbjo6RGljdGF0aW9uVHJpZ2dlcmVkIDogMDsKKyAgICBjaGFuZ2VTZWxlY3Rp
b25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAogICAgIGlmICghY21kLT5w
cmVzZXJ2ZXNUeXBpbmdTdHlsZSgpKQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xl
YXJUeXBpbmdTdHlsZSgpOwpAQCAtODExLDggKzgxNCw4IEBAIHZvaWQgRWRpdG9yOjp1bmFwcGxp
ZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gY21kKQogICAgIGRp
c3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhjbWQtPnN0YXJ0aW5nUm9vdEVkaXRh
YmxlRWxlbWVudCgpLCBjbWQtPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAgICAgCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5zdGFydGluZ1NlbGVjdGlvbigp
KTsKLSAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCB0cnVlLCB0
cnVlKTsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5n
KGNtZC5nZXQoKSk7CisgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlv
biwgRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nIHwgRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlw
aW5nU3R5bGUpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvVW5h
cHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogICAgIAogICAgIG1fbGFzdEVkaXRDb21tYW5kID0g
MDsKICAgICBpZiAoY2xpZW50KCkpCkBAIC04MjcsNyArODMwLDcgQEAgdm9pZCBFZGl0b3I6OnJl
YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBjbWQpCiAg
ICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNtZC0+c3RhcnRpbmdSb290
RWRpdGFibGVFbGVtZW50KCksIGNtZC0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKICAg
ICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlv
bigpKTsKLSAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCB0cnVl
LCB0cnVlKTsKKyAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdT
dHlsZSk7CiAgICAgCiAgICAgbV9sYXN0RWRpdENvbW1hbmQgPSAwOwogICAgIGlmIChjbGllbnQo
KSkKQEAgLTg0NCw3ICs4NDcsNyBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAgICAg
LCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRvcHRQdHIo
bmV3IEtpbGxSaW5nKSkKICAgICAsIG1fc3BlbGxDaGVja2VyKGFkb3B0UHRyKG5ldyBTcGVsbENo
ZWNrZXIoZnJhbWUpKSkKLSAgICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IoYWRvcHRQdHIobmV3IFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1fYWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcihhZG9wdFB0cihuZXcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihmcmFt
ZSkpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQogICAg
ICwgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklz
RGl2KQogewpAQCAtODcyLDYgKzg3NSwxMSBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dEZvckNv
bmZpcm1lZENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXR1cm4gbV9mcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVu
dElucHV0Q29tcG9zaXRpb24pOwogfQogCitib29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCit7
CisgICAgcmV0dXJuIG1fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVEaWN0YXRpb25JbnB1
dEV2ZW50KHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcywgdHJpZ2dlcmluZ0V2ZW50KTsKK30K
KwogYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBUZXh0RXZlbnQqIHRyaWdnZXJp
bmdFdmVudCkKIHsKICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCkBAIC04OTUsNyArOTAzLDcgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJp
bmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4dC5sZW5ndGgoKSA9PSAxICYmIGlz
UHVuY3QodGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIodGV4dFswXSkp
CiAgICAgICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiA9IHRydWU7CiAK
LSAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlp
bmdBdXRvY29ycmVjdGlvbiAmJiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25X
YXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhl
IGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZl
bnQgaGFuZGxlciBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRp
ZmZlcmVudCBzZWxlY3Rpb24KQEAgLTkwNiwxMiArOTE0LDE2IEBAIGJvb2wgRWRpdG9yOjppbnNl
cnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNl
bGVjdEluCiAgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gc2VsZWN0aW9u
U3RhcnQtPmRvY3VtZW50KCk7CiAKICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdGV4dAotICAg
ICAgICAgICAgVHlwaW5nQ29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKLSAgICAgICAgICAg
IGlmIChzZWxlY3RJbnNlcnRlZFRleHQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBp
bmdDb21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQ7Ci0gICAgICAgICAgICBpZiAoYXV0b2NvcnJl
Y3Rpb25XYXNBcHBsaWVkKQotICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gVHlwaW5nQ29tbWFu
ZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3I7Ci0gICAgICAgICAgICBUeXBpbmdDb21t
YW5kOjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBzZWxlY3Rpb24sIG9wdGlvbnMs
IHRyaWdnZXJpbmdFdmVudCAmJiB0cmlnZ2VyaW5nRXZlbnQtPmlzQ29tcG9zaXRpb24oKSA/IFR5
cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkNvbmZpcm0gOiBUeXBpbmdDb21tYW5kOjpUZXh0
Q29tcG9zaXRpb25Ob25lKTsKKyAgICAgICAgICAgIGlmICh0cmlnZ2VyaW5nRXZlbnQtPmlzRGlj
dGF0aW9uKCkpCisgICAgICAgICAgICAgICAgRGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dChk
b2N1bWVudC5nZXQoKSwgdGV4dCwgdHJpZ2dlcmluZ0V2ZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2
ZXMoKSwgc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Ok9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdEluc2VydGVkVGV4dCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdD
b21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQ7CisgICAgICAgICAgICAgICAgaWYgKGF1dG9jb3Jy
ZWN0aW9uV2FzQXBwbGllZCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdD
b21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsKKyAgICAgICAgICAgICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBzZWxlY3Rpb24s
IG9wdGlvbnMsIHRyaWdnZXJpbmdFdmVudCAmJiB0cmlnZ2VyaW5nRXZlbnQtPmlzQ29tcG9zaXRp
b24oKSA/IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkNvbmZpcm0gOiBUeXBpbmdDb21t
YW5kOjpUZXh0Q29tcG9zaXRpb25Ob25lKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ly8gUmV2ZWFsIHRoZSBjdXJyZW50IHNlbGVjdGlvbgogICAgICAgICAgICAgaWYgKEZyYW1lKiBl
ZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQpAQCAtOTMxLDcgKzk0Myw3IEBAIGJvb2wg
RWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4i
LCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0
b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rp
b25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJl
Y3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVk
ID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAg
ICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAtOTQ5LDcgKzk2
MSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwor
ICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAg
ICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oKTsKIApAQCAtMTE3Myw3ICsxMTg1LDcgQEAgdm9pZCBFZGl0b3I6OnRvZ2ds
ZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudCgpCiAKIGJvb2wgRWRpdG9yOjppc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogewotICAgIHJldHVybiBtX3NwZWxsaW5nQ29ycmVj
dG9yLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4g
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbigpCkBAIC0xNzcyLDcgKzE3ODQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAog
I2VuZGlmCiAKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7Ci0gICAgICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpOworICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5UGVu
ZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogCiAgICAgICAgIFRleHRDaGVj
a2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOwogCkBAIC0xOTExLDcgKzE5MjMs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0QwogICAgIEFTU0VSVCh1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkpOwogCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRpbmcgYXV0b2Nv
cnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCi0gICAgQVNTRVJUKCFtX3NwZWxsaW5nQ29ycmVjdG9y
LT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKKyAgICBBU1NFUlQoIW1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29sIHNob3VsZE1h
cmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFy
OwogICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlv
bnMgJiBUZXh0Q2hlY2tpbmdUeXBlU2hvd0NvcnJlY3Rpb25QYW5lbDsKQEAgLTIwMDQsNyArMjAx
Niw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hl
Y2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAgICAgIGlmIChzaG91bGRNYXJrU3Bl
bGxpbmcgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1
bHRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdExvY2F0aW9u
ICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNB
dEFtYmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4g
MCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlz
c3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0
TGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNTcGVsbGlu
Z01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkpCisgICAgICAgICAgICBpZiAoIW1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxp
bmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtaXNzcGVs
bGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1h
cmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJl
c3VsdC0+cmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFtbWFy
ICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBwYXJhZ3JhcGgu
Y2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkgewpAQCAt
MjA0Nyw3ICsyMDU5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQ
dHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZlY3QKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gcGxhaW5U
ZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgIGJvb2wgZXhpc3RpbmdNYXJr
ZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5wcm9jZXNzTWFya2Vy
c09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KHJlc3VsdCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCks
IHJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgICAgIGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0
UmVwbGFjZW1lbnQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJz
T25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQocmVzdWx0LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwg
cmVwbGFjZWRTdHJpbmcpOwogICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRS
ZXBsYWNlbWVudCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjA1OCw3ICsyMDcw
LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVj
a1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZlY3QKICAgICAgICAgICAgICAgICAvLyBzaG91bGRT
aG93Q29ycmVjdGlvblBhbmVsIGNhbiBiZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMgYXZh
aWxhYmxlLgogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0
aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IG9ubHkgc2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAgICAg
ICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG93KHJhbmdlVG9SZXBsYWNlLCBy
ZXN1bHQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5zaG93KHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBzaG93aW5nIGNvcnJlY3Rp
b24gcGFuZWwsIHdlIGlnbm9yZSBvdGhlciBjb3JyZWN0aW9uIG9yIHJlcGxhY2VtZW50LgpAQCAt
MjA5NCw3ICsyMTA2LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQ
dHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZlY3QKIAogICAgICAgICAgICAg
ICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5k
b25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya0NvcnJlY3Rpb24ocGFyYWdyYXBoLnN1YnJhbmdl
KHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCksIHJlcGxhY2VkU3RyaW5nKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrQ29ycmVj
dGlvbihwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3Ro
KSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MjEyNywxMiArMjEzOSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJp
bmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBpZiAoIXNob3VsZEluc2VydFRl
eHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFz
dGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgc2VsZWN0
aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uKTsKICAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxS
YW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7Ci0gICAg
bV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7Cisg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdl
LmdldCgpKTsKIH0KIAogCkBAIC0yMTU2LDEyICsyMTY4LDEyIEBAIHZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGlu
Z1NlbGVjCiAKIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVj
dGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVk
LCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci0+cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVk
LCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRX
b3JkQm91bmRhcnkpCiB7Ci0gICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG91bGRSZW1v
dmVNYXJrZXJzVXBvbkVkaXRpbmcoKSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlmIGFu
IGVkaXRpbmcgY29tbWFuZCB3aWxsIGNoYW5nZSB0aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVuIGlu
IG9uZSBvZgpAQCAtMjIyNSwxMyArMjIzNywxOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgUmVmUHRy
PFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBzdGFydE9mRmlyc3RX
b3JkLmRlZXBFcXVpdmFsZW50KCksIGVuZE9mTGFzdFdvcmQuZGVlcEVxdWl2YWxlbnQoKSk7CiAK
LSAgICBkb2N1bWVudC0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRp
Y2F0b3IgfCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbiwgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAg
Ly8gV2hlbiB3ZSByZW1vdmUgZGljdGF0aW9uIG1hcmtlcnMsIHdlIGFsc28gbmVlZCB0byB0ZWxs
IGNsaWVudCB0byByZW1vdmUgYW55IGRpY3RhdGlvbiBhbHRlcm5hdGl2ZXMgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgbWFya2VyLiAKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBkaWN0YXRpb25N
YXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS0+bWFya2Vyc0luUmFuZ2Uod29yZFJhbmdlLmdl
dCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGRpY3RhdGlvbk1hcmtlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9y
TWFya2VyKGRpY3RhdGlvbk1hcmtlcnNbaV0pOworCisgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+
cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8
IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVzLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyKTsKICAgICBkb2N1bWVudC0+bWFya2VycygpLT5jbGVhckRlc2NyaXB0aW9uT25NYXJr
ZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQpOwogfQogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJp
bmcpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihwb3NpdGlvbiwgb3Jp
Z2luYWxTdHJpbmcpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQpAQCAtMjM1NiwyMCArMjM3MywxOSBAQCB2
b2lkIEVkaXRvcjo6YWRkVG9LaWxsUmluZyhSYW5nZSogcmFuZ2UsIGJvb2wgcHJlcGVuZCkKICAg
ICBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSA9IGZhbHNlOwogfQogCi12b2lkIEVk
aXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit2b2lkIEVkaXRvcjo6c3RhcnRBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCkKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdGFydENv
cnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rp
b24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c3RhcnRBbHRlcm5hdGl2ZVRl
eHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZUNvcnJlY3Rpb24p
OwogfQogCi12b2lkIEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKK3ZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZl
VGV4dChjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0
b3ItPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb3JyZWN0aW9uKTsKKyAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGFsdGVy
bmF0aXZlKTsKIH0KIAotCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdu
b3JlZCgpCit2b2lkIEVkaXRvcjo6ZGlzbWlzc0FsdGVybmF0aXZlVGV4dFVJKCkKIHsKLSAgICBt
X3NwZWxsaW5nQ29ycmVjdG9yLT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxJZ25vcmVkKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogfQogCiBib29sIEVk
aXRvcjo6aW5zaWRlVmlzaWJsZUFyZWEoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdApA
QCAtMjUxMCw3ICsyNTI2LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpuZXh0VmlzaWJs
ZVJhbmdlKFJhbmdlKiBjdXJyZW50UmFuZ2UsIGNvbnN0IFN0cmluZyYgdGEKICAgICByZXR1cm4g
Zmlyc3RWaXNpYmxlUmFuZ2UodGFyZ2V0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBFZGl0b3I6OmNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSkKK3ZvaWQgRWRp
dG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25z
KQogewogICAgIC8vIElmIHRoZSBuZXcgc2VsZWN0aW9uIGlzIG9ycGhhbmVkLCB0aGVuIGRvbid0
IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChuZXdTZWxlY3Rpb24uc3RhcnQoKS5pc09y
cGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09ycGhhbigpKQpAQCAtMjUyMSwxNCArMjUz
Nyw4IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBiCiAgICAgLy8gVGhlIG9sZCBzZWxlY3Rpb24g
Y2FuIGJlIGludmFsaWQgaGVyZSBhbmQgY2FsbGluZyBzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY2Fu
IHByb2R1Y2Ugc29tZSBzdHJhbmdlIGNhbGxzLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0v
NTcyOTMxNT4gU29tZSBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlIGNvbnRhaW4gUmFuZ2Vz
IGZvciBzZWxlY3Rpb25zIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZAogICAgIGJvb2wgc2VsZWN0
aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Q
b3NpdGlvbiB8fCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpIHsKLSAgICAgICAgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlv
bnMgb3B0aW9ucyA9IDA7Ci0gICAgICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgICAgIG9w
dGlvbnMgfD0gRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nOwotICAgICAgICBpZiAoY2xlYXJU
eXBpbmdTdHlsZSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gRnJhbWVTZWxlY3Rpb246OkNsZWFy
VHlwaW5nU3R5bGU7CisgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rp
b24sIG9wdGlvbnMpOwotICAgIH0KIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNo
YW5nZSB0aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlv
biB3aXRoaW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1
cm4gaW4gdGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTI2MTUs
NyArMjYyNSw3IEBAIHZvaWQgRWRpdG9yOjp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVu
dCogZSkKIAogdm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkK
IHsKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgZGlzbWlzc0Fs
dGVybmF0aXZlVGV4dFVJKCk7CiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhlKTsKIH0KQEAgLTI4ODUsNyArMjg5NSw3IEBAIHZvaWQg
RWRpdG9yOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIAog
dm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBv
cHRpb25zKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0b3BQZW5kaW5nQ29ycmVjdGlv
bihvbGRTZWxlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c3RvcFBl
bmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0g
b3B0aW9ucyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsKICAgICBib29sIGlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKTsKQEAgLTI5MzUsNyArMjk0NSw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJh
CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIpOwogCi0gICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24pOworICAgIG5vdGlmeUNvbXBvbmVudHNPbkNoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
LCBvcHRpb25zKTsKIH0KIAogc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5v
ZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAzYzI1NDRhNzE2Y2FmZDhkOGQzNGE5ZjMy
MGFiYTU5ODUxZmI3YTZmLi4wZDkxN2I5ODUwNzdmOTI4MTFhYzhjMTU3ZGQ1MmU4ZWE5MmQwMGVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkNsaXBib2FyZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
LmgiCiAjaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5o
IgpAQCAtNjEsNyArNjIsNyBAQCBjbGFzcyBQYXN0ZWJvYXJkOwogY2xhc3MgU2ltcGxlRm9udERh
dGE7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKLWNsYXNz
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI7CitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIGNsYXNzIFRleHQ7CiBjbGFzcyBUZXh0
Q2hlY2tlckNsaWVudDsKQEAgLTEzMiw4ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91
bGRTaG93RGVsZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50KikgY29uc3Q7CiAgICAgYm9vbCBzaG91
bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShT
dHlsZVByb3BlcnR5U2V0KiwgUmFuZ2UqKTsKLSAgICAKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKTsKKwogICAg
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVu
ZGluZ1NlbGVjdGlvbik7CiAKICAgICBib29sIHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoaW50IHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0OwpAQCAtMjAzLDYgKzIwMyw3IEBA
IHB1YmxpYzoKICAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgRXZlbnQqIHRyaWdn
ZXJpbmdFdmVudCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0KTsKICAgICBib29sIGluc2VydFRleHRXaXRob3V0U2VuZGluZ1Rl
eHRFdmVudChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgVGV4dEV2ZW50
KiB0cmlnZ2VyaW5nRXZlbnQpOworICAgIGJvb2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0
cmluZyYsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiYgZGljdGF0
aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KTsKICAgICBib29sIGluc2Vy
dExpbmVCcmVhaygpOwogICAgIGJvb2wgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7CiAgICAg
CkBAIC0zMTksMTAgKzMyMCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmco
UmFuZ2UqLCBib29sIHByZXBlbmQpOwogCi0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCk7Ci0gICAgLy8gSWYgdXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBjb3Jy
ZWN0aW9uIHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSBp
dCBtZWFucyB0aGF0IHVzZXIgaGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCi0gICAgdm9pZCBoYW5k
bGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKLSAgICB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICB2b2lkIHN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcigpOworICAgIC8vIElmIHVzZXIgYWNjZXB0ZWQgYWx0ZXJuYXRp
dmUgdGV4dCwgImFsdGVybmF0aXZlIiBoYXMgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2UgaXQg
bWVhbnMgdGhhdCB1c2VyIGhhcyBkaXNtaXNzZWQgdGhlIGFsdGVybmF0aXZlIHRleHQgVUkuCisg
ICAgdm9pZCBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChjb25zdCBTdHJpbmcmIGFsdGVy
bmF0aXZlKTsKKyAgICB2b2lkIGRpc21pc3NBbHRlcm5hdGl2ZVRleHRVSSgpOwogCiAgICAgdm9p
ZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFy
dFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNlKTsKQEAgLTQwMSw3ICs0MDIsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAgT3duUHRyPEtpbGxSaW5n
PiBtX2tpbGxSaW5nOwogICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOwot
ICAgIE93blB0cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX3NwZWxsaW5nQ29ycmVj
dG9yOworICAgIE93blB0cjxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPiBtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX21hcms7CiAgICAgYm9vbCBt
X2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQ7CiAgICAgRWRpdG9yUGFyYWdyYXBoU2Vw
YXJhdG9yIG1fZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcjsKQEAgLTQyMyw3ICs0MjQsOCBAQCBw
cml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGxhc3RWaXNpYmxlUmFuZ2UoY29uc3QgU3Ry
aW5nJiwgRmluZE9wdGlvbnMpOwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFu
Z2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKLSAgICB2b2lkIGNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7CisgICAgdm9pZCBj
aGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2Vs
ZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgdm9pZCBu
b3RpZnlDb21wb25lbnRzT25DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpOwogCiAg
ICAgTm9kZSogZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggYjRkOTJlMzNiMjQ3NzVkN2EzM2E2
ZGNmZGNmNDc1YjlmNjdiNGM0My4uMTUyYjIwNGU3ZDNiNjkwYmU3MTc0YzYwOWI5OTEwMDFlNTIz
ZDk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTE4LDYg
KzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2xlYXJUeXBpbmdTdHlsZSA9IDEgPDwgMiwKICAg
ICAgICAgU3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkID0gMSA8PCAzLAogICAgICAgICBEb05vdFNl
dEZvY3VzID0gMSA8PCA0LAorICAgICAgICBEaWN0YXRpb25UcmlnZ2VyZWQgPSAxIDw8IDUKICAg
ICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQgU2V0U2VsZWN0aW9uT3B0aW9uczsgLy8gVW5pb24g
b2YgdmFsdWVzIGluIFNldFNlbGVjdGlvbk9wdGlvbiBhbmQgRVVzZXJUcmlnZ2VyZWQKICAgICBz
dGF0aWMgaW5saW5lIEVVc2VyVHJpZ2dlcmVkIHNlbGVjdGlvbk9wdGlvbnNUb1VzZXJUcmlnZ2Vy
ZWQoU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggZTA5NjVlMGY2NTVm
NjcwNmI3MDRjZjU4ZmI4NGU4ZTZkMjdlOTgxNi4uNmRiNDdjOWZlMmE0ZDQ4ODQxMzFjMTNmNWVj
OGFmYTQ1ZTAwMDQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC00NSw2ICs0NiwyMiBAQCBJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8
VGV4dD4gbm9kZSwgdW5zaQogICAgIEFTU0VSVCghbV90ZXh0LmlzRW1wdHkoKSk7CiB9CiAKK0lu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUGFzc1Jl
ZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycykKKyAgICA6IFNpbXBsZUVkaXRDb21t
YW5kKG5vZGUtPmRvY3VtZW50KCkpCisgICAgLCBtX25vZGUobm9kZSkKKyAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKKyAgICAsIG1fdGV4dCh0ZXh0KQoreworICAgIEFTU0VSVChtX25vZGUpOworICAg
IEFTU0VSVChtX29mZnNldCA8PSBtX25vZGUtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIW1fdGV4
dC5pc0VtcHR5KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJz
W2ldOworICAgICAgICBtX21hcmtlcnMuYXBwZW5kKERvY3VtZW50TWFya2VyKG1hcmtlci50eXBl
KCksIG1hcmtlci5zdGFydE9mZnNldCgpICsgb2Zmc2V0LCBtYXJrZXIuZW5kT2Zmc2V0KCkgKyBv
ZmZzZXQsIG1hcmtlci5kZXRhaWxzKCkpKTsKKyAgICB9Cit9CisgICAgCiB2b2lkIEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIGlmICghbV9ub2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoKSkKQEAgLTU5LDYgKzc2LDEwIEBAIHZvaWQgSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBtX25vZGUtPmlu
c2VydERhdGEobV9vZmZzZXQsIG1fdGV4dCwgZWMpOwogCisgICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyKiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9tYXJrZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtYXJr
ZXJDb250cm9sbGVyLT5hZGRNYXJrZXIobV9ub2RlLmdldCgpLCBtX21hcmtlcnNbaV0pOworCiAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+bm9kZVRleHRDaGFuZ2VOb3RpZmljYXRpb24obV9u
b2RlLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFRleHRJbnNlcnRlZCwgbV9vZmZzZXQs
IG1fdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5oCmluZGV4IGY2ODU0NzIxYmExYTFiNWI5MzU3OGY3OWNhNzg5NTI2YzE4
NjMxZTMuLjUyMmUxZTJhZDc2ODc0ZDc5ODdjNmMzYThlM2EyYzAwOWE2OWU5OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oCkBA
IC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnRN
YXJrZXI7CiBjbGFzcyBUZXh0OwogCiBjbGFzcyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kIDog
cHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKQEAgLTM5LDggKzQwLDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKG5vZGUs
IG9mZnNldCwgdGV4dCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+
JiBtYXJrZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kKG5vZGUsIG9mZnNldCwgdGV4dCwgbWFya2VycykpOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4g
bm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2Vy
cyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKQEAgLTUyLDYgKzU5LDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8VGV4dD4gbV9ub2RlOwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwogICAgIFN0cmlu
ZyBtX3RleHQ7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtX21hcmtlcnM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4
dENvbW1hbmQuY3BwCmluZGV4IDM5ZmEyYTg5N2ZiNmMyYTdhNzVjN2FmNWQzNjgyOWEwNWM0MzY2
MDIuLjkzZTliMTMyN2U0MjdmZTcwODAzN2I2YTVmYzEyZGI5N2YwNzBjOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5j
bHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTQ2LDYgKzQ3LDE1
IEBAIEluc2VydFRleHRDb21tYW5kOjpJbnNlcnRUZXh0Q29tbWFuZChEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vCiB7CiB9CiAKK0luc2VydFRleHRDb21tYW5kOjpJ
bnNlcnRUZXh0Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycykKKyAgICA6IENvbXBvc2l0ZUVk
aXRDb21tYW5kKGRvY3VtZW50KQorICAgICwgbV90ZXh0KHRleHQpCisgICAgLCBtX3NlbGVjdElu
c2VydGVkVGV4dChmYWxzZSkKKyAgICAsIG1fcmViYWxhbmNlVHlwZShSZWJhbGFuY2VMZWFkaW5n
QW5kVHJhaWxpbmdXaGl0ZXNwYWNlcykKKyAgICAsIG1fbWFya2VycyhtYXJrZXJzKQoreworfQor
CiBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6cG9zaXRpb25JbnNpZGVUZXh0Tm9kZShjb25z
dCBQb3NpdGlvbiYgcCkKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBwOwpAQCAtMTY1LDcgKzE3NSwx
MCBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgUmVmUHRyPFRl
eHQ+IHRleHROb2RlID0gc3RhcnRQb3NpdGlvbi5jb250YWluZXJUZXh0KCk7CiAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIG9mZnNldCA9IHN0YXJ0UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCk7CiAKLSAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHROb2RlLCBvZmZzZXQsIG1fdGV4
dCk7CisgICAgICAgIGlmIChtX21hcmtlcnMuc2l6ZSgpKQorICAgICAgICAgICAgaW5zZXJ0VGV4
dFdpdGhNYXJrZXJzSW50b05vZGUodGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0LCBtX21hcmtlcnMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dE5vZGUs
IG9mZnNldCwgbV90ZXh0KTsKICAgICAgICAgZW5kUG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9k
ZSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0aCgpKTsKIAogICAgICAgICBpZiAobV9yZWJhbGFuY2VU
eXBlID09IFJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKaW5kZXggMWFkYmE0NGFlMjc3MDVi
NjAxYWEyZDFhYjQyNWFmNjU0NzU4NDliZC4uNGNkMGZlMDA1MTc2MTE0YWMwMjRjOTlhNTI4Y2Zk
MmI2YjBjOThiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
aApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3Vt
ZW50TWFya2VyOworCiBjbGFzcyBJbnNlcnRUZXh0Q29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVF
ZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAgZW51bSBSZWJhbGFuY2VUeXBlIHsKQEAgLTQzLDkg
KzQ1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnRUZXh0
Q29tbWFuZChkb2N1bWVudCwgdGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0LCByZWJhbGFuY2VUeXBl
KSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zZXJ0VGV4dENvbW1hbmQ+IGNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9y
PERvY3VtZW50TWFya2VyPiYgbWFya2VycykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQsIHRleHQsIG1hcmtlcnMpKTsKKyAgICB9
CisKIHByaXZhdGU6CiAKICAgICBJbnNlcnRUZXh0Q29tbWFuZChEb2N1bWVudCosIGNvbnN0IFN0
cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIFJlYmFsYW5jZVR5cGUpOworICAg
IEluc2VydFRleHRDb21tYW5kKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKTsKIAogICAgIHZvaWQgZGVsZXRlQ2hhcmFj
dGVyKCk7CiAKQEAgLTYxLDYgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV90ZXh0Owog
ICAgIGJvb2wgbV9zZWxlY3RJbnNlcnRlZFRleHQ7CiAgICAgUmViYWxhbmNlVHlwZSBtX3JlYmFs
YW5jZVR5cGU7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtX21hcmtlcnM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCAzY2YyZDczMmM4MDFhOTZkZjIzY2Vm
NTBiMjI1NWEwNDZmYjdmN2FhLi4yMjVjZjkzNTE4NjEyMzQ2Mzg2YjAxODNmODIyZGJkMDc2YmJi
Yjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKIAorI2luY2x1ZGUgIkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiU2V0U2VsZWN0aW9uQ29tbWFuZC5oIgot
I2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZmRjN2Y5NTZjMDk3NzYzZDJiM2U0YTEyMDg3ZDZmMDQ3
NDcxY2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNr
aW5nSGVscGVyLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVmlzaWJs
ZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAibWFya3Vw
LmgiCi0jaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotCi0jaWYgVVNFKEFV
VE9DT1JSRUNUSU9OX1BBTkVMKQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0
b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtl
clR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9u
SW5kaWNhdG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQo
RG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAgICAgICBtYXJrZXJU
eXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCk7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOwotfQot
Ci1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2Vy
VHlwZXNGb3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAo
KSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KLXN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRl
bnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMp
Ci17Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tpXS0+ZGVzY3JpcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJh
bWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fY29ycmVjdGlvblBhbmVs
VGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5l
bFRpbWVyRmlyZWQpCi17Ci19Ci0KLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkKLXsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSB0eXBlKQotewotICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxU
aW1lckludGVydmFsID0gMC4zOwotICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHR5cGUgaXMgUGFuZWxU
eXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91
bGRuJ3QgY2xlYXIgaXQuCi0gICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9
IHR5cGU7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlv
blBhbmVsVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKLXsKLSAgICBtX2NvcnJlY3Rpb25QYW5l
bFRpbWVyLnN0b3AoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9w
UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVm
b3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KLSAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpKTsKLSAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgIGRp
c21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotfQotCi12
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCi17Ci0gICAgLy8g
QXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBj
aGVja2luZy4KLSAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVT
dGFydCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwg
ZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwotICAg
IGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgewotICAg
ICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNB
bWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFd
KSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAgIGlm
IChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0
KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkp
OyAKLSAgICBlbHNlCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5jbGVhcigpOwotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOwotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3Nw
ZWxsaW5nUmFuZ2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCi17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9v
dFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgIGlmIChib3VuZGlu
Z0JveC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNl
OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2Vt
ZW50OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgY2xp
ZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVw
bGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCi17Ci0gICAgaWYgKCFtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29y
cmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwotfQotCi1TdHJpbmcgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewotICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJ
c0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBh
bmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKLXsKLSAgICBpZiAoIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCks
IHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBs
YWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBt
YXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1l
bnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxp
ZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50
LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNl
ZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmlu
ZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAg
IC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwg
d2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20g
dGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0Jl
UmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsK
LSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFy
dFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRp
b25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMp
OwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRo
ZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFm
dGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSBy
YW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRo
ZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBs
YWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5n
ZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0
KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNl
dEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxl
bmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdl
LmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQu
Ci0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1h
cmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYg
KG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRp
b24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7Ci0gICAgICAgIG1hcmtl
cnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlw
dGlvbik7Ci0gICAgfQotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKLXsKLSAgICBpZiAo
IW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBj
YXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7
Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQ
b3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxB
Y2NlcHRlZCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgIAotICAgIC8vIFBl
bmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4g
Y2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRo
ZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBBU1NFUlQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNh
cmV0UG9zaXRpb24pOwotICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbElnbm9yZWQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAgY2xpZW50KCktPnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVy
dGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZyB8IEZyYW1lU2Vs
ZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0
KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0KLSAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCk7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAg
IG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI+KikKLXsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlF
ZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246
IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlv
bi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFy
dCk7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5
cGVTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0
b3I8U3RyaW5nPigpKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewotICAgICAgICBpZiAo
IW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCBwbGFpblRleHQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
U3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5n
ZXQoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKLSAgICAgICAgaWYgKHN1Z2dl
c3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7Ci0gICAg
ICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZp
ZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdl
dCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBj
bGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxU
eXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0
b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSAgICBSYW5nZSogcmVw
bGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KTsKLSAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBs
YWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpOwotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUg
YWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFu
ZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAgIHJlcGxhY2VkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJl
cGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYg
KGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJl
Y3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQotewotICAgIHJldHVy
biBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0Ci17Ci0gICAgRnJhbWVW
aWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICBy
YW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsK
LSAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNb
aV0uYm91bmRpbmdCb3goKSk7Ci0gICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhJ
bnRSZWN0KGJvdW5kaW5nUmVjdCkpOwotfSAgICAgICAgCi0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pCi17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2Vs
ZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgLy8gV2hlbiB1
c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVz
ZXMsIHdlIHNob3cgdGhlIHBhbmVsCi0gICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJl
LWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQotICAg
IC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBw
YW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAotICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9z
aXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCi0gICAgaWYgKCFjdXJyZW50U2VsZWN0aW9u
LmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVu
dFNlbGVjdGlvbi5zdGFydCgpOwotICAgIAotICAgIC8vIENyZWF0aW5nIGEgVmlzaWJsZSBwb3Np
dGlvbiB0cmlnZ2VycyBhIGxheW91dCBhbmQgdGhlcmUgaXMgbm8KLSAgICAvLyBndWFyYW50ZWUg
dGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIHZhbGlkLgotICAgIGlmIChzZWxlY3Rpb25Qb3Np
dGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFZpc2libGVQb3NpdGlv
biBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpOwotICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlv
bk9mV29yZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQ
b3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOwotICAgIGlmIChwb3NpdGlvbi5hbmNob3JU
eXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBp
bnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgVmVj
dG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+bWFya2Vyc0Zvcihub2RlKTsKLSAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKLSAg
ICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAg
IGlmICghc2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mZnNldCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9k
ZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBs
YWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0
aCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOwotICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAgaWYgKG1hcmtl
ci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKLSAgICAgICAgICAgIHN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9ucyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOwotICAg
ICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRF
ZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQotewotICAgIGlmIChjb21tYW5k
LT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVj
dGlvbkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwotCi0g
ICAgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNv
bW1hbmQoY29tbWFuZCk7Ci0gICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2Nv
cnJlY3Rpb24gPSBTdHJpbmcoKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNv
bW1hbmQpCi17Ci0gICAgaWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBj
b21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLT5hZGRN
YXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKLX0KLQotRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGll
bnQoKQotewotICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVk
aXRvckNsaWVudCgpIDogMDsKLX0KLQotVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKLXsKLSAgICBpZiAoRWRpdG9yQ2xpZW50KiBv
d25lciA9IGNsaWVudCgpKQotICAgICAgICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCi17Ci0gICAgY2xpZW50KCkt
PnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlv
blJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOwotfQotCi12b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdl
PiByZXBsYWNlbWVudFJhbmdlKQotewotICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VS
ZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkp
KTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQo
UGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQotewotICAgIGNoYW5nZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5n
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIGNo
YW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRN
YXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0Nv
cnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykKLXsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7Ci0gICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkgewotICAgICAgICBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAg
ICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtl
clR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAgICAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRT
dHJpbmcpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVw
bGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7Ci0gICAgfQotfQotCi12b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZp
ZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSAgICBpZiAoIXJhbmdlT2ZDb3Jy
ZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFy
a2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgaWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFNwZWxsaW5nIGNvcnJlY3Rl
ZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB1c2Vy
IGhhcyByZXZlcnRlZCBpdCB0byBvcmlnaW5hbCB0ZXh0IG9yCi0gICAgLy8gZWRpdGVkIGl0IHRv
IHNvbWV0aGluZyBlbHNlLCBhbmQgbm90aWZ5IHNwZWxsY2hlY2tlciBhY2NvcmRpbmdseS4KLSAg
ICBpZiAobWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb3JyZWN0ZWRPbmNlTWFya2Vy
cykgJiYgY29ycmVjdGVkT25jZU1hcmtlcnNbMF0tPmRlc2NyaXB0aW9uKCkgPT0gY29ycmVjdGVk
KQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JD
bGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7Ci0g
ICAgZWxzZQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShF
ZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uRWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24p
OwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKLXsKLSAgICBtX29yaWdp
bmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5nOwot
ICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247Ci19
Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRl
c3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqIGNv
bW1hbmQpCi17Ci0gICAgUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBjb21tYW5kLT5lbmRpbmdT
ZWxlY3Rpb24oKS5lbmQoKTsKLSAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gIT0gbV9wb3NpdGlvbkZv
ckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0
aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gZW5kT2ZTZWxlY3Rpb24ucHJldmlvdXMo
KTsKLSAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5nIHN0cmluZyA9IHBsYWlu
VGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkgfHwgIWlzV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3
ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKLSAgICAvLyB3
aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFn
YWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCi0gICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdh
aW4uCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJl
Y3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKLX0K
LQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4
dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0LCBS
YW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2Vk
KQotewotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBpZiAobWFya2VyQ29udHJvbGxlci0+
aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KSkgewotICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0
aW9uKQotICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENv
cnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LT5y
ZXBsYWNlbWVudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWFy
a2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJr
ZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBv
c2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlv
bigpOwotICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5n
T2ZSYW5nZS5wcmV2aW91cygpOwotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKLQotICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVj
dGlvbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJl
cGxhY2VkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotICAgIAotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZDA2MDhiMjM3ZjIwNTY5YmNiMTUyMWZk
NThkMzQ0YWZhZGNlYzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKLSNkZWZpbmUgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcl9oCi0KLSNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0j
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7Ci1jbGFzcyBFZGl0b3JDbGllbnQ7Ci1jbGFzcyBFZGl0
Q29tbWFuZDsKLWNsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247Ci1jbGFzcyBGcmFtZTsKLWNs
YXNzIFRleHRDaGVja2VyQ2xpZW50OwotCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0g
ICAgZW51bSBQYW5lbFR5cGUgewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAg
ICAgICAgUGFuZWxUeXBlUmV2ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dl
c3Rpb25zCi0gICAgfTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0g
ICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsK
LSAgICBQYW5lbFR5cGUgcGFuZWxUeXBlOwotICAgIGJvb2wgaXNBY3RpdmU7Ci19OwotCi1zdHJ1
Y3QgVGV4dENoZWNraW5nUmVzdWx0OwotCi1lbnVtIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWwgewotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxs
ZWQgPSAwLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLAot
ICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAotfTsKLQotI2lm
IFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rp
b25Cb2R5KSA7Ci0jZWxzZQotI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1
bmN0aW9uQm9keQotI2VuZGlmCi0KLWNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgflNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKLQotICAgIHZvaWQgc3RhcnRD
b3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpIFVOTEVT
U19FTkFCTEVEKHt9KQotICAgIHZvaWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkgVU5MRVNT
X0VOQUJMRUQoe30pCi0KLSAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgU3RyaW5nIGRpc21pc3NTb29uKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJu
IFN0cmluZygpOyB9KQotICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVw
bGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQotCi0g
ICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIC8vIFJldHVybiB0cnVl
IGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICBib29sIGFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJM
RUQoeyByZXR1cm4gZmFsc2U7IH0pCi0KLSAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZFNwZWxs
Q29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0
ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFS
QU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQotICAgIHZvaWQgcmVz
cG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqKSBVTkxFU1NfRU5BQkxF
RCh7IH0pCi0gICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29t
cG9zaXRpb24qKSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKLQotICAgIHZvaWQgc3RvcFBl
bmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKLSAgICB2b2lkIGFw
cGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlw
aW5nKTsgfSkKLQotICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGlv
bik7IH0pCi0gICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7
fSkKLQotICAgIGJvb2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCBVTkxFU1NfRU5BQkxF
RCh7IHJldHVybiBmYWxzZTsgfSkKLSAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBh
c3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nUmFuZ2UpOyByZXR1cm4gdHJ1ZTsgfSkKLSAgICBib29s
IGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFCTEVEKHsg
cmV0dXJuIGZhbHNlOyB9KQotICAgIGJvb2wgc2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5n
KCk7Ci0KLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcj4qKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB2b2lkIHJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJh
bmdlKTsgfSkKLSAgICB2b2lkIG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2Vk
UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCi0g
ICAgdm9pZCBtYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFJhbmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKLSAgICB2
b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdl
KiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VPZkNvcnJl
Y3Rpb24pOyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24p
OyB9KQotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmIHRoZSByZXBsYWNl
bWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQgb3V0LgotICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqLCBSYW5n
ZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBV
TkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9Q
QVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7Ci0gICAgdm9pZCBkZWxl
dGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob3JpZ2luYWxT
dHJpbmcpOyB9KQotCi0jaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotcHJpdmF0ZToKLSAg
ICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKLQotICAg
IGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyLCBp
bnQgZW5kT2Zmc2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICgoKG1hcmtlci0+dHlw
ZSgpID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLT5kZXNjcmlwdGlv
bigpLmlzTnVsbCgpKSAKLSAgICAgICAgICAgICAgICAgfHwgbWFya2VyLT50eXBlKCkgPT0gRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci0+ZW5kT2Zm
c2V0KCkpID09IGVuZE9mZnNldCk7Ci0gICAgfQotCi0gICAgRWRpdG9yQ2xpZW50KiBjbGllbnQo
KTsKLSAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsKLSAgICBGbG9hdFJlY3Qg
cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKLSAgICB2b2lkIG1hcmtQ
cmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVk
aXRDb21tYW5kKik7Ci0KLSAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OwotICAgIEZyYW1lKiBt
X2ZyYW1lOwotCi0gICAgVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3Jy
ZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBh
bmVsSW5mbzsKLSAgICBib29sIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsK
LQotICAgIFN0cmluZyBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlv
bjsKLSAgICBQb3NpdGlvbiBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbjsK
LSNlbmRpZgotfTsKLQotI3VuZGVmIFVOTEVTU19FTkFCTEVECi0KLWlubGluZSBib29sIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygp
Ci17Ci0jaWYgVVNFKE1BUktFUl9SRU1PVkFMX1VQT05fRURJVElORykKLSAgICByZXR1cm4gdHJ1
ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggOWFlMzk1NTQxYTgzYzVl
MjRiMDlmZTRiNDVjMGE5YWZiMTJmYTc4Zi4uNTc2Yjk2NWE4ODZlY2EyNWVkOThmZDRiNDY3YzUx
MGEzNjlhMzliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC00OCwxOCArNDgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLXN0YXRpYyBib29sIGNhbkFwcGVuZE5ld0xpbmVGZWVkKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsKLSAgICBOb2RlKiBub2RlID0gc2VsZWN0aW9uLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7Ci0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudCwgZWMpOwotICAgIHJldHVy
biBldmVudC0+dGV4dCgpLmxlbmd0aCgpOwotfQotCiBUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21t
YW5kKERvY3VtZW50ICpkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIGNvbnN0
IFN0cmluZyAmdGV4dFRvSW5zZXJ0LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiAgICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKICAgICAsIG1fY29tbWFuZFR5cGUoY29tbWFu
ZFR5cGUpCkBAIC0zMjcsNyArMzE1LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAg
ICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQocmFuZ2UuZ2V0KCkpLnN0cmlw
V2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5tYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2
aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kVHlwZSA9PSBU
eXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5z
dGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogICAgIH0KIH0KIApAQCAtMzg3LDcgKzM3
NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhj
b25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKCkKIHsKLSAgICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkKGVuZGluZ1Nl
bGVjdGlvbigpKSkKKyAgICBpZiAoIWNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oZW5k
aW5nU2VsZWN0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwpAQCAt
Mzk2LDcgKzM4NCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIAog
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogewotICAgIGlm
ICghY2FuQXBwZW5kTmV3TGluZUZlZWQoZW5kaW5nU2VsZWN0aW9uKCkpKQorICAgIGlmICghY2Fu
QXBwZW5kTmV3TGluZUZlZWRUb1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA4NmY1MjliNmE0NWI4NjM0Yjc3ZjZmOTRh
MjM5N2U4M2U2N2IzOTRkLi4yN2I3ODAxNDlmYzRmMzk3NzJkNjg1MzViYzYwMTY0MjY0MjRmMTdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0
aW9uLmgiCiAKKyNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5n
LmgiCkBAIC02MDgsNiArNjA5LDE4IEBAIE5vZGUqIFZpc2libGVTZWxlY3Rpb246Om5vbkJvdW5k
YXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3QKICAgICByZXR1cm4gc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpID8gc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5ub25Cb3VuZGFyeVNoYWRvd1Ry
ZWVSb290Tm9kZSgpIDogMDsKIH0KIAorYm9vbCBjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBOb2RlKiBub2Rl
ID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4g
ZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudCwg
ZWMpOworICAgIHJldHVybiBldmVudC0+dGV4dCgpLmxlbmd0aCgpOworfQorCiAjaWZuZGVmIE5E
RUJVRwogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OmRlYnVnUG9zaXRpb24oKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAppbmRleCA4YzgxMGRhNGRkMTk3
ZTMxY2Y2YTVmNmY4YjhiODgyNjI5N2JiN2VmLi5iMmMzY2U0ZDlmNWM4ZGI1YmQ0ZmI1YTJmM2Ew
ZTIzNjJhNzFiNTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
aApAQCAtMTUxLDYgKzE1MSw4IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgYSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgYikKICAgICByZXR1cm4gIShh
ID09IGIpOwogfQogCitib29sIGNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYg
TkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggNmJjMzZhOWQyMTk1
NDcwY2FiMGM3ZmY0NjYzYzRiODNiNWI2NmU5NC4uMzI5ZmMwZWNkYTMyMWM4NzkyYzFhYTlkMzg3
ZGQ4OGVkMWI2MzAzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtNTIw
LDExICs1MjAsMTYgQEAgcHVibGljOgogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tl
cigpIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICNpZiBVU0UoQVVUT0NPUlJF
Q1RJT05fUEFORUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWwpIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29u
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIHsgcmV0dXJuIFN0cmluZygpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0SW5m
bzo6QWx0ZXJuYXRpdmVUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQp
IHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNv
bkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQogI2VuZGlmCisj
aWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdmlydHVhbCB2b2lkIHNob3dEaWN0
YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0UmVjdCYsIHVpbnQ2NF90KSB7IH07CisgICAg
dmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgeyB9OworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QpIHsgfTsKKyNl
bmRpZgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Vk
aXRvckNsaWVudC5oCmluZGV4IDRlY2Q1NjU4NGQzM2ZmYzY0OTY2NzYyZTE2NjU3NWFkNmVjMDA2
ZTQuLjMyZDQ2YzY2OTIyMDA1NjgyMTZkNDJhNmNkZmZkNzQxZWQ0Y2NmYjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMjcsNyArMjcsOCBAQAogI2lmbmRlZiBFZGl0b3JDbGll
bnRfaAogI2RlZmluZSBFZGl0b3JDbGllbnRfaAogCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiRWRp
dG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4
dEFmZmluaXR5LmgiCkBAIC0xNTIsMTIgKzE1MywxOCBAQCBwdWJsaWM6CiAgICAgfTsKIAogI2lm
IFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0g
MDsKLSAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nKSA9IDA7CiAjZW5kaWYKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQorICAgIHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZl
VUkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9IDA7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3Qg
R3JhbW1hckRldGFpbCYgZGV0YWlsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCAxNjgzYzNkYmQyMmVmMjc4N2FjZTUzMzMyYjYyMWRlODI4OGQzZWY1
Li45ZTQyMGM4YWRkZDY1OTVjYjQ5MjVmNTMyZDM4YzVmODEwMjE5YWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMTk4LDYgKzMxOTgsMjkgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVu
ZGVybHlpbmdFdmUKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsKICAgICBy
ZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVEaWN0YXRpb25JbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9y
PERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2
ZW50KiB1bmRlcmx5aW5nRXZlbnQpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgRXZlbnRUYXJnZXQqIHRhcmdldDsKKyAgICBpZiAodW5kZXJseWluZ0V2
ZW50KQorICAgICAgICB0YXJnZXQgPSB1bmRlcmx5aW5nRXZlbnQtPnRhcmdldCgpOworICAgIGVs
c2UKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXROb2RlRm9yRG9jdW1lbnQobV9mcmFtZS0+
ZG9jdW1lbnQoKSk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCisgICAgICAgIHZpZXct
PnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKKworICAgIFJlZlB0cjxUZXh0RXZlbnQ+IGV2
ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24obV9mcmFtZS0+ZG9tV2luZG93KCks
IHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgZXZlbnQtPnNldFVuZGVybHlpbmdF
dmVudCh1bmRlcmx5aW5nRXZlbnQpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsKKyAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCk7Cit9CiAgICAgCiBib29sIEV2ZW50SGFuZGxlcjo6aXNLZXlib2FyZE9wdGlvblRh
YihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmlu
ZGV4IGU1YTFhNDExYzQ3MjhmZjMzNTYxMjBjNTdmMjRmOWI4ZTY5YmYzNzUuLjYxYjJlMDMwMWM0
NGI1NmVmOTA4MGUzYjliNDRhN2MxNjA2NjhlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBFdmVudEhhbmRsZXJfaAogI2RlZmluZSBF
dmVudEhhbmRsZXJfaAogCisjaW5jbHVkZSAiRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5o
IgogI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSAiRHJhZ1N0YXRlLmgiCiAjaW5j
bHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKQEAgLTE4Nyw2ICsxODgsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwogCiAgICAg
Ym9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRl
cmx5aW5nRXZlbnQgPSAwLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0RXZlbnRJbnB1dEtleWJv
YXJkKTsKKyAgICBib29sIGhhbmRsZURpY3RhdGlvbklucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlv
bkFsdGVybmF0aXZlcywgRXZlbnQqIHVuZGVybHlpbmdFdmVudCk7CiAgICAgdm9pZCBkZWZhdWx0
VGV4dElucHV0RXZlbnRIYW5kbGVyKFRleHRFdmVudCopOwogCiAjaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggZDVjMTc2ZDIxZTJiNjE2YTUwMWVlMTQ0OWRi
MmUwNTZiMmI4ZGE4NS4uMWQ1OWM2ZWRmMDc1Zjk2OWFmZTE3ZjYxNmU1MzEyYmUyNjdmMzEzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTkxNiw3ICs5MTYsNyBAQCB2b2lkIEZyYW1lOjpzZXRQ
YWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9v
bUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZWRp
dG9yLmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBtX2VkaXRvci5kaXNt
aXNzQWx0ZXJuYXRpdmVUZXh0VUkoKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gUmVzcGVj
dCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNWRyBk
b2N1bWVudHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCmluZGV4IGM3MjJjYmNlNDdiNjA1ZWVmMWJkZThjYzk5YTE0ZjBlYTM2ZDMy
MDEuLjcxMjMzMTY5NWI1MzEyMjJkZjE0ZTY5OWVlNzE3MTVmYmZkNThjZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0z
NTUsMTIgKzM1NSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZsb2F0UmVjdCBy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5k
QWxsU2lkZXMpOwogCiAgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZyk7Ci0gICAgICAgIGVudW0gVGV4dENoZWNr
aW5nTGluZVN0eWxlIHsKLSAgICAgICAgICAgIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxl
LAotICAgICAgICAgICAgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZSwKLSAgICAgICAgICAg
IFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlCisgICAgICAgIGVudW0gVGV4dE1hcmtl
ckxpbmVTdHlsZSB7CisgICAgICAgICAgICBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGUsCisg
ICAgICAgICAgICBUZXh0TWFya2VyR3JhbW1hckxpbmVTdHlsZSwKKyAgICAgICAgICAgIFRleHRN
YXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlLAorICAgICAgICAgICAgVGV4
dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZQogICAgICAgICB9OwotICAgICAg
ICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3
aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlKTsKKyAgICAgICAgdm9pZCBkcmF3TGluZUZvclRl
eHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0TWFya2VyTGluZVN0
eWxlKTsKIAogICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdDsKICAgICAgICAg
dm9pZCBzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCmluZGV4IGJhODg2YTAzYzJjOTA2MjIzNDMzYTMzYzAyZTY0MDUzNzc2OTM5MGYuLjFhYjE1
ZWNkNmE1MmYzNTM2MWU2ZDFlYzQwZDgzYmNkZWNhNzBhMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAKQEAgLTY4Miw3ICs2ODIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvbwog
I2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4s
IGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwg
ZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkxLDEwICs2OTEsMTAgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9p
bnQmIG9yaWdpbiwgZmxvYXQgd2kKICAgICBjYWlyb19zYXZlKGNyKTsKIAogICAgIHN3aXRjaCAo
c3R5bGUpIHsKLSAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgIGNh
c2UgVGV4dE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOgogICAgICAgICBjYWlyb19zZXRfc291cmNl
X3JnYihjciwgMSwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dENoZWNraW5n
R3JhbW1hckxpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJrZXJHcmFtbWFyTGluZVN0eWxlOgog
ICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwgMCwgMSwgMCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQppbmRleCBhY2VkOTZiMmY0ZTdmZmMz
ODNjZWZlNzFkYjc5YTY2YTlhYzY2ODIyLi4zMDMwZDZiNmJiMjgxNDgyMzA4Zjc1MWZhMmIzOTYx
MzI4YTc2ZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGlj
IE5TQ29sb3IqIGNyZWF0ZVBhdHRlcm5Db2xvcihOU1N0cmluZyogZmlyc3RDaG9pY2VOYW1lLCBO
U1N0cmluZyogc2Vjb25kQ2gKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0YW5kYXJkIHBs
YXRmb3JtIGNvbXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGFy
dHdvcmsgZm9yIHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRDaGVj
a2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBUZXh0TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZAogICAg
IGJvb2wgdXNpbmdEb3Q7CiAgICAgTlNDb2xvciAqcGF0dGVybkNvbG9yOwogICAgIHN3aXRjaCAo
c3R5bGUpIHsKLSAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZToKKyAg
ICAgICAgY2FzZSBUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU6CiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBjb2xvci4KICAgICAgICAg
ICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsKQEAgLTEyMCw3ICsx
MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZAogICAgICAgICAgICAgcGF0dGVybkNvbG9y
ID0gc3BlbGxpbmdQYXR0ZXJuQ29sb3IuZ2V0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU6CisgICAgICAg
IGNhc2UgVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6CiAgICAgICAgIHsKICAgICAgICAgICAg
IC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBwYXR0ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3Rh
dGljIGJvb2wgdXNpbmdEb3RGb3JHcmFtbWFyID0gZmFsc2U7CkBAIC0xMzEsNyArMTMxLDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB3aWQKICAgICAgICAgfQogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQogICAgICAgICAvLyBUbyBzdXBwb3J0IGNvcnJlY3Rpb24gcGFuZWwuCi0gICAg
ICAgIGNhc2UgVGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGU6CisgICAgICAgIGNhc2Ug
VGV4dE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU6CisgICAgICAgIGNh
c2UgVGV4dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZToKICAgICAgICAgewog
ICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgogICAg
ICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29u
dGV4dE9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
R3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAppbmRleCA0NDE3ZDdiODExNzYyMzFiZTc0ZTFjNmVi
YzE0YWNiNjM4ZGMxZTVkLi5hM2IwZDJkYjk4YjhhZWZmOTQ2NjU2Y2U3YTE5NzIzYTAxNDM4NmNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3Jh
cGhpY3NDb250ZXh0T3BlblZHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcApAQCAtMjQ2LDcgKzI0Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmIG9y
aWdpbiwgaW50IHdpZHRoLCBib29sIHByCiAgICAgVU5VU0VEX1BBUkFNKHByaW50aW5nKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IElu
dFBvaW50JiBvcmlnaW4sIGludCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dE1hcmtlcihjb25zdCBJbnRQb2lu
dCYgb3JpZ2luLCBpbnQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CmluZGV4IGFhNDllMmRkZmYyMmM4NDRkYWM0NmFiOGRkNmQ0NDgxNTE0YjJiMzcuLjg5OTcyNTRk
OThlNzAzNjA4MTliZGQ4YTllZjJjM2YyN2ZmYWQ4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAg
LTk3NSw3ICs5NzUsNyBAQCBzdGF0aWMgdm9pZCBkcmF3RXJyb3JVbmRlcmxpbmUoUVBhaW50ZXIg
KnBhaW50ZXIsIHFyZWFsIHgsIHFyZWFsIHksIHFyZWFsIHdpZHRoLAogfQogCiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIG9y
aWdpbiwgZmxvYXQgd2lkdGgsIFRleHRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTg0LDEwICs5ODQsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZs
b2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2kKICAgICBjb25zdCBRUGVuIG9yaWdpbmFsUGVuID0g
cGFpbnRlci0+cGVuKCk7CiAKICAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBUZXh0Q2hl
Y2tpbmdTcGVsbGluZ0xpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJrZXJTcGVsbGluZ0xpbmVT
dHlsZToKICAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpyZWQpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIFRleHRDaGVja2luZ0dyYW1tYXJMaW5lU3R5bGU6CisgICAgY2FzZSBUZXh0TWFy
a2VyR3JhbW1hckxpbmVTdHlsZToKICAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpncmVlbik7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApp
bmRleCA0Mzg5YjA0N2IwMGIyYzBhZDBhMjNhNzMzYTNhMGY5OTU4MWRlZmUzLi5jN2QwMzc4OWI2
MDU3OTU0OTVkNGMxNTYyMmU5Y2RiMWZiZDg5MDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+ZGlkRHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwg
cHRzLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRD
aGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xp
bmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRNYXJr
ZXIoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLCBUZXh0TWFya2VyTGluZVN0eWxl
IHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IGYzYTkxOWQ3MTNiYTZlNzM0NmQ1ZTMxYWEw
NjIxNDdlNjU5ZTQyM2QuLjRlYzc2OGYzYmIzMGE0ZDk2MWY4Yjk5NGE2ZGYxZTE1YTJjMzZlZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMTgxLDEyICsxODEsMTIgQEAgc3RhdGlj
IGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9yKCkgewogICAgIHJldHVybiBncmFtbWFy
Q29sb3I7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVT
dHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRNYXJrZXIo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBUZXh0TWFya2VyTGluZVN0eWxl
IHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChzdHlsZSAhPSBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZSAmJiBzdHls
ZSAhPSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlKQorICAgIGlmIChzdHlsZSAhPSBUZXh0
TWFya2VyU3BlbGxpbmdMaW5lU3R5bGUgJiYgc3R5bGUgIT0gVGV4dE1hcmtlckdyYW1tYXJMaW5l
U3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3Ig
bWlzc3BlbGxpbmcgb3IgYmFkIGdyYW1tYXIKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHdpZAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAotICAgIGNvbnN0IENvbG9y
JiBwYXR0ZXJuQ29sb3IgPSBzdHlsZSA9PSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlID8g
Z3JhbW1hclBhdHRlcm5Db2xvcigpIDogc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKTsKKyAgICBjb25z
dCBDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUgPT0gVGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5
bGUgPyBncmFtbWFyUGF0dGVybkNvbG9yKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcigpOwogICAg
IHNldENHU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVybkNvbG9yKTsKIAogICAgIHdrU2V0UGF0
dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgcG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0
V2luQ0UuY3BwCmluZGV4IDk2YmMzZGM1NTQ3MGU4ZTdlMzg3MDlkYmRlMzIyNjQ0OWE4NmM1YTAu
LjM4NTFkZDk0ZWI0ZmMwZmFhM2UzMDRjODczZmNiNWExNTJjM2ZmNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGlj
c0NvbnRleHRXaW5DRS5jcHAKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0
aCwgYm9vCiAgICAgc2V0U3Ryb2tlU3R5bGUob2xkU3R5bGUpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwg
VGV4dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3ND
b250ZXh0V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhp
Y3NDb250ZXh0V3guY3BwCmluZGV4IDQ1MjYzOGIwMTAzOGU3YjcyNWM3MzJhOTcyYWI2NjdlMTA2
ZTg0MjYuLjkwM2Q5ZWRhZDE0ODcyNjc0YTQ1ZDg2NzQwMDk5MjA2ZWI0NTI4NGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0Nv
bnRleHRXeC5jcHAKQEAgLTQ0MiwxMyArNDQyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9v
CiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgVGV4dENo
ZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIFRl
eHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgIGNhc2UgVGV4dE1hcmtlclNwZWxsaW5n
TGluZVN0eWxlOgogICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hSRUQs
IDIsIHd4TE9OR19EQVNIKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dENoZWNraW5n
R3JhbW1hckxpbmVTdHlsZToKKyAgICBjYXNlIFRleHRNYXJrZXJHcmFtbWFyTGluZVN0eWxlOgog
ICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hHUkVFTiwgMiwgd3hMT05H
X0RBU0gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA3YTZjNTYxNDkyNjQ1MmY1MGU2NGFkNjlk
ZGVjYjFjYjBhZDI2NTlmLi40YmJhYTk4Yjk4NDU4NDk3MDljNWYyZjFhNWYwOTI1YWRkYTI1OGFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC05ODMs
MjIgKzk4MywyNCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgIGNvbnRleHQtPmNs
ZWFyU2hhZG93KCk7CiB9CiAKLXN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0xp
bmVTdHlsZSB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCitzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpUZXh0TWFy
a2VyTGluZVN0eWxlIHRleHRNYXJrZXJMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCiB7CiAgICAgc3dpdGNoIChtYXJrZXJUeXBlKSB7
CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQ6OlRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOworICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpUZXh0TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU7CiAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6VGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDo6VGV4dE1hcmtlckdyYW1tYXJMaW5lU3R5bGU7CiAgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6VGV4dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGU7CisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQ6OlRleHRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxl
OworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dE1hcmtlckRpY3RhdGlvbkFsdGVybmF0aXZl
c0xpbmVTdHlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nU3BlbGxpbmdMaW5l
U3R5bGU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OlRleHRNYXJrZXJTcGVsbGlu
Z0xpbmVTdHlsZTsKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGlu
Z09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBi
b3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNw
ZWxsaW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVy
IHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAodGV4dFJl
bmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCkpCkBAIC0xMDYzLDcgKzEwNjUsNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3ND
b250ZXh0KiBwdCwgY29uc3QgRmxvYQogICAgICAgICAvLyBJbiBsYXJnZXIgZm9udHMsIHRob3Vn
aCwgcGxhY2UgdGhlIHVuZGVybGluZSB1cCBuZWFyIHRoZSBiYXNlbGluZSB0byBwcmV2ZW50IGEg
YmlnIGdhcC4KICAgICAgICAgdW5kZXJsaW5lT2Zmc2V0ID0gYmFzZWxpbmUgKyAyOwogICAgIH0K
LSAgICBwdC0+ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoRmxvYXRQb2ludChib3hPcmlnaW4ueCgp
ICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgdGV4dENo
ZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJrZXItPnR5cGUoKSkpOworICAgIHB0LT5k
cmF3TGluZUZvclRleHRNYXJrZXIoRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJv
eE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgdGV4dE1hcmtlckxpbmVTdHls
ZUZvck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpKTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgRm9udCYgZm9udCkKQEAgLTExMzAsNiArMTEzMiw3IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxv
YXRQb2ludCYKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgogICAg
ICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKICAgICAg
ICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgorICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgogICAgICAgICAgICAgICAg
IGlmIChiYWNrZ3JvdW5kKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTExNTMsMTYgKzExNTYsMTcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBv
aW50JgogICAgICAgICAvLyBtYXJrZXIgaW50ZXJzZWN0cyB0aGlzIHJ1bi4gIFBhaW50IGl0Lgog
ICAgICAgICBzd2l0Y2ggKG1hcmtlci0+dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZzoKLSAgICAgICAgICAgICAgICBwYWludFNwZWxsaW5nT3JHcmFt
bWFyTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBwYWludFNwZWxsaW5nR3JhbW1hckRpY3RhdGlvbk1hcmtlcihwdCwgYm94
T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgotICAgICAgICAg
ICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2Vy
LCBzdHlsZSwgZm9udCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcGFpbnRTcGVsbGluZ0dyYW1t
YXJEaWN0YXRpb25NYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2g6CiAgICAgICAgICAgICAgICAgcGFpbnRUZXh0TWF0Y2hNYXJrZXIocHQs
IGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yOgot
ICAgICAgICAgICAgICAgIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIocHQsIGJveE9yaWdp
biwgbWFya2VyLCBzdHlsZSwgZm9udCwgZmFsc2UpOworICAgICAgICAgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgICAgICAgICAgICAgIHBhaW50U3Bl
bGxpbmdHcmFtbWFyRGljdGF0aW9uTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUs
IGZvbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgogICAgICAgICAgICAgICAgIGNvbXB1dGVSZWN0
Rm9yUmVwbGFjZW1lbnRNYXJrZXIobWFya2VyLCBzdHlsZSwgZm9udCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA1ODk3MmQxMzRkZjI0MWJjODIyZGFiZjEx
YjBiYWI2M2EwODg5Njc4Li40OGI0MzA4OTdjYjA4NTY0OTMzYmM3Y2UxM2E1ZjVlMGU4MmJkYjZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTE4Miw3ICsx
ODIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgaW50IGRlY29yYXRp
b24sIGNvbnN0IFNoYWRvd0RhdGEqKTsKICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25z
dCBGb250Jik7Ci0gICAgdm9pZCBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBS
ZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOworICAgIHZvaWQgcGFpbnRT
cGVsbGluZ0dyYW1tYXJEaWN0YXRpb25NYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3Qg
Rm9udCYsIGJvb2wgZ3JhbW1hcik7CiAgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2Vy
KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CiAgICAgdm9pZCBjb21wdXRlUmVjdEZvclJl
cGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250
Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAyYTcyNDRjYjk5MDYw
NzQ4MGUwMDRlMDc2Y2RlOGE0NGM0OTM4ODQ4Li5lNTUwZjE4NWRmNWQxMzVjNzcxMjg5YmQ2NDQw
OGMxMmEwN2I3ODllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC05Niw2
ICs5Niw4IEBAIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcmIG1hcmtl
clR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbjsKICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShtYXJrZXJUeXBlLCAiRGVsZXRlZEF1dG9jb3JyZWN0aW9uIikpCiAgICAgICAg
IHJlc3VsdCA9ICBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1hcmtlclR5cGUsICJEaWN0YXRpb25BbHRlcm5hdGl2
ZXMiKSkKKyAgICAgICAgcmVzdWx0ID0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlczsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzhkZTc1NWI2Y2Q2MjZj
MTE4NDE1N2JmMGEzMjg1MmNmMTI0MWNmMS4uMzRmZGE1MDE4ZjFlNTEyOGZiZjZlNzJmM2ZiMzE4
OTJjODFiY2QxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zNzAsNiArMzcwLDEwIEBACiAJCUNEOEVBQzczMTFDQUM5QTMwMDc3NDA3
NSAvKiBJT0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDhFQUM3MjExQ0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3b3Jr
ICovOyB9OwogCQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oICovOyB9
OwogCQlDREE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE2MkFF
MTEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gKi87IH07CisJ
CUNFN0ZCODFDMTUyMjM1NDEwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0ZC
ODE4MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCAq
LzsgfTsKKwkJQ0U3RkI4MUQxNTIyMzU0MTAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFN0ZCODE5MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIubW0gKi87IH07CisJCUNFN0ZCODFFMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENFN0ZCODFBMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFu
Z2UuaCAqLzsgfTsKKwkJQ0U3RkI4MUYxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2
ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFN0ZCODFCMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
bW0gKi87IH07CiAJCUREN0NERUU3MEEyM0JBOUUwMDA2OTkyOCAvKiBXZWJUeXBlc0ludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDdDREVF
NjBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICovOyB9OwogCQlERDg5Njgy
MDA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREODk2ODFFMDlBQTg3MjQwMDk3RTdG
MCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5oICovOyB9OwogCQlERDg5NjgyMTA5QUE4NzI0MDA5
N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDg5NjgxRjA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxl
bWVudERpY3Rpb25hcnkubW0gKi87IH07CkBAIC02OTksNiArNzAzLDEwIEBACiAJCUNEOEVBQzcy
MTFDQUM5QTMwMDc3NDA3NSAvKiBJT0tpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IElP
S2l0LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZy
YW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQ0RBNjJBRTAxMjVGODdD
MjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
RTdGQjgxODE1MjIzNTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTdGQjgxOTE1MjIz
NTQwMDBCRDFFQTkgLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTdGQjgxQTE1MjIzNTQx
MDBCRDFFQTkgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDRTdGQjgxQjE1MjIzNTQxMDBCRDFFQTkgLyogVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlERDdDREVFNjBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUeXBlc0ludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUREODk2ODFFMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50
RGljdGlvbmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkVsZW1lbnREaWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlERDg5NjgxRjA5QUE4NzI0MDA5N0U3RjAg
LyogV2ViRWxlbWVudERpY3Rpb25hcnkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTEy
OTQsNiArMTMwMiwxMCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjgyOTU4RDExMzI3MDdEMDAw
MEQwRTc5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovLAogCQkJCUI4Mjk1OEQyMTMyNzA3RDAwMDBE
MEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gKi8sCisJCQkJQ0U3RkI4MTgxNTIyMzU0MDAwQkQx
RUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oICovLAorCQkJCUNFN0ZCODE5
MTUyMjM1NDAwMEJEMUVBOSAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0gKi8s
CisJCQkJQ0U3RkI4MUExNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5oICovLAorCQkJCUNFN0ZCODFCMTUyMjM1NDEwMEJEMUVBOSAvKiBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UubW0gKi8sCiAJCQkJQjY4MDQ5NzEwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxp
Y2F0aW9uQ2FjaGUuaCAqLywKIAkJCQlCNjgwNDk3MjBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBw
bGljYXRpb25DYWNoZS5tbSAqLywKIAkJCQlBNURFRkMxMTExRDUzNDRCMDA4ODUyNzMgLyogV2Vi
QXBwbGljYXRpb25DYWNoZVF1b3RhTWFuYWdlci5oICovLApAQCAtMTY0Myw2ICsxNjU1LDggQEAK
IAkJCQk0MUY0NDg0RjEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMkUyRkU1MTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMkUyRkU5MTRFNDgyMTUwMDdDQ0ExOCAvKiBXZWJO
b3RpZmljYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U3RkI4MUMxNTIyMzU0
MTAwQkQxRUE5IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0U3RkI4MUUxNTIyMzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDMwLDYgKzIwNDQsOCBAQAogCQkJCUJDMkU0NjRF
MEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQx
RjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxMkUyRkU2MTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb24ubW0g
aW4gU291cmNlcyAqLywKKwkJCQlDRTdGQjgxRDE1MjIzNTQxMDBCRDFFQTkgLyogRGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3RkI4MUYxNTIy
MzU0MTAwQkQxRUE5IC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFu
ZWwuaAppbmRleCAxODdhMGE4Y2VlYzBkNmZmMzAzMTE2NGM5OWU0MTY4NjJhYzU5NTk0Li4xM2Iy
YTgxNGJjNWY2OWM0MGE3NDlhZTc5Y2EzZGUzOGRjMmRkZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCiBAY2xhc3MgV2ViVmlldzsKQEAgLTM4LDE3ICszOCwxNyBAQCBjbGFzcyBD
b3JyZWN0aW9uUGFuZWwgewogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5D
b3JyZWN0aW9uUGFuZWwoKTsKLSAgICB2b2lkIHNob3coV2ViVmlldyosIFdlYkNvcmU6OkNvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRl
cm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7Ci0gICAgU3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCBzaG93KFdlYlZp
ZXcqLCBXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAg
IFN0cmluZyBkaXNtaXNzKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRl
eHQpOwogICAgIHN0YXRpYyB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViVmll
dyosIE5TQ29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlz
U2hvd2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdmlldzsgfQotICAgIFN0cmluZyBkaXNtaXNzSW50
ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCwgYm9vbCBk
aXNtaXNzaW5nRXh0ZXJuYWxseSk7CisgICAgU3RyaW5nIGRpc21pc3NJbnRlcm5hbChXZWJDb3Jl
OjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0LCBib29sIGRpc21pc3NpbmdFeHRl
cm5hbGx5KTsKICAgICB2b2lkIGhhbmRsZUFjY2VwdGVkUmVwbGFjZW1lbnQoTlNTdHJpbmcqIGFj
Y2VwdGVkUmVwbGFjZW1lbnQsIE5TU3RyaW5nKiByZXBsYWNlZCwgTlNTdHJpbmcqIHByb3Bvc2Vk
UmVwbGFjZW1lbnQsIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUpOwogCiAgICAgYm9vbCBtX3dh
c0Rpc21pc3NlZEV4dGVybmFsbHk7Ci0gICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCBtX3JlYXNvbkZvckRpc21pc3Npbmc7CisgICAgV2ViQ29yZTo6UmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCBtX3JlYXNvbkZvckRpc21pc3Npbmc7CiAgICAg
UmV0YWluUHRyPFdlYlZpZXc+IG1fdmlldzsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fcmVz
dWx0Rm9yRGlzbWlzc2FsOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQppbmRleCBlNWM3ZTJlZjZiNGU1YTA0MDY3MDI3NWI2
ZDA1MDc1YjA5Y2I3OTYxLi4yM2JjNTcxY2YzMDUwYmNiOTMzN2QxNzczYTE5OTk5ZTY4OWMzMjgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9u
UGFuZWwubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLm1tCkBAIC0zMCwxNSArMzAsMTggQEAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBl
IGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBw
YW5lbFR5cGUpCitzdGF0aWMgaW5saW5lIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29ycmVj
dGlvbkluZGljYXRvclR5cGUoQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlIGFs
dGVybmF0aXZlVHlwZSkKIHsKLSAgICBzd2l0Y2ggKHBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKKyAgICBzd2l0Y2ggKGFsdGVy
bmF0aXZlVHlwZSkgeworICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVU
eXBlQ29ycmVjdGlvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVE
ZWZhdWx0OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9u
OgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlUmV2ZXJzaW9u
OgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZVJldmVyc2lvbjsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6
CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVTcGVsbGluZ1N1
Z2dlc3Rpb25zOgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZUd1ZXNz
ZXM7CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVEaWN0YXRp
b25BbHRlcm5hdGl2ZXM6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIE5TQ29y
cmVjdGlvbkluZGljYXRvclR5cGVEZWZhdWx0OwpAQCAtNDYsMTggKzQ5LDE4IEBAIHN0YXRpYyBp
bmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZShD
b3JyZWN0aW9uUGFuZWxJCiAKIENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKCkKICAg
ICA6IG1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseShmYWxzZSkKLSAgICAsIG1fcmVhc29uRm9yRGlz
bWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCkKKyAgICAs
IG1fcmVhc29uRm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0
SWdub3JlZCkKIHsKIH0KIAogQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKCkKIHsK
LSAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEln
bm9yZWQsIGZhbHNlKTsKKyAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dElnbm9yZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBDb3JyZWN0aW9uUGFuZWw6
OnNob3coV2ViVmlldyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIENv
cnJlY3Rpb25QYW5lbDo6c2hvdyhXZWJWaWV3KiB2aWV3LCBBbHRlcm5hdGl2ZVRleHRJbmZvOjpB
bHRlcm5hdGl2ZVR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykKIHsKLSAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbElnbm9yZWQsIGZhbHNlKTsKKyAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQsIGZhbHNlKTsKICAgICAKICAgICBp
ZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKQEAgLTgwLDEyICs4MywxMiBAQCB2b2lkIENvcnJl
Y3Rpb25QYW5lbDo6c2hvdyhXZWJWaWV3KiB2aWV3LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUgdHlwZSwgYwogICAgIH1dOwogfQogCi1TdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIENv
cnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0
IHJlYXNvbikKIHsKICAgICByZXR1cm4gZGlzbWlzc0ludGVybmFsKHJlYXNvbiwgdHJ1ZSk7CiB9
CiAKLVN0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSkK
K1N0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSkKIHsK
ICAgICBpZiAoIWlzU2hvd2luZygpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTUs
NyArMTE4LDcgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbGFjZW1l
bnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFjZW1lbnQsIE4KICAgICAgICAgaWYgKGFjY2VwdGVk
UmVwbGFjZW1lbnQpCiAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5T
Q29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkUmVwbGFjZW1l
bnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpk
b2N1bWVudFRhZ107CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3dhc0Rpc21p
c3NlZEV4dGVybmFsbHkgfHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nID09IFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAoIW1fd2FzRGlz
bWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCkKICAgICAgICAgICAgICAgICBbc3BlbGxD
aGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3Jy
ZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwg
aW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgW3NwZWxsQ2hlY2tlciByZWNvcmRSZXNwb25zZTpOU0NvcnJlY3Rpb25S
ZXNwb25zZUlnbm9yZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpy
ZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107
CkBAIC0xMzEsNyArMTM0LDcgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVk
UmVwbGFjZW1lbnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFjZW1lbnQsIE4KICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIAotICAgIFttX3ZpZXcuZ2V0KCkgaGFuZGxlQ29ycmVjdGlvblBhbmVs
UmVzdWx0OmFjY2VwdGVkUmVwbGFjZW1lbnRdOworICAgIFttX3ZpZXcuZ2V0KCkgaGFuZGxlQWNj
ZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6YWNjZXB0ZWRSZXBsYWNlbWVudF07CiAgICAgbV92aWV3LmNs
ZWFyKCk7CiAgICAgaWYgKGFjY2VwdGVkUmVwbGFjZW1lbnQpCiAgICAgICAgIG1fcmVzdWx0Rm9y
RGlzbWlzc2FsLmFkb3B0TlMoW2FjY2VwdGVkUmVwbGFjZW1lbnQgY29weV0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTgxNmE4NzYwODllYjM1NzllMGEy
NzJmMjRjMDgzM2M3OGUyYTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmgKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyX2gKKyNkZWZpbmUgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK09CSkNf
Q0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOworT0JKQ19DTEFTUyBXZWJWaWV3OworCitjbGFzcyBE
aWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjsKKworY2xhc3MgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIo
KSB7IH0KKyAgICAvLyBSZXR1cm5zIGEgZGljdGF0aW9uIGNvbnRleHQgSUQuCisgICAgdWludDY0
X3QgYWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7
CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgc2hvd0FsdGVybmF0aXZlcyhXZWJWaWV3Kiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVp
bnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworICAgIHZvaWQgZGlzbWlzc0FsdGVybmF0aXZlcygp
OworICAgIHZvaWQgcmVtb3ZlQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
OworCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmlu
ZyogYWNjZXB0ZWRBbHRlcm5hdGl2ZSwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0
QWx0ZXJuYXRpdmVzKik7CisgICAgCisgICAgY2xhc3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xs
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIoKSB7
IH0KKyAgICAgICAgdWludDY0X3QgYWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1Rl
eHRBbHRlcm5hdGl2ZXM+Jik7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgTlNUZXh0
QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQpOworICAgICAgICB2b2lkIHJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3Rh
dGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1aW50NjRfdCBpbnZhbGlkQ29udGV4dCA9IDA7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiA+
IEhhc2hNYXBUeXBlOworICAgICAgICBIYXNoTWFwVHlwZSBtX2FsdGVybmF0aXZlc09iamVjdE1h
cDsKKyAgICB9OworCisgICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgbV9jb250ZXh0Q29u
dHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V2ViVmlldz4gbV92aWV3OworfTsKKyNlbmRpZgorI2Vu
ZGlmIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9EaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E1YzhjOTA3YWNhZDBkYTFiMjRiNDdlMDdh
MmM1NWU4MTk1OWE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDEx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxl
ci5oIgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisKKyNpbXBvcnQgPEFwcEtp
dC9OU1NwZWxsQ2hlY2tlci5oPgorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5o
PgorI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCit1aW50NjRfdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNv
bnRleHRDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFs
dGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sKKyAgICB1aW50NjRfdCBjb250ZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50NjRfdD4oYWx0ZXJuYXRpdmVzLmdldCgpKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiBpbnZhbGlkQ29udGV4dDsKKyAgICBpZiAoYWx0ZXJuYXRp
dmVzRm9yRGljdGF0aW9uQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQ7
CisgICAgCisgICAgSGFzaE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2FsdGVybmF0aXZl
c09iamVjdE1hcC5hZGQoY29udGV4dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICByZXR1cm4gcmVzdWx0
LmlzTmV3RW50cnkgPyBjb250ZXh0IDogaW52YWxpZENvbnRleHQ7Cit9CisKK05TVGV4dEFsdGVy
bmF0aXZlcyogRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpEaWN0YXRpb25Db250ZXh0
Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KQoreworICAgIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBt
X2FsdGVybmF0aXZlc09iamVjdE1hcC5maW5kKGRpY3RhdGlvbkNvbnRleHQpOworICAgIGlmIChp
dHIgPT0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBOVUxM
OworICAgIHJldHVybiBpdHItPnNlY29uZC5nZXQoKTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRl
cm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRl
cm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7
CisgICAgbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAucmVtb3ZlKGRpY3RhdGlvbkNvbnRleHQpOwor
fQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4
dENvbnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAgICBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5jbGVh
cigpOworfQorCit1aW50NjRfdCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmFkZEFs
dGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYgYWx0ZXJuYXRp
dmVzKQoreworICAgIHJldHVybiBtX2NvbnRleHRDb250cm9sbGVyLmFkZEFsdGVybmF0aXZlcyhh
bHRlcm5hdGl2ZXMpOworfQorCit2b2lkIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6
Y2xlYXIoKQoreworICAgIHJldHVybiBtX2NvbnRleHRDb250cm9sbGVyLmNsZWFyKCk7Cit9CisK
K3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpzaG93QWx0ZXJuYXRpdmVzKFdl
YlZpZXcqIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3Rh
dGVkU3RyaW5nLCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIGRpc21pc3NBbHRl
cm5hdGl2ZXMoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZpZXcg
PSB2aWV3OworICAgIE5TVGV4dEFsdGVybmF0aXZlcyogYWx0ZXJuYXRpdmVzID0gbV9jb250ZXh0
Q29udHJvbGxlci5hbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRl
eHQpOworICAgIGlmICghYWx0ZXJuYXRpdmVzKQorICAgICAgICByZXR1cm47CisgICAgTlNTcGVs
bENoZWNrZXIqIHNwZWxsQ2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNr
ZXJdOworICAgIFtzcGVsbENoZWNrZXIgc2hvd0NvcnJlY3Rpb25JbmRpY2F0b3JPZlR5cGU6TlND
b3JyZWN0aW9uSW5kaWNhdG9yVHlwZUd1ZXNzZXMgcHJpbWFyeVN0cmluZzphbHRlcm5hdGl2ZXMu
cHJpbWFyeVN0cmluZyBhbHRlcm5hdGl2ZVN0cmluZ3M6YWx0ZXJuYXRpdmVzLmFsdGVybmF0aXZl
U3RyaW5ncyBmb3JTdHJpbmdJblJlY3Q6W3ZpZXcgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3OmJv
dW5kaW5nQm94T2ZEaWN0YXRlZFN0cmluZ10gdmlldzptX3ZpZXcuZ2V0KCkgY29tcGxldGlvbkhh
bmRsZXI6XihOU1N0cmluZyogYWNjZXB0ZWRTdHJpbmcpIHsKKyAgICAgICAgaWYgKGFjY2VwdGVk
U3RyaW5nKQorICAgICAgICAgICAgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShhY2NlcHRlZFN0
cmluZywgZGljdGF0aW9uQ29udGV4dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICB9XTsKK30KKwordm9p
ZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRp
dmUoTlNTdHJpbmcqIGFjY2VwdGVkQWx0ZXJuYXRpdmUsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRl
eHQsIE5TVGV4dEFsdGVybmF0aXZlcyogYWx0ZXJuYXRpdmVzKQoreworICAgIFthbHRlcm5hdGl2
ZXMgbm90ZVNlbGVjdGVkQWx0ZXJuYXRpdmVTdHJpbmc6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07Cisg
ICAgbV9jb250ZXh0Q29udHJvbGxlci5yZW1vdmVBbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250
ZXh0KGRpY3RhdGlvbkNvbnRleHQpOworICAgIFttX3ZpZXcuZ2V0KCkgaGFuZGxlQWNjZXB0ZWRB
bHRlcm5hdGl2ZVRleHQ6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07CisgICAgbV92aWV3LmNsZWFyKCk7
Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpkaXNtaXNzQWx0ZXJu
YXRpdmVzKCkKK3sKKyAgICBpZiAoIW1fdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIFtbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVjdGlvbkluZGljYXRv
ckZvclZpZXc6bV92aWV3LmdldCgpXTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQor
eworICAgIG1fY29udGV4dENvbnRyb2xsZXIucmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGljdGF0aW9u
Q29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zYWRlNmQ3ZWQyMmFmZDg2MGIxNmRiZWRhZTdkNzA5NDg1MTg2YzhkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlX2gKKyNkZWZpbmUgVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQorT0JKQ19DTEFTUyBOU1RleHRBbHRlcm5hdGl2ZXM7CisKK3N0cnVjdCBUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2UgeworICAgIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShOU1Rl
eHRBbHRlcm5hdGl2ZXMqIGFuQWx0ZXJuYXRpdmVzLCBOU1JhbmdlIGFSYW5nZSk7CisgICAgVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlKGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYW5v
dGhlcik7CisgICAgTlNSYW5nZSByYW5nZTsKKyAgICBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRp
dmVzPiBhbHRlcm5hdGl2ZXM7Cit9OworCisjZW5kaWYKKworI2VuZGlmIC8vIFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBlMDU3
ODcxM2YxODViZDg1ZTNiM2Y3ODE4ZDNjMTYxNDgyZjYxYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5t
bQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdp
dGhSYW5nZS5oIgorCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxB
cHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+CisKK1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKE5TVGV4dEFsdGVybmF0aXZlcyogYW5BbHRlcm5hdGl2
ZXMsIE5TUmFuZ2UgYVJhbmdlKQorOiByYW5nZShhUmFuZ2UpCissIGFsdGVybmF0aXZlcyhhbkFs
dGVybmF0aXZlcykKK3sKK30KKworVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UoY29uc3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKQor
OiByYW5nZShhbm90aGVyLnJhbmdlKQorLCBhbHRlcm5hdGl2ZXMoYW5vdGhlci5hbHRlcm5hdGl2
ZXMpCit7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggMDZmY2E4ZDBlYmZlMWU5ZmJkN2IyYmRiNWFjOTQw
ODgxMGNiMjQ1Yy4uZjU5MmI3NjM5ZmYyYjEzMzVkMmM5MzUxODJkMzg5Yjk0Y2E1Mzg4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKQEAgLTEzNywxMSArMTM3LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBy
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBjb25zdCBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JikgT1ZFUlJJREU7CiAjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
V2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVy
bmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBh
bmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRv
Y29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgT1ZFUlJJREU7CiAjZW5kaWYKKyNpZiBVU0Uo
RElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlvbkFs
dGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0
ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpIE9WRVJSSURFOworI2VuZGlmCiBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJVbmRv
T3JSZWRvU3RlcChQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiwgYm9vbCBpc1JlZG8pOwog
ICAgIFdlYkVkaXRvckNsaWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IGMzMDFlYjUwOGM4N2MyYTQwNTUxMjlh
MGU5NmRiMmZkNjNiZDJjNDEuLmY5NjI2NDg5NDkzZDhiOGIyMDM2YWM2ZjgxNjhlNzAxMGY3Zjkx
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KQEAgLTE5MCw3ICsxOTAsNyBAQCBXZWJFZGl0b3JDbGllbnQ6OldlYkVkaXRv
ckNsaWVudChXZWJWaWV3ICp3ZWJWaWV3KQogV2ViRWRpdG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xp
ZW50KCkKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAj
ZW5kaWYKIH0KIApAQCAtODY3LDE3ICs4NjcsMTcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXIK
IH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlv
blBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBwYW5lbFR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2
ZVR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKQogewotICAgIG1fY29ycmVjdGlvblBhbmVsLnNob3cobV93ZWJWaWV3LCBw
YW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJl
cGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWwuc2hvdyhtX3dlYlZpZXcsIGFsdGVybmF0aXZlVHlwZSwgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb25Gb3JEaXNtaXNzaW5nKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb25Gb3JE
aXNtaXNzaW5nKQogewogICAgIG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVhc29uRm9yRGlz
bWlzc2luZyk7CiB9CiAKLVN0cmluZyBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9u
UGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlz
bWlzc2luZykKK1N0cmluZyBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxT
b29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uRm9yRGlzbWlzc2lu
ZykKIHsKICAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWwuZGlzbWlzcyhyZWFzb25Gb3JEaXNt
aXNzaW5nKTsKIH0KQEAgLTg4OSw2ICs4ODksMjMgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblIK
IH0KICNlbmRpZgogCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCit2b2lkIFdlYkVk
aXRvckNsaWVudDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQorewor
ICAgIFttX3dlYlZpZXcgX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOmJvdW5kaW5nQm94T2ZE
aWN0YXRlZFRleHQgZm9yRGljdGF0aW9uQ29udGV4dDpkaWN0YXRpb25Db250ZXh0XTsKK30KKwor
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkKK3sK
KyAgICBbbV93ZWJWaWV3IF9kaXNtaXNzRGljdGF0aW9uQWx0ZXJuYXRpdmVVSV07Cit9CisKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBbbV93ZWJWaWV3IF9yZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXM6ZGljdGF0aW9uQ29udGV4dF07Cit9CisjZW5kaWYKKwogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBt
aXNzcGVsbGVkV29yZCkKIHsKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVkV29yZDptaXNzcGVsbGVkV29yZF07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBhOWIyOTFlNDk5
ZjgwMjk3Y2M3NTY3OWYzOTBlZjZiZGUwNjFjNGE0Li4zZDkwNTA4OWEwZDkwOGE5MGVhOTUyN2I4
NTgwZjBiMTI1MjE3ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkRPTURvY3VtZW50SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgor
I2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCiAjaW1wb3J0ICJXZWJBcmNoaXZl
LmgiCiAjaW1wb3J0ICJXZWJDbGlwVmlldy5oIgogI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9uc0lu
dGVybmFsLmgiCkBAIC01ODg4LDYgKzU4ODksMjIgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVy
bGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUK
ICAgICB9CiB9CiAKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK3N0YXRpYyB2b2lk
IGNvbGxlY3REaWN0YXRpb25UZXh0QWx0ZXJuYXRpdmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3Ry
aW5nLCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgYWx0ZXJuYXRpdmVzKSB7Cisg
ICAgTlNSYW5nZSBlZmZlY3RpdmVSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOworICAgIE5TVUlu
dGVnZXIgbGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOworICAgIGRvIHsKKyAgICAgICAgTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRleDplZmZlY3RpdmVS
YW5nZS5sb2NhdGlvbiBlZmZlY3RpdmVSYW5nZTomZWZmZWN0aXZlUmFuZ2VdOworICAgICAgICBp
ZiAoIWF0dHJpYnV0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgTlNUZXh0QWx0ZXJu
YXRpdmVzICp0ZXh0QWx0ZXJuYXRpdmVzID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVGV4
dEFsdGVybmF0aXZlc0F0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAodGV4dEFsdGVybmF0aXZl
cykKKyAgICAgICAgICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoVGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlKHRleHRBbHRlcm5hdGl2ZXMsIGVmZmVjdGl2ZVJhbmdlKSk7CisgICAgICAgIGVmZmVjdGl2
ZVJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5nZShlZmZlY3RpdmVSYW5nZSk7CisgICAgfSB3aGls
ZSAoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24gPCBsZW5ndGgpOworfQorI2VuZGlmCisKIC0gKHZv
aWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiB7CiAgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcg
PSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOwpAQCAt
NTkwNCw3ICs1OTIxLDE0IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAgTlNSYW5nZSBy
ZXBsYWNlbWVudFJhbmdlID0geyBOU05vdEZvdW5kLCAwIH07CiAgICAgYm9vbCBpc0Zyb21JbnB1
dE1ldGhvZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlv
bigpOwogCisgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGRpY3RhdGlv
bkFsdGVybmF0aXZlTG9jYXRpb25zOwogICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKKyNp
ZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICAgICAgVmVjdG9yPFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZT4gdGV4dEFsdGVybmF0aXZlczsKKyAgICAgICAgY29sbGVjdERpY3RhdGlv
blRleHRBbHRlcm5hdGl2ZXMoc3RyaW5nLCB0ZXh0QWx0ZXJuYXRpdmVzKTsKKyAgICAgICAgaWYg
KHRleHRBbHRlcm5hdGl2ZXMuc2l6ZSgpKQorICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBf
Z2V0V2ViQ29yZURpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zOmRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zIGZyb21UZXh0QWx0ZXJuYXRpdmVzOnRleHRBbHRlcm5hdGl2ZXNdOworI2Vu
ZGlmCiAgICAgICAgIC8vIEZJWE1FOiBXZSBpZ25vcmUgbW9zdCBhdHRyaWJ1dGVzIGZyb20gdGhl
IHN0cmluZywgc28gZm9yIGV4YW1wbGUgaW5zZXJ0aW5nIGZyb20gQ2hhcmFjdGVyIFBhbGV0dGUg
bG9zZXMgZm9udCBhbmQgZ2x5cGggdmFyaWF0aW9uIGRhdGEuCiAgICAgICAgIC8vIEl0IGRvZXMg
bm90IGxvb2sgbGlrZSBhbnkgaW5wdXQgbWV0aG9kcyBldmVyIHVzZSBpbnNlcnRUZXh0OiB3aXRo
IGF0dHJpYnV0ZXMgb3RoZXIgdGhhbiBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1
dGVOYW1lLgogICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOwpAQCAtNTk0Myw3ICs1OTY3
LDExIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRv
cigpLT5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIC8vIEFuIGluc2VydFRleHQ6IG1pZ2h0
IGJlIGhhbmRsZWQgYnkgb3RoZXIgcmVzcG9uZGVycyBpbiB0aGUgY2hhaW4gaWYgd2UgZG9uJ3Qg
aGFuZGxlIGl0LgogICAgICAgICAvLyBPbmUgZXhhbXBsZSBpcyBzcGFjZSBiYXIgdGhhdCByZXN1
bHRzIGluIHNjcm9sbGluZyBkb3duIHRoZSBwYWdlLgotICAgICAgICBldmVudEhhbmRsZWQgPSBj
b3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQpOworCisgICAg
ICAgIGlmIChkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucy5zaXplKCkpCisgICAgICAgICAg
ICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnREaWN0YXRlZFRleHQo
ZXZlbnRUZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgZXZlbnQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5p
bnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGV2ZW50
SGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21w
b3NpdGlvbihldmVudFRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4
IGM5NGFjM2NlYWJmMDY2YTEyODU2YzgzOGQ4ZWI4NzdlNjcwMWRiZWYuLjZmNGZlM2I4NTk5Yzlh
YmRiOWZkNzk2ZmM0YjlhMGI2OGFjNWFhYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2lt
cG9ydCAiV2ViVmlld0RhdGEuaCIKIAorI2ltcG9ydCAiRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250
cm9sbGVyLmgiCiAjaW1wb3J0ICJET01DU1NTdHlsZURlY2xhcmF0aW9uSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgpA
QCAtNTQ4MywxMiArNTQ4NCwxMiBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVE
ZXNjRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzVmFsdQogI2VuZGlmCiAK
ICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCi0tICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDooTlNT
dHJpbmcqKXJlc3VsdAorLSAodm9pZCloYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDooTlNT
dHJpbmcqKXRleHQKIHsKICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfc2VsZWN0ZWRP
ck1haW5GcmFtZV07CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOwogICAg
IGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOworICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5o
YW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dCh0ZXh0KTsKIH0KICNlbmRpZgogCkBAIC02MzQw
LDYgKzYzNDEsMzMgQEAgc3RhdGljIHZvaWQgZ2xpYkNvbnRleHRJdGVyYXRpb25DYWxsYmFjayhD
RlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZpdHkKIH0KICNlbmRpZgogCisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCistICh2b2lkKV9nZXRXZWJDb3JlRGljdGF0aW9u
QWx0ZXJuYXRpdmVMb2NhdGlvbnM6KFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9uPiYpbG9jYXRpb25zIGZyb21UZXh0QWx0ZXJuYXRpdmVzOihjb25zdCBWZWN0b3I8
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYpYWx0ZXJuYXRpdmVzCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbHRlcm5hdGl2ZVdpdGhSYW5nZSA9IGFsdGVybmF0
aXZlc1tpXTsKKyAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IF9wcml2YXRlLT5t
X2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci0+YWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0
aXZlV2l0aFJhbmdlLmFsdGVybmF0aXZlcyk7CisgICAgICAgIGlmIChkaWN0YXRpb25Db250ZXh0
KQorICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uKGFsdGVybmF0aXZlV2l0aFJhbmdlLnJhbmdlLmxvY2F0aW9uLCBhbHRlcm5hdGl2ZVdpdGhS
YW5nZS5yYW5nZS5sZW5ndGgsIGRpY3RhdGlvbkNvbnRleHQpKTsKKyAgICB9Cit9CisKKy0gKHZv
aWQpX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KWJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQgZm9yRGljdGF0aW9uQ29udGV4dDoodWludDY0X3Qp
ZGljdGF0aW9uQ29udGV4dAoreworICAgIF9wcml2YXRlLT5tX2RpY3RhdGlvbkFsdGVybmF0aXZl
Q29udHJvbGxlci0+c2hvd0FsdGVybmF0aXZlcyhzZWxmLCBib3VuZGluZ0JveE9mRGljdGF0ZWRU
ZXh0LCBkaWN0YXRpb25Db250ZXh0KTsKK30KKworLSAodm9pZClfZGlzbWlzc0RpY3RhdGlvbkFs
dGVybmF0aXZlVUkKK3sKKyAgICBfcHJpdmF0ZS0+bV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXItPmRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKK30KKworLSAodm9pZClfcmVtb3ZlRGljdGF0
aW9uQWx0ZXJuYXRpdmVzOih1aW50NjRfdClkaWN0YXRpb25Db250ZXh0Cit7CisgICAgX3ByaXZh
dGUtPm1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLT5yZW1vdmVBbHRlcm5hdGl2ZXMo
ZGljdGF0aW9uQ29udGV4dCk7Cit9CisjZW5kaWYKKwogLSAoTlNQb2ludClfY29udmVydFBvaW50
RnJvbVJvb3RWaWV3OihOU1BvaW50KXBvaW50CiB7CiAgICAgcmV0dXJuIE5TTWFrZVBvaW50KHBv
aW50LngsIFtzZWxmIGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBwb2ludC55KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAppbmRleCBlYTJiZmNmNjA3NGU5YTUxMWMzYzNlYWUy
ZGI0ZmY1ZTVlYzNjNGY2Li4yYzgzM2YwZThhZmI5YmVmZTI4YWIzZDFhYjJmNGRjMThlNGY5YmQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysr
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoaW5nLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvTGF5ZXJGbHVzaFNjaGVkdWxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9MYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5nLmg+CkBAIC01OCw2ICs1OSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIEBjbGFzcyBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjsKICNlbmRpZgogCitjbGFz
cyBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI7CisKIGV4dGVybiBCT09MIGFwcGxpY2F0
aW9uSXNUZXJtaW5hdGluZzsKIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsK
IApAQCAtMjAwLDUgKzIwMyw5IEBAIHByaXZhdGU6CiAgICAgaW50IHZhbGlkYXRpb25NZXNzYWdl
VGltZXJNYWduaWZpY2F0aW9uOwogCiAgICAgZmxvYXQgY3VzdG9tRGV2aWNlU2NhbGVGYWN0b3I7
CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBPd25QdHI8RGljdGF0aW9u
QWx0ZXJuYXRpdmVDb250cm9sbGVyPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjsK
KyNlbmRpZgogfQogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3RGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0K
aW5kZXggMGI4MTE3YTA5NzA2ZDViNmVjNGU2NDU3YzMzOThlNDc2MjZjNThiYS4uMjM0NjgyZTVm
MDNmNTE0MGMyNGRmODQ1OTJiYTAxYTg1ZTZmMDFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdEYXRhLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIldlYlZpZXdE
YXRhLmgiCiAKKyNpbXBvcnQgIkRpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5oIgogI2lt
cG9ydCAiV2ViS2l0TG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
LmgiCiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CkBAIC0xMDAsNiArMTAx
LDEwIEBAIExheWVyRmx1c2hDb250cm9sbGVyOjpMYXllckZsdXNoQ29udHJvbGxlcihXZWJWaWV3
KiB3ZWJWaWV3KQogCiAgICAgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCsrOwogCisjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRy
b2xsZXIgPSBhZG9wdFB0cihuZXcgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKTsKKyNl
bmRpZgorCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDAyY2M1NTAxMDZiMDQ0ZmJjMTc3YzlmNTlhMWY4M2Y1
OTBkZTUwYjAuLjk5MmI2MWRlODMwNGMxODQ2OGRmYmY2N2JiNmE3MmE3NjZlY2FlZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaApAQCAtMzQsMTMgKzM0
LDE3IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1
cworI2ltcG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCisjaW1wb3J0IDxXZWJDb3Jl
L0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRmluZE9w
dGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVLZXlib2FyZFVJTW9kZS5oPgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRXZlbnQ7
CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CiAgICAgY2xhc3MgS1VS
TDsKQEAgLTk1LDYgKzk5LDEzIEBAIFdlYkNvcmU6OkZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdl
YkZpbmRPcHRpb25zIG9wdGlvbnMpOwogLSAodm9pZClfc2NoZWR1bGVHbGliQ29udGV4dEl0ZXJh
dGlvbnM7CiAjZW5kaWYKIAorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorLSAodm9p
ZClfZ2V0V2ViQ29yZURpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zOihWZWN0b3I8V2ViQ29y
ZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mKWxvY2F0aW9ucyBmcm9tVGV4dEFsdGVy
bmF0aXZlczooY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mKWFsdGVybmF0
aXZlczsKKy0gKHZvaWQpX3Nob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJOihjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKWJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQgZm9yRGljdGF0aW9uQ29udGV4
dDoodWludDY0X3QpZGljdGF0aW9uQ29udGV4dDsKKy0gKHZvaWQpX2Rpc21pc3NEaWN0YXRpb25B
bHRlcm5hdGl2ZVVJOworLSAodm9pZClfcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOih1aW50
NjRfdClkaWN0YXRpb25Db250ZXh0OworI2VuZGlmCisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKaW5kZXggODU2NjU0NWJjM2IyZmE0
NThlNzZmZTk1MGY5MjY0ZTA1OTkyZDVkZi4uZjE3ZjAxZGZiZThlYjAxNjcwMjVlZjgzNjY4ZDU5
MjBmZDQ4NThiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUu
aApAQCAtNjg4LDcgKzY4OCw3IEBAIENvdWxkIGJlIHdvcnRoIGFkZGluZyB0byB0aGUgQVBJLgog
LSAodm9pZCl0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcjsKICNl
bmRpZgogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKLS0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0
OihOU1N0cmluZyopcmVzdWx0OworLSAodm9pZCloYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4
dDooTlNTdHJpbmcqKXRleHQ7CiAjZW5kaWYKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA1MDU0NjZjNmIwM2U1N2FhN2I4
OWIwNDAxZjc2YmExNjc5MjczODY4Li42ODdlY2JlYzIzMjQ4OGQwOTUxOWM5ZTFjNmMzMmRiNmM4
ZWEzZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhYmFz
ZURldGFpbHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRp
b24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CkBAIC02MzksNiAr
NjQwLDI0IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxLVVJMPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgS1VSTCYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEFy
Z3VtZW50Q29kZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj46OmVuY29kZShBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24mIGFs
dGVybmF0aXZlc0xvY2F0aW9uKQoreworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChhbHRlcm5h
dGl2ZXNMb2NhdGlvbi5yYW5nZVN0YXJ0KTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQoYWx0
ZXJuYXRpdmVzTG9jYXRpb24ucmFuZ2VMZW5ndGgpOworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2
NChhbHRlcm5hdGl2ZXNMb2NhdGlvbi5kaWN0YXRpb25Db250ZXh0KTsKK30KKworYm9vbCBBcmd1
bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uJiBhbHRlcm5hdGl2
ZXNMb2NhdGlvbikKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChhbHRlcm5hdGl2
ZXNMb2NhdGlvbi5yYW5nZVN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlVUludDY0KGFsdGVybmF0aXZlc0xvY2F0aW9uLnJhbmdlTGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGFs
dGVybmF0aXZlc0xvY2F0aW9uLmRpY3RhdGlvbkNvbnRleHQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKICNpZiBQTEFURk9STShRVCkKIAogdm9pZCBBcmd1
bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDZmOTcwMGNjNTAzY2E5N2VlOGI3YWJm
MjRlZGVhZTczMzgwYmQzNmQuLjIxM2YxMmRmMThkYzQwZGMzZDI3ZGEyY2UwODU4NDk0YmY3NDU0
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
QEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKICAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogICAgIHN0cnVjdCBDb21wb3Np
dGlvblVuZGVybGluZTsKKyAgICBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbjsK
ICAgICBzdHJ1Y3QgRHJhZ1Nlc3Npb247CiAgICAgc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7
CiAgICAgc3RydWN0IEdyYW1tYXJEZXRhaWw7CkBAIC0yMjgsNiArMjI5LDExIEBAIHRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S1VSTD4gewogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpLVVJMJik7CiB9OwogCit0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb24+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbiYpOworICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZUxv
Y2F0aW9uJik7Cit9OworCiAjaWYgUExBVEZPUk0oUVQpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCmluZGV4
IDhhZjc4YzdiYjVjYTY0M2Q5ZTNlMjRjYzM4NzJhM2QwNDM4ZTE3NjUuLmY2ZDIyN2Y3NDc5ZmE5
YzRlM2Q4ODA3YTVjODlkZmMzOWVhNGUwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5j
bHVkZSAiQ29ycmVjdGlvblBhbmVsLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7CkBAIC0zNSw2
ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXI7CiBjbGFzcyBGaW5kSW5kaWNhdG9yV2luZG93OwogCiBjbGFzcyBQYWdl
Q2xpZW50SW1wbCA6IHB1YmxpYyBQYWdlQ2xpZW50IHsKQEAgLTEyMCwyMCArMTIyLDI4IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0
IFN0cmluZyYsIGRvdWJsZSBzY2FsZUZhY3RvciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYp
OwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBh
bmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwotICAgIHZp
cnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7
CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
V2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShp
bnQzMl90IG5ld1N0eWxlKTsKIAogICAgIHZpcnR1YWwgV0tWaWV3KiB3a1ZpZXcoKSBjb25zdCB7
IHJldHVybiBtX3drVmlldzsgfQorICAgIAorICAgIHZpcnR1YWwgdWludDY0X3QgYWRkRGljdGF0
aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNob3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCk7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJ
KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0KTsKIAogICAgIFdLVmlldyogbV93a1ZpZXc7CiAgICAgUmV0YWlu
UHRyPFdLRWRpdG9yVW5kb1RhcmdldE9iakM+IG1fdW5kb1RhcmdldDsKICNpZiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgQ29ycmVjdGlvblBhbmVsIG1fY29ycmVjdGlv
blBhbmVsOwogI2VuZGlmCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgT3du
UHRyPERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcj4gbV9kaWN0YXRpb25BbHRlcm5hdGl2
ZUNvbnRyb2xsZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQppbmRl
eCAxNTRiNDU1YjZhMzdjZjQ5MWFmYzNmZTcwYmE4MTQ3MTQxMzc1ZWNjLi4yZDUzOTVmMGY0MTk2
MmNmY2MzNDE3ZjYwNDkxZTVlNDhkOTY2ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtMjYsNyArMjYsMTEgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKIAorI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZl
cy5oPgorI2VuZGlmCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisjaW1wb3J0ICJEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkRpY3Rpb25hcnlQb3B1cEluZm8u
aCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJk
RXZlbnQuaCIKQEAgLTEyMiw2ICsxMjYsOSBAQCBQYXNzT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBQ
YWdlQ2xpZW50SW1wbDo6Y3JlYXRlKFdLVmlldyogd2tWaWV3KQogUGFnZUNsaWVudEltcGw6OlBh
Z2VDbGllbnRJbXBsKFdLVmlldyogd2tWaWV3KQogICAgIDogbV93a1ZpZXcod2tWaWV3KQogICAg
ICwgbV91bmRvVGFyZ2V0KEFkb3B0TlMsIFtbV0tFZGl0b3JVbmRvVGFyZ2V0T2JqQyBhbGxvY10g
aW5pdF0pCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgLCBtX2RpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlcihhZG9wdFB0cihuZXcgRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyKSkKKyNlbmRpZgogewogfQogCkBAIC0yMTMsNiArMjIwLDkgQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6cHJvY2Vzc0RpZENyYXNoKCkKIHZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VD
bG9zZWQoKQogewogICAgIFttX3drVmlldyBfcGFnZUNsb3NlZF07CisjaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCisgICAgbV9kaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmNs
ZWFyKCk7CisjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9j
ZXNzKCkKQEAgLTQ2Myw3ICs0NzMsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzRGlj
dGlvbmFyeUxvb2t1cFBhbmVsKCkKICNlbmRpZgogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpz
aG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRl
cm5hdGl2ZVR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAg
aWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwgIWlzVmlld0luV2luZG93KCkpCkBAIC00NzIsMTQgKzQ4
MiwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjbwogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNs
aWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCByZWFzb24pCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQogewogI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBtX2NvcnJlY3Rpb25QYW5l
bC5kaXNtaXNzKHJlYXNvbik7CiAjZW5kaWYKIH0KIAotU3RyaW5nIFBhZ2VDbGllbnRJbXBsOjpk
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24p
CiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIHJldHVybiBt
X2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7CkBAIC01MjgsNSArNTM4LDM3IEBAIGJv
b2wgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3JTdHJpbmcpCiB7CiAgICAgcmV0dXJuIFttX3drVmlldyBfZXhlY3V0ZVNh
dmVkQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoc2VsZWN0b3JTdHJpbmcp
XTsKIH0KKyAgICAKK3VpbnQ2NF90IFBhZ2VDbGllbnRJbXBsOjphZGREaWN0YXRpb25BbHRlcm5h
dGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykK
K3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICByZXR1cm4gbV9kaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXItPmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpOwor
I2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
aG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwg
IWlzVmlld0luV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlci0+c2hvd0FsdGVybmF0aXZlcyhtX3drVmlldywgYm91bmRpbmdCb3hP
ZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKQoreworI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyLT5kaXNtaXNzQWx0ZXJuYXRpdmVzKCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRl
eHQpCit7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgbV9kaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXItPnJlbW92ZUFsdGVybmF0aXZlcyhkaWN0YXRpb25Db250ZXh0
KTsKKyNlbmRpZgorfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCA2MWUzYjYwNzVkNDA4MjVjYTNlYTc2M2M4
MDBjYTZlYjFjMjE4NWE5Li41MzE5MGUzZTE4YWY4N2I3YjNkYzBmZjRlZTgwNjgwYzcyNGVlYzAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC0yNiw2
ICsyNiwxMiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXS1ZpZXcuaCIKIAorI2lt
cG9ydCAiVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmgiCisjaWYgVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+CisjaW1wb3J0
IDxBcHBLaXQvTlNBdHRyaWJ1dGVkU3RyaW5nLmg+CisjZW5kaWYKKwogI2ltcG9ydCAiQXR0cmli
dXRlZFN0cmluZy5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRHJhd2lu
Z0FyZWFQcm94eUltcGwuaCIKQEAgLTExNTEsNiArMTE1NywyMiBAQCBzdGF0aWMgY29uc3Qgc2hv
cnQga0lPSElERXZlbnRUeXBlU2Nyb2xsID0gNjsKICAgICBbc2VsZiBpbnNlcnRUZXh0OnN0cmlu
ZyByZXBsYWNlbWVudFJhbmdlOk5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApXTsKIH0KIAorI2lm
IFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorc3RhdGljIHZvaWQgY29sbGVjdERpY3RhdGlv
blRleHRBbHRlcm5hdGl2ZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JiBhbHRlcm5hdGl2ZXMpIHsKKyAgICBOU1JhbmdlIGVmZmVj
dGl2ZVJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgMCk7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBb
c3RyaW5nIGxlbmd0aF07CisgICAgZG8geworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0
ZXMgPSBbc3RyaW5nIGF0dHJpYnV0ZXNBdEluZGV4OmVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uIGVm
ZmVjdGl2ZVJhbmdlOiZlZmZlY3RpdmVSYW5nZV07CisgICAgICAgIGlmICghYXR0cmlidXRlcykK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBOU1RleHRBbHRlcm5hdGl2ZXMgKnRleHRBbHRl
cm5hdGl2ZXMgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNUZXh0QWx0ZXJuYXRpdmVzQXR0
cmlidXRlTmFtZV07CisgICAgICAgIGlmICh0ZXh0QWx0ZXJuYXRpdmVzKQorICAgICAgICAgICAg
YWx0ZXJuYXRpdmVzLmFwcGVuZChUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UodGV4dEFsdGVybmF0
aXZlcywgZWZmZWN0aXZlUmFuZ2UpKTsKKyAgICAgICAgZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24g
PSBOU01heFJhbmdlKGVmZmVjdGl2ZVJhbmdlKTsKKyAgICB9IHdoaWxlIChlZmZlY3RpdmVSYW5n
ZS5sb2NhdGlvbiA8IGxlbmd0aCk7Cit9CisjZW5kaWYKKwogLSAodm9pZClpbnNlcnRUZXh0Oihp
ZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCiB7CiAg
ICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0
cmlidXRlZFN0cmluZyBjbGFzc11dOwpAQCAtMTE2Nyw3ICsxMTg5LDEyIEBAIHN0YXRpYyBjb25z
dCBzaG9ydCBrSU9ISURFdmVudFR5cGVTY3JvbGwgPSA2OwogICAgIE5TU3RyaW5nICp0ZXh0Owog
ICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCku
aGFzQ29tcG9zaXRpb247CiAKKyAgICBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiBk
aWN0YXRpb25BbHRlcm5hdGl2ZXM7CisKICAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7Cisj
aWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgICAgIGNvbGxlY3REaWN0YXRpb25U
ZXh0QWx0ZXJuYXRpdmVzKHN0cmluZywgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyNlbmRpZgog
ICAgICAgICAvLyBGSVhNRTogV2UgaWdub3JlIG1vc3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJp
bmcsIHNvIGZvciBleGFtcGxlIGluc2VydGluZyBmcm9tIENoYXJhY3RlciBQYWxldHRlIGxvc2Vz
IGZvbnQgYW5kIGdseXBoIHZhcmlhdGlvbiBkYXRhLgogICAgICAgICB0ZXh0ID0gW3N0cmluZyBz
dHJpbmddOwogICAgIH0gZWxzZQpAQCAtMTE4Nyw3ICsxMjE0LDExIEBAIHN0YXRpYyBjb25zdCBz
aG9ydCBrSU9ISURFdmVudFR5cGVTY3JvbGwgPSA2OwogCiAgICAgU3RyaW5nIGV2ZW50VGV4dCA9
IHRleHQ7CiAgICAgZXZlbnRUZXh0LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNo
YXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJD
b3JlCi0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQoZXZl
bnRUZXh0LCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJlcGxhY2VtZW50
UmFuZ2UpKTsKKyAgICBib29sIGV2ZW50SGFuZGxlZDsKKyAgICBpZiAoZGljdGF0aW9uQWx0ZXJu
YXRpdmVzLnNpemUoKSkKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gX2RhdGEtPl9wYWdlLT5pbnNl
cnREaWN0YXRlZFRleHQoZXZlbnRUZXh0LCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9uLCBOU01h
eFJhbmdlKHJlcGxhY2VtZW50UmFuZ2UpLCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGVs
c2UKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gX2RhdGEtPl9wYWdlLT5pbnNlcnRUZXh0KGV2ZW50
VGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJh
bmdlKSk7CiAKICAgICBpZiAocGFyYW1ldGVycykKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJ
bnRlcnByZXRhdGlvbkhhZFNpZGVFZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKQEAgLTI4NTAsOSAr
Mjg4MSw5IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGgo
TlNTdHJpbmcgKnBhdGgpCiAgICAgcmV0dXJuIF9kYXRhLT5fc3BlbGxDaGVja2VyRG9jdW1lbnRU
YWc7CiB9CiAKLS0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0OihOU1N0cmluZyop
cmVzdWx0CistICh2b2lkKWhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0OihOU1N0cmluZyop
dGV4dAogewotICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KHJl
c3VsdCk7CisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dCh0
ZXh0KTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlld0ludGVybmFsLmgKaW5kZXggYWQ0NmQwYWFhYmRkNTRkMmI4NWUxMjFkOWM5ODgyMWQz
MjE5NzQxNS4uNWI4YmM4N2JiYmYyMjk3OTliN2Q0ZDdhN2JmNWRlZjhhOGIwYzE5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCkBA
IC05NSw2ICs5NSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLSAodm9pZClfY2FjaGVXaW5kb3dC
b3R0b21Db3JuZXJSZWN0OwogCiAtIChOU0ludGVnZXIpc3BlbGxDaGVja2VyRG9jdW1lbnRUYWc7
Ci0tICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDooTlNTdHJpbmcqKXJlc3VsdDsK
Ky0gKHZvaWQpaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6KE5TU3RyaW5nKil0ZXh0Owog
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCA0OTk5MDFhZDM2
YTA5ODY3NWI2NzQ3Mjc1MjIxMjIyOTJkMGIwOTkyLi45MGQ5OTJkMzhiNjA2YTdlNTE3NDNiMWNj
MGQxYmNhMGMzY2FhYTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAg
LTI5LDE0ICsyOSwxNSBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9FZGl0b3JDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogCiBPQkpDX0NMQVNT
IFdLVmlldzsKK09CSkNfQ0xBU1MgTlNUZXh0QWx0ZXJuYXRpdmVzOwogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTE4NSwxMyArMTg2LDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IENHQ29udGV4dFJlZiBjb250YWluaW5nV2luZG93R3JhcGhpY3NDb250ZXh0KCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBTdHJpbmcmLCBk
b3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRpc21pc3NEaWN0aW9uYXJ5TG9va3VwUGFuZWwoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwotICAg
IHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2
ZVR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSA9IDA7CisgICAgdmlydHVh
bCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5kZWRTY3Jv
bGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxlKSA9IDA7CiAgICAgCiAgICAgdmly
dHVhbCBXS1ZpZXcqIHdrVmlldygpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHVpbnQ2
NF90IGFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJu
YXRpdmVzPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZl
VUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NE
aWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaWN0
YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgPSAwOwogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNv
bnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
MGFlZGEwZWI1OTkxYTI4MTA2ODAxMTk2OGY4NzIxNzUxNDU0YTA0Ny4uZjM4NGVhYzFmOGM5Nzdj
MGM2Zjk5ZGIwYjZjODIwZWJkMmE2ZDUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKQEAgLTE4MTIsNyArMTgxMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwCiAgICAgbV9wYWdlQ2xpZW50LT5yZXNldFRleHRJbnB1dFN0YXRlKCk7CiAjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBi
ZSBtb3ZlZCBpbnNpZGUgcmVzZXRUZXh0SW5wdXRTdGF0ZSgpPwotICAgIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAg
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dElnbm9yZWQpOwogICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5l
bCgpOwogI2VuZGlmCiAjZW5kaWYKQEAgLTIzNjksNyArMjM2OSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpwYWdlRGlkU2Nyb2xsKCkKIHsKICAgICBtX3VpQ2xpZW50LnBhZ2VEaWRTY3JvbGwodGhp
cyk7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JE
aXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAjZW5kaWYKIH0KIApAQCAtMzM1Myw3
ICszMzUzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCgpCiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlz
c0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogI2VuZGlmCiB9CkBAIC0zNjg5LDE3ICszNjg5LDE3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoYm9vbCYg
aXNTaG93aW5nKQogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIHZvaWQg
V2ViUGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAgIG1fcGFn
ZUNsaWVudC0+c2hvd0NvcnJlY3Rpb25QYW5lbCgoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlKXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmlu
ZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAg
ICBtX3BhZ2VDbGllbnQtPnNob3dDb3JyZWN0aW9uUGFuZWwoKEFsdGVybmF0aXZlVGV4dEluZm86
OkFsdGVybmF0aXZlVHlwZSlwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncyk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KGludDMyX3QgcmVhc29uKQogewotICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbCgoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbClyZWFzb24pOworICAgIG1f
cGFnZUNsaWVudC0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCgoUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dClyZWFzb24pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oaW50MzJfdCByZWFzb24sIFN0cmluZyYgcmVzdWx0KQogewotICAg
IHJlc3VsdCA9IG1fcGFnZUNsaWVudC0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oKFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpcmVhc29uKTsKKyAgICByZXN1bHQgPSBtX3Bh
Z2VDbGllbnQtPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKChSZWFzb25Gb3JEaXNtaXNzaW5n
QWx0ZXJuYXRpdmVUZXh0KXJlYXNvbik7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQpAQCAtMzcw
OCwxMyArMzcwOCwzMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaQogfQogI2VuZGlmIC8vICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIAotdm9pZCBXZWJQYWdlUHJveHk6Omhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQpCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICgh
aXNDbG9zZWQoKSkKLSAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpI
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOworICAgICAg
ICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQWx0ZXJu
YXRpdmVUZXh0KHRleHQpLCBtX3BhZ2VJRCwgMCk7CiAjZW5kaWYKIH0KKworI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQordm9pZCBXZWJQYWdlUHJveHk6OnNob3dEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVk
VGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPnNo
b3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3Rh
dGlvbkNvbnRleHQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzbWlzc0RpY3RhdGlvbkFs
dGVybmF0aXZlVUkoKQoreworICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0RpY3RhdGlvbkFsdGVy
bmF0aXZlVUkoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZURpY3RhdGlvbkFsdGVy
bmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIAorfQorI2VuZGlmCisK
ICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDY4MzFmMzk0OWMxMmIyZTk5MWUz
MDY0YmUyMjZhZWQyMzFiYTFmZTQuLjljMmM1OWE5ZGI5NDQ0NDVjNjljM2Y1Y2VjMDcyODU0ZDUy
Yjk3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU4LDYg
KzU4LDcgQEAKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5oIgogI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIldlYlVJQ2xpZW50LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EcmFnQWN0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ1Nlc3Npb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KQEAgLTEwNiw2ICsxMDcsNyBAQCBjbGFzcyBR
UXVpY2tOZXR3b3JrUmVwbHk7CiAjZWxzZQogY2xhc3MgV0tWaWV3OwogI2VuZGlmCitzdHJ1Y3Qg
VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCkBA
IC0zNDUsNiArMzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKCk7
CiAgICAgdm9pZCBjYW5jZWxDb21wb3NpdGlvbigpOwogICAgIGJvb2wgaW5zZXJ0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3Qg
cmVwbGFjZW1lbnRSYW5nZUVuZCk7CisgICAgYm9vbCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VFbmQsIGNvbnN0IFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+
JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UodWludDY0
X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lkIGdldFNlbGVjdGVkUmFu
Z2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKICAgICB2b2lkIGdldEF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxl
bmd0aCwgQXR0cmlidXRlZFN0cmluZyYpOwpAQCAtNjExLDcgKzYxNCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4mIHVwZGF0ZVJlY3RzKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBo
YW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpOwogI2VuZGlm
CiAKICAgICBzdGF0aWMgdm9pZCBzZXREZWJ1Z1BhaW50RmxhZ3MoV0tQYWdlRGVidWdQYWludEZs
YWdzIGZsYWdzKSB7IHNfZGVidWdQYWludEZsYWdzID0gZmxhZ3M7IH0KQEAgLTg3MSw2ICs4NzQs
MTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMy
X3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCk7CiAgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKICNlbmRpZiAvLyAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElW
RVMpCisgICAgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpOworICAgIHZvaWQgZGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoKTsKKyAgICB2
b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
KTsKKyNlbmRpZgogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgIHZvaWQgY2xlYXJMb2Fk
RGVwZW5kZW50Q2FsbGJhY2tzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA0YzM1YzRkYWZhNGUzZDk1YzA5ZDM2MWFmZWEx
NjlkNDE1MmE2ZDNlLi5kMzBjMTlmZjE2ZGIwNWU5MzQ3ZDJjZWQ1MTE4ZDUyNDljZGZjNjUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KQEAgLTI3Niw2ICsyNzYsMTIgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBS
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBTdHJpbmcg
cmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyk7CiAjZW5kaWYKIAorI2lm
IFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIFNob3dEaWN0YXRpb25BbHRlcm5hdGl2
ZVVJKFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0KQorICAgIERpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkK
KyAgICBSZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4
dCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAjIFdpbmRvd3MgNyBHZXN0dXJl
IE1lc3NhZ2VzCiAgICAgU2V0R2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdChib29sIGxpbWl0
UmVhY2hlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVj
dGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5l
bC5oCmluZGV4IDY2NzkzYTk3NDg2MmJkMDJmNWJmMzc1NWQ2ZWFlZjQzYTUwZGNkYmYuLjY2NzI4
ODIyMWEwNzIyYjIxMjE5ZDE4NGQ1NzMwOGY0M2IyN2ZkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05T
U3BlbGxDaGVja2VyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAY2xhc3MgV0tWaWV3OwpAQCAtMzksMTcgKzM5
LDE3IEBAIGNsYXNzIENvcnJlY3Rpb25QYW5lbCB7CiBwdWJsaWM6CiAgICAgQ29ycmVjdGlvblBh
bmVsKCk7CiAgICAgfkNvcnJlY3Rpb25QYW5lbCgpOwotICAgIHZvaWQgc2hvdyhXS1ZpZXcqLCBX
ZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwotICAgIFN0cmluZyBkaXNt
aXNzKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOworICAgIHZv
aWQgc2hvdyhXS1ZpZXcqLCBXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRJbmZvOjpBbHRlcm5hdGl2
ZVR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MpOworICAgIFN0cmluZyBkaXNtaXNzKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdB
bHRlcm5hdGl2ZVRleHQpOwogICAgIHN0YXRpYyB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoV0tWaWV3KiwgTlNDb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgaXNTaG93aW5nKCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9Ci0gICAgU3RyaW5n
IGRpc21pc3NJbnRlcm5hbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsLCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KTsKKyAgICBTdHJpbmcgZGlzbWlzc0ludGVy
bmFsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQsIGJvb2wgZGlz
bWlzc2luZ0V4dGVybmFsbHkpOwogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudChO
U1N0cmluZyogYWNjZXB0ZWRSZXBsYWNlbWVudCwgTlNTdHJpbmcqIHJlcGxhY2VkLCBOU1N0cmlu
ZyogcHJvcG9zZWRSZXBsYWNlbWVudCwgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSk7CiAKICAg
ICBib29sIG1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseTsKLSAgICBXZWJDb3JlOjpSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIG1fcmVhc29uRm9yRGlzbWlzc2luZzsKKyAgICBXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IG1fcmVhc29uRm9yRGlzbWlz
c2luZzsKICAgICBSZXRhaW5QdHI8V0tWaWV3PiBtX3ZpZXc7CiAgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiBtX3Jlc3VsdEZvckRpc21pc3NhbDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCmluZGV4IDg2ZGQxNmE1NmNlZjBmODM0MDg3ZDc2
ZGRjZjVkNTcwYzcwNTRkNzkuLjk3ZWRkZDVkNGMyNjNjYmY4Zjk0Y2E0NWI1ODNlYThiNzBkZGVm
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBh
bmVsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVs
Lm1tCkBAIC0zMywxNSArMzMsMTggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0
YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9y
VHlwZShDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlKQorc3RhdGljIGlu
bGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlIGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKEFs
dGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZSBhbHRlcm5hdGl2ZVR5cGUpCiB7Ci0g
ICAgc3dpdGNoIChwYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25JbmRpY2F0b3JU
eXBlRGVmYXVsdDsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVy
c2lvbjoKLSAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVSZXZlcnNpb247
Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rp
b25zOgotICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZUd1ZXNzZXM7Cisg
ICAgc3dpdGNoIChhbHRlcm5hdGl2ZVR5cGUpIHsKKyAgICAgICAgY2FzZSBBbHRlcm5hdGl2ZVRl
eHRJbmZvOjpBbHRlcm5hdGl2ZVR5cGVDb3JyZWN0aW9uOgorICAgICAgICAgICAgcmV0dXJuIE5T
Q29ycmVjdGlvbkluZGljYXRvclR5cGVEZWZhdWx0OworICAgICAgICBjYXNlIEFsdGVybmF0aXZl
VGV4dEluZm86OkFsdGVybmF0aXZlVHlwZVJldmVyc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBO
U0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlUmV2ZXJzaW9uOworICAgICAgICBjYXNlIEFsdGVybmF0
aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CisgICAgICAg
ICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZUd1ZXNzZXM7CisgICAgICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVUeXBlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIE5TQ29ycmVj
dGlvbkluZGljYXRvclR5cGVEZWZhdWx0OwpAQCAtNTEsMTggKzU0LDE4IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBDb3JyZWN0aW9uUGFuZWw6OkNvcnJlY3Rpb25QYW5lbCgpCiAgICAgOiBtX3dh
c0Rpc21pc3NlZEV4dGVybmFsbHkoZmFsc2UpCi0gICAgLCBtX3JlYXNvbkZvckRpc21pc3Npbmco
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpCisgICAgLCBtX3JlYXNv
bkZvckRpc21pc3NpbmcoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQp
CiB7CiB9CiAKIENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgpCiB7Ci0gICAgZGlz
bWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBm
YWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdL
VmlldyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIENvcnJlY3Rpb25Q
YW5lbDo6c2hvdyhXS1ZpZXcqIHZpZXcsIEFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZl
VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KQogewotICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsSWdub3JlZCwgZmFsc2UpOworICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwgZmFsc2UpOwogICAgIAogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuOwpAQCAtODYsMTIgKzg5LDEyIEBAIHZvaWQgQ29ycmVjdGlvblBhbmVs
OjpzaG93KFdLVmlldyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUs
IGNvCiAgICAgfV07CiB9CiAKLVN0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3MoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24pCitTdHJpbmcgQ29ycmVjdGlvblBh
bmVsOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQog
ewogICAgIHJldHVybiBkaXNtaXNzSW50ZXJuYWwocmVhc29uLCB0cnVlKTsKIH0KIAotU3RyaW5n
IENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwgcmVhc29uLCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KQorU3RyaW5nIENv
cnJlY3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHQgcmVhc29uLCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KQogewogICAgIGlmICgh
aXNTaG93aW5nKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTEyMSw3ICsxMjQsNyBA
QCB2b2lkIENvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudChOU1N0cmlu
ZyogYWNjZXB0ZWRSZXBsYWNlbWVudCwgTgogICAgICAgICBpZiAoYWNjZXB0ZWRSZXBsYWNlbWVu
dCkKICAgICAgICAgICAgIFtzcGVsbENoZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9u
UmVzcG9uc2VBY2NlcHRlZCB0b0NvcnJlY3Rpb246YWNjZXB0ZWRSZXBsYWNlbWVudCBmb3JXb3Jk
OnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFn
XTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2FzRGlzbWlzc2VkRXh0ZXJu
YWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbENhbmNlbGxlZCkKKyAgICAgICAgICAgIGlmICghbV93YXNEaXNtaXNzZWRFeHRl
cm5hbGx5IHx8IG1fcmVhc29uRm9yRGlzbWlzc2luZyA9PSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKQogICAgICAgICAgICAgICAgIFtzcGVsbENoZWNrZXIgcmVj
b3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VSZWplY3RlZCB0b0NvcnJlY3Rpb246cHJv
cG9zZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9j
dW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlSWdu
b3JlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxh
bmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKQEAgLTEzNyw3
ICsxNDAsNyBAQCB2b2lkIENvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVu
dChOU1N0cmluZyogYWNjZXB0ZWRSZXBsYWNlbWVudCwgTgogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBbbV92aWV3LmdldCgpIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDphY2NlcHRl
ZFJlcGxhY2VtZW50XTsKKyAgICBbbV92aWV3LmdldCgpIGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRp
dmVUZXh0OmFjY2VwdGVkUmVwbGFjZW1lbnRdOwogICAgIG1fdmlldy5jbGVhcigpOwogICAgIGlm
IChhY2NlcHRlZFJlcGxhY2VtZW50KQogICAgICAgICBtX3Jlc3VsdEZvckRpc21pc3NhbC5hZG9w
dE5TKFthY2NlcHRlZFJlcGxhY2VtZW50IGNvcHldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdkZTE0YWM5MWMwZWNkMjAzYzA1OGRkNTQxYjAwNzA3NmFiN2U3NjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0RpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcl9oCisjZGVmaW5lIERpY3RhdGlvbkFs
dGVybmF0aXZlQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCitPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsK
K09CSkNfQ0xBU1MgV0tWaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRGljdGF0
aW9uQ29udGV4dENvbnRyb2xsZXI7CisKK2NsYXNzIERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJv
bGxlciB7CitwdWJsaWM6CisgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyKCkgeyB9
CisgICAgLy8gUmV0dXJucyBhIGRpY3RhdGlvbiBjb250ZXh0IElELgorICAgIHVpbnQ2NF90IGFk
ZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYpOworICAg
IHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHNob3dBbHRlcm5hdGl2ZXMoV0tWaWV3KiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcsIHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQpOworICAgIHZvaWQgZGlzbWlzc0FsdGVybmF0aXZlcygpOworICAg
IHZvaWQgcmVtb3ZlQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOworCitw
cml2YXRlOgorICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZShOU1N0cmluZyogYWNj
ZXB0ZWRBbHRlcm5hdGl2ZSwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgTlNUZXh0QWx0ZXJu
YXRpdmVzKik7CisgICAgCisgICAgY2xhc3MgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIoKSB7IH0KKyAg
ICAgICAgdWludDY0X3QgYWRkQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRl
cm5hdGl2ZXM+Jik7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgTlNUZXh0QWx0ZXJu
YXRpdmVzKiBhbHRlcm5hdGl2ZXNGb3JEaWN0YXRpb25Db250ZXh0KHVpbnQ2NF90IGRpY3RhdGlv
bkNvbnRleHQpOworICAgICAgICB2b2lkIHJlbW92ZUFsdGVybmF0aXZlc0ZvckRpY3RhdGlvbkNv
bnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBpbnZhbGlkQ29udGV4dCA9IDA7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiA+IEhhc2hN
YXBUeXBlOworICAgICAgICBIYXNoTWFwVHlwZSBtX2FsdGVybmF0aXZlc09iamVjdE1hcDsKKyAg
ICB9OworCisgICAgRGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXIgbV9jb250ZXh0Q29udHJvbGxl
cjsKKyAgICBSZXRhaW5QdHI8V0tWaWV3PiBtX3ZpZXc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCisjZW5kaWYgLy8gRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9EaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZjNjE2N2IzNDViZTEw
Y2JlOTA4MWE1MzgzM2VlMmY2NTRhNTk4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLm1tCkBAIC0w
LDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJE
aWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaCIKKworI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+CisjaW1wb3J0IDxB
cHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+CisjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VpbnQ2
NF90IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRy
b2xsZXI6OmFkZEFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVz
PiYgYWx0ZXJuYXRpdmVzKQoreworICAgIHVpbnQ2NF90IGNvbnRleHQgPSByZWludGVycHJldF9j
YXN0PHVpbnQ2NF90PihhbHRlcm5hdGl2ZXMuZ2V0KCkpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIGludmFsaWRDb250ZXh0OworICAgIGlmIChhbHRlcm5hdGl2ZXNGb3JEaWN0
YXRpb25Db250ZXh0KGNvbnRleHQpKQorICAgICAgICByZXR1cm4gY29udGV4dDsKKworICAgIEhh
c2hNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuYWRk
KGNvbnRleHQsIGFsdGVybmF0aXZlcyk7CisgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5ID8g
Y29udGV4dCA6IGludmFsaWRDb250ZXh0OworfQorCitOU1RleHRBbHRlcm5hdGl2ZXMqIERpY3Rh
dGlvbkFsdGVybmF0aXZlQ29udHJvbGxlcjo6RGljdGF0aW9uQ29udGV4dENvbnRyb2xsZXI6OmFs
dGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQodWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkK
K3sKKyAgICBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbV9hbHRlcm5hdGl2ZXNP
YmplY3RNYXAuZmluZChkaWN0YXRpb25Db250ZXh0KTsKKyAgICBpZiAoaXRyID09IG1fYWx0ZXJu
YXRpdmVzT2JqZWN0TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4g
aXRyLT5zZWNvbmQuZ2V0KCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9s
bGVyOjpEaWN0YXRpb25Db250ZXh0Q29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yRGlj
dGF0aW9uQ29udGV4dCh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIG1fYWx0ZXJu
YXRpdmVzT2JqZWN0TWFwLnJlbW92ZShkaWN0YXRpb25Db250ZXh0KTsKK30KKwordm9pZCBEaWN0
YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OkRpY3RhdGlvbkNvbnRleHRDb250cm9sbGVyOjpj
bGVhcigpCit7CisgICAgbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuY2xlYXIoKTsKK30KKwordWlu
dDY0X3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjphZGRBbHRlcm5hdGl2ZXMoY29u
c3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sKKyAgICBy
ZXR1cm4gbV9jb250ZXh0Q29udHJvbGxlci5hZGRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsK
K30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0Q29udHJvbGxlci5jbGVhcigpOworfQorCit2b2lkIERpY3RhdGlv
bkFsdGVybmF0aXZlQ29udHJvbGxlcjo6c2hvd0FsdGVybmF0aXZlcyhXS1ZpZXcqIHZpZXcsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkU3RyaW5nLCB1aW50
NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIGRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlldyA9IHZpZXc7CisgICAg
TlNUZXh0QWx0ZXJuYXRpdmVzKiBhbHRlcm5hdGl2ZXMgPSBtX2NvbnRleHRDb250cm9sbGVyLmFs
dGVybmF0aXZlc0ZvckRpY3RhdGlvbkNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7CisgICAgaWYg
KCFhbHRlcm5hdGl2ZXMpCisgICAgICAgIHJldHVybjsKKyAgICBOU1NwZWxsQ2hlY2tlciogc3Bl
bGxDaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgW3Nw
ZWxsQ2hlY2tlciBzaG93Q29ycmVjdGlvbkluZGljYXRvck9mVHlwZTpOU0NvcnJlY3Rpb25JbmRp
Y2F0b3JUeXBlR3Vlc3NlcyBwcmltYXJ5U3RyaW5nOmFsdGVybmF0aXZlcy5wcmltYXJ5U3RyaW5n
IGFsdGVybmF0aXZlU3RyaW5nczphbHRlcm5hdGl2ZXMuYWx0ZXJuYXRpdmVTdHJpbmdzIGZvclN0
cmluZ0luUmVjdDpib3VuZGluZ0JveE9mRGljdGF0ZWRTdHJpbmcgdmlldzptX3ZpZXcuZ2V0KCkg
Y29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyogYWNjZXB0ZWRTdHJpbmcpIHsKKyAgICAgICAg
aWYgKGFjY2VwdGVkU3RyaW5nKQorICAgICAgICAgICAgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2
ZShhY2NlcHRlZFN0cmluZywgZGljdGF0aW9uQ29udGV4dCwgYWx0ZXJuYXRpdmVzKTsKKyAgICB9
XTsKK30KKwordm9pZCBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xsZXI6OmhhbmRsZUFjY2Vw
dGVkQWx0ZXJuYXRpdmUoTlNTdHJpbmcqIGFjY2VwdGVkQWx0ZXJuYXRpdmUsIHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQsIE5TVGV4dEFsdGVybmF0aXZlcyogYWx0ZXJuYXRpdmVzKQoreworICAg
IFthbHRlcm5hdGl2ZXMgbm90ZVNlbGVjdGVkQWx0ZXJuYXRpdmVTdHJpbmc6YWNjZXB0ZWRBbHRl
cm5hdGl2ZV07CisgICAgbV9jb250ZXh0Q29udHJvbGxlci5yZW1vdmVBbHRlcm5hdGl2ZXNGb3JE
aWN0YXRpb25Db250ZXh0KGRpY3RhdGlvbkNvbnRleHQpOworICAgIFttX3ZpZXcuZ2V0KCkgaGFu
ZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07CisgICAgbV92
aWV3LmNsZWFyKCk7Cit9CisKK3ZvaWQgRGljdGF0aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyOjpk
aXNtaXNzQWx0ZXJuYXRpdmVzKCkKK3sKKyAgICBpZiAoIW1fdmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBkaXNtaXNzQ29ycmVj
dGlvbkluZGljYXRvckZvclZpZXc6bV92aWV3LmdldCgpXTsKK30KKwordm9pZCBEaWN0YXRpb25B
bHRlcm5hdGl2ZUNvbnRyb2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRp
b25Db250ZXh0KQoreworICAgIG1fY29udGV4dENvbnRyb2xsZXIucmVtb3ZlQWx0ZXJuYXRpdmVz
Rm9yRGljdGF0aW9uQ29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKK30KK30KKyNlbmRpZiAvLyBV
U0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4MDAy
MzMxMTc4YmFkMzkxNDM4NWY5NTQ4NTk5MTJkZGJkNjk2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZV9oCisjZGVmaW5lIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK09CSkNfQ0xBU1Mg
TlNUZXh0QWx0ZXJuYXRpdmVzOworCitzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlIHsK
KyAgICBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoTlNUZXh0QWx0ZXJuYXRpdmVzKiBhbkFsdGVy
bmF0aXZlcywgTlNSYW5nZSBhUmFuZ2UpOworICAgIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZShj
b25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFub3RoZXIpOworICAgIE5TUmFuZ2UgcmFu
Z2U7CisgICAgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4gYWx0ZXJuYXRpdmVzOworfTsK
KworI2Vsc2UKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UgeyB9OworI2VuZGlmCisK
KyNlbmRpZiAvLyBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MDYxNTQyZGE5ZGViMGUxOWM1ZWIxYTg3N2Q0NDQyOGY5ODdiZWNhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UubW0KQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIgorCisjaWYgVVNFKERJQ1RB
VElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+
CisKK1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlKE5T
VGV4dEFsdGVybmF0aXZlcyogYW5BbHRlcm5hdGl2ZXMsIE5TUmFuZ2UgYVJhbmdlKQorOiByYW5n
ZShhUmFuZ2UpCissIGFsdGVybmF0aXZlcyhhbkFsdGVybmF0aXZlcykKK3sKK30KKworVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UoY29uc3QgVGV4dEFs
dGVybmF0aXZlV2l0aFJhbmdlJiBhbm90aGVyKQorOiByYW5nZShhbm90aGVyLnJhbmdlKQorLCBh
bHRlcm5hdGl2ZXMoYW5vdGhlci5hbHRlcm5hdGl2ZXMpCit7Cit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggMzU4NDcx
ODJlMTQwYjdkODRkMDk4MzQ2YjY4YjczZWIxYTA4NjRmMC4uY2FkYzk0NDc3M2VkY2M1MmQzNThk
YjM4MTliZThmYmUzZjFmZjhiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTM1LDkgKzM1LDExIEBACiAjaW1wb3J0ICJQYWdlQ2xp
ZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0
aWVzLmgiCisjaW1wb3J0ICJUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2VyLmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5o
PgpAQCAtMTk4LDYgKzIwMCwzNSBAQCBib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydAogICAgIHJldHVy
biBoYW5kbGVkOwogfQogCitib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRf
dCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQoreworI2lmIFVTRShESUNUQVRJT05fQUxURVJO
QVRJVkVTKQorICAgIGlmIChkaWN0YXRpb25BbHRlcm5hdGl2ZXMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2Vt
ZW50UmFuZ2VFbmQpOworICAgIAorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uPiBkaWN0YXRp
b25BbHRlcm5hdGl2ZUxvY2F0aW9uczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZSYgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UgPSBkaWN0YXRpb25BbHRlcm5h
dGl2ZXNbaV07CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBtX3BhZ2VDbGll
bnQtPmFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZVdpdGhSYW5nZS5hbHRlcm5h
dGl2ZXMpOworICAgICAgICBpZiAoZGljdGF0aW9uQ29udGV4dCkKKyAgICAgICAgICAgIGRpY3Rh
dGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0
aW9uKGFsdGVybmF0aXZlV2l0aFJhbmdlLnJhbmdlLmxvY2F0aW9uLCBhbHRlcm5hdGl2ZVdpdGhS
YW5nZS5yYW5nZS5sZW5ndGgsIGRpY3RhdGlvbkNvbnRleHQpKTsKKyAgICB9CisKKyAgICBpZiAo
ZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
aW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VF
bmQpOworICAgIAorICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CisgICAgcHJvY2VzcygpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0RGljdGF0ZWRUZXh0KHRleHQsIHJlcGxhY2Vt
ZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVM
b2NhdGlvbnMpLCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0RGljdGF0ZWRUZXh0OjpSZXBseSho
YW5kbGVkLCBtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOworICAgIHJldHVybiBoYW5kbGVkOwor
I2Vsc2UKKyAgICByZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQs
IHJlcGxhY2VtZW50UmFuZ2VFbmQpOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpCiB7CiAg
ICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE3OWM5NjFmNDdkYTc5M2RmNDE4ZTA3NWUz
ODdiMzNiYWEzYjU2YmUuLmMyZTAwNjRiZjE4YTI4MjI4MjZjNzA4MDNlNWNmN2MxMGJhNmUxYzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTg4Myw2ICs4ODMsOSBAQAogCQlDRENBODVDOTEzMkFCQTRFMDBFOTYxREYgLyogV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0RDQTg1RDUxMzJBQzJCMzAwRTk2MURGIC8q
IElPS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQ0E4NUQ0MTMyQUMyQjMwMEU5NjFERiAvKiBJT0tpdC5mcmFtZXdvcmsgKi87
IH07CiAJCUNEQ0E4NUVFMTMyQUQ3MDEwMEU5NjFERiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDQTg1REUxMzJBRDA1MzAwRTk2MURGIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNYWMu
bW0gKi87IH07CisJCUNFNjI1QjZFMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5h
dGl2ZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRTYyNUI2QzE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmVD
b250cm9sbGVyLm1tICovOyB9OworCQlDRTYyNUI2RjE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0
aW9uQWx0ZXJuYXRpdmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRTYyNUI2RDE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLmggKi87IH07CisJCUNFRDJCNzgyMTUxQTVFNDYwMDNBQkNFRiAv
KiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRUE2OUQzQjE1MUE0MUM0MDBGNzQzREUgLyogVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlLm1tICovOyB9OwogCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJCMzkgLyog
V2ViUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovOyB9
OwogCQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MzExRkY0QjY1MDAw
MzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi87IH07CiAJCUQzQjk0ODQ4MTFGRjRCNjUwMDAzMkIz
OSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBv
cHVwTWVudS5jcHAgKi87IH07CkBAIC0xOTM3LDYgKzE5NDAsMTAgQEAKIAkJQ0RDQTg1QzcxMzJB
QkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRENBODVENDEzMkFDMkIzMDBFOTYxREYgLyog
SU9LaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJT0tpdC5mcmFtZXdvcms7IHBhdGgg
PSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CiAJCUNEQ0E4NURFMTMyQUQwNTMwMEU5NjFERiAvKiBXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0U2MjVCNkMxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVy
bmF0aXZlQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0U2MjVCNkQxNTFCNkY0ODAwODlCQ0Q4IC8qIERpY3RhdGlvbkFsdGVybmF0
aXZlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRp
b25BbHRlcm5hdGl2ZUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0VBNjlEM0IxNTFBNDFDNDAwRjc0M0RFIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRBbHRlcm5hdGl2ZVdp
dGhSYW5nZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VBNjlEM0MxNTFBNDFD
NDAwRjc0M0RFIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBUZXh0QWx0ZXJuYXRpdmVXaXRo
UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDIxMUZGNEI2NTAw
MDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
M0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVu
dS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDMyLDYgKzM0MzksMTAgQEAK
IAkJCQkxQTY0MjkyQzEyREU1Rjk4MDBDQUFFMkMgLyogQmFja2luZ1N0b3JlTWFjLm1tICovLAog
CQkJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAqLywKIAkJ
CQlCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tICovLAorCQkJ
CUNFNjI1QjZEMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNvbnRyb2xs
ZXIuaCAqLywKKwkJCQlDRTYyNUI2QzE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0ZXJu
YXRpdmVDb250cm9sbGVyLm1tICovLAorCQkJCUNFQTY5RDNDMTUxQTQxQzQwMEY3NDNERSAvKiBU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLywKKwkJCQlDRUE2OUQzQjE1MUE0MUM0MDBGNzQz
REUgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovLAogCQkJCTFBQTQxN0VEMTJDMDBE
ODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSAqLywKIAkJCQkxQUYwNUQ4NTE0Njg4MzQ4
MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oICovLAogCQkJ
CTFBRjA1RDg0MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YVByb3h5Lm1tICovLApAQCAtNDE3OCw2ICs0MTg5LDcgQEAKIAkJCQkzNzYwODgyMzE1MDQxNEY3
MDBGQzgyQzcgLyogV0tSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OTQ4NDA0
MTUwQzM1MDYwMEU1MkNFOSAvKiBXZWJSZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Mzc5NDg0MDkxNTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNFNjI1QjZGMTUxQjZGNDgwMDg5QkNEOCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDY1MSw2ICs0NjYzLDcgQEAKIAkJCQlDMDFB
MjYwMTEyNjYyRjIxMDBDOUVENTUgLyogU2hhcmVhYmxlQml0bWFwQ0cuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEyNEJGM0ExMjA4OTZBNjAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeU1hYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGlj
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0VEMkI3ODIxNTFBNUU0NjAwM0FCQ0VGIC8q
IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTQxN0VG
MTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRjUwMTIyMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0Y1MDFCNDEyM0VGNjAyMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKQEAgLTQ5MjEsNiArNDkzNCw3IEBACiAJCQkJMzc2MDg4MjIxNTA0
MTRGNzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3
OTQ4NDAzMTUwQzM1MDYwMEU1MkNFOSAvKiBXZWJSZW5kZXJMYXllci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzNzk0ODQwODE1MEM0Qjk3MDBFNTJDRTkgLyogV0tSZW5kZXJMYXllci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlDRTYyNUI2RTE1MUI2RjQ4MDA4OUJDRDggLyogRGljdGF0aW9uQWx0
ZXJuYXRpdmVDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApp
bmRleCA3OGVhOGRiZmVlMTRmYzc3ZjA2NjY1MjA4ZTZmNTllMWIwNTkwMTMyLi4yNWMwZWVkNGI1
NmU4Y2JhODNlMDcxMDYwYWFmMDJhYjQ4YWE5YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAg
LTE0MywxMSArMTQzLDE2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0
aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxDaGVja2VyKiwgY29uc3QgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdCYpIE9WRVJSSURFOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0SW5mbzo6QWx0ZXJuYXRpdmVU
eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlw
ZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZykgT1ZFUlJJREU7CiAjZW5kaWYKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZF
UykKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3RhdGlv
bkFsdGVybmF0aXZlVUkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRGljdGF0
aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIE9WRVJSSURFOworI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93VW5pY29k
ZU1lbnUoKSBPVkVSUklERTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFj
Lm1tCmluZGV4IDUyM2NiZGY3MjA2M2I0ZDFkNzk0YzgxYWM1MGVmMTYwNGIxZTIyYmYuLjY1YThk
OGMxODhiMWIyYTRhMjgyMDZiNDAwY2E4YWUzNGJlMWVkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJF
ZGl0b3JDbGllbnRNYWMubW0KQEAgLTIzOSwxNyArMjM5LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwg
V2ViQ29yCiB9CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lk
IFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRl
cm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dEluZm86OkFsdGVybmF0aXZlVHlw
ZSB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRT
dHJpbmdzKQogewogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93
Q29ycmVjdGlvblBhbmVsKHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFj
ZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5n
cykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZv
ckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQogewogICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbikpOwog
fQogCi1TdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmlu
ZyBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQogewogICAgIFN0cmluZyBy
ZXN1bHQ7CiAgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb24pLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbjo6UmVwbHkocmVzdWx0KSk7CkBAIC0yNjIsNCArMjYy
LDIxIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
KEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SCiB9CiAjZW5kaWYKIAorI2lmIFVTRShESUNU
QVRJT05fQUxURVJOQVRJVkVTKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dEaWN0YXRpb25B
bHRlcm5hdGl2ZVVJKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwg
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6U2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoYm91bmRpbmdCb3hPZkRp
Y3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCkpOworfQorICAgIAordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmRpc21pc3NEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKCkKK3sKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlzbWlzc0RpY3RhdGlvbkFsdGVybmF0aXZlVUko
KSk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNv
bnRleHQpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5NmE1ZTFhZGJlNDQ3
YmE5NjVkNjlkOTQ5ZmU0MzI1ZGZmNzY2MmIwLi5mYjBiYTZjNWIxMTNkNTc1MzE4ZjEyMzk0M2Yx
ZWQxZTcyNGQ5ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC0zMDIwLDEyICszMDIwLDEyIEBAIGJvb2wgV2ViUGFnZTo6Y2FuSGFuZGxl
UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB9CiAKICNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZv
aWQgV2ViUGFnZTo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVz
dWx0KQordm9pZCBXZWJQYWdlOjpoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChjb25zdCBT
dHJpbmcmIHRleHQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwotICAgIGZyYW1lLT5lZGl0b3IoKS0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KHJl
c3VsdCk7CisgICAgZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4
dCh0ZXh0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCA2YTg1MmQ0ZTMwOTUyYTQ2MzE0YmE0Y2U3NTJlMmYwZmFjMTc5NmUw
Li5iYmUyNDVhYTM3YWM3NDEyM2E5MmU5ZDU4ODMwY2YzZjYyN2ZiYjY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNp
bmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgi
CiAjaW5jbHVkZSAiV2ViVW5kb1N0ZXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFs
dGVybmF0aXZlTG9jYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KQEAgLTQwMyw3ICs0MDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG91bGREZWxheVdp
bmRvd09yZGVyaW5nRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYgcmVz
dWx0KTsKICAgICB2b2lkIGFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVudE51bWJlciwgY29uc3Qg
V2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYgcmVzdWx0KTsKICAgICBib29sIHBlcmZvcm1O
b25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsKLQorICAgIHZvaWQg
aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zLCBib29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwogI2Vs
aWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgY29tcG9zaXRpb25TdHJpbmcpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgV1RG
OjpTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90IGN1cnNvclBvc2l0aW9u
KTsKQEAgLTQ4NSw5ICs0ODYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVubWFya0FsbE1pc3Nw
ZWxsaW5ncygpOwogICAgIHZvaWQgdW5tYXJrQWxsQmFkR3JhbW1hcigpOwotCiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdm9pZCBo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBoYW5k
bGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCiAgICAg
Ly8gRm9yIHRlc3RpbmcgcHVycG9zZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggODk5ZTc1OWM2NGY3NmFhYWJl
OGQ0YmU5MGJjN2JjZTdhODVjZjU2NS4uZGU2ZTc1ZWViYmU0YzQzMzA4NmM2ZjA3NDY3M2M2NTgz
YWM0MjA4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTI0MSw2ICsyNDEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIHsKICAgICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6OkVkaXRv
clN0YXRlIG5ld1N0YXRlKQogICAgIFNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChXZWJL
aXQ6OldlYk1vdXNlRXZlbnQgZXZlbnQpIC0+IChib29sIHJlc3VsdCkKICAgICBBY2NlcHRzRmly
c3RNb3VzZShpbnQgZXZlbnROdW1iZXIsIFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4g
KGJvb2wgcmVzdWx0KQorICAgIEluc2VydERpY3RhdGVkVGV4dChXVEY6OlN0cmluZyB0ZXh0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VF
bmQsIFdURjo6VmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb24+IGRp
Y3RhdGlvbkFsdGVybmF0aXZlcykgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpFZGl0b3JTdGF0
ZSBuZXdTdGF0ZSkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTikKICAgICAvLyBGSVhNRTogVW5p
Znkgd2l0aCBNYWMgY291bnRlcnBhcnRzLgpAQCAtMjU4LDYgKzI1OSw2IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBIYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoU3Ry
aW5nIHJlc3VsdCkKKyAgICBIYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChTdHJpbmcgdGV4
dCkKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGVjYTUyM2QxZmNiZWZmOTY3ZjBhYjBkMjM0ZGM3MGRh
ZWQyZjM4NWQuLjYyMTA5YTk0Njg3ODE3OGRjYzE0NGZkMDYxZGNkMGE5NWU5MGE2OGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KQEAgLTI4Niw2ICsyODYsMjEgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW4KICAgICBuZXdT
dGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6aW5zZXJ0RGljdGF0ZWRU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbj4mIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCBi
b29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCit7CisgICAgRnJhbWUqIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
CisgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2VTdGFydCAhPSBOU05vdEZvdW5kKSB7CisgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IGNvbnZlcnRUb1JhbmdlKGZyYW1lLCBO
U01ha2VSYW5nZShyZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQgLSBy
ZXBsYWNlbWVudFJhbmdlU3RhcnQpKTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCisg
ICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAg
fQorCisgICAgQVNTRVJUKCFmcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpOworICAg
IGhhbmRsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCBkaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRl
ZCk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorCiB2b2lkIFdlYlBhZ2U6Omdl
dE1hcmtlZFJhbmdlKHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKIHsKICAg
ICBsb2NhdGlvbiA9IE5TTm90Rm91bmQ7Cg==
</data>
<flag name="commit-queue"
          id="139313"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>