<?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>125239</bug_id>
          
          <creation_ts>2013-12-04 11:57:59 -0800</creation_ts>
          <short_desc>[iOS] Upstream WebCore/rendering changes</short_desc>
          <delta_ts>2013-12-23 15:22:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>125191</dependson>
    
    <dependson>125193</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>956509</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-04 11:57:59 -0800</bug_when>
    <thetext>Upstream iOS-specific changes to WebCore/rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956581</commentid>
    <comment_count>1</comment_count>
      <attachid>218443</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-04 13:47:23 -0800</bug_when>
    <thetext>Created attachment 218443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956583</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-04 13:49:55 -0800</bug_when>
    <thetext>Attachment 218443 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/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/rendering/InlineBox.cpp&apos;, u&apos;Source/WebCore/rendering/InlineBox.h&apos;, u&apos;Source/WebCore/rendering/InlineTextBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBox.h&apos;, u&apos;Source/WebCore/rendering/RenderBoxModelObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderButton.cpp&apos;, u&apos;Source/WebCore/rendering/RenderElement.cpp&apos;, u&apos;Source/WebCore/rendering/RenderEmbeddedObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFileUploadControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFrameSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderIFrame.h&apos;, u&apos;Source/WebCore/rendering/RenderImage.cpp&apos;, u&apos;Source/WebCore/rendering/RenderImage.h&apos;, u&apos;Source/WebCore/rendering/RenderInline.cpp&apos;, u&apos;Source/WebCore/rendering/RenderInline.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerFilterInfo.h&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.h&apos;, u&apos;Source/WebCore/rendering/RenderObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderObject.h&apos;, u&apos;Source/WebCore/rendering/RenderScrollbar.h&apos;, u&apos;Source/WebCore/rendering/RenderSearchField.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.h&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.h&apos;, u&apos;Source/WebCore/rendering/RenderTextControlMultiLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControlSingleLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextLineBoxes.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTheme.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTheme.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeIOS.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeIOS.mm&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderVideo.cpp&apos;, u&apos;Source/WebCore/rendering/RenderView.cpp&apos;, u&apos;Source/WebCore/rendering/RenderView.h&apos;, u&apos;Source/WebCore/rendering/RenderWidget.cpp&apos;, u&apos;Source/WebCore/rendering/RootInlineBox.cpp&apos;, u&apos;Source/WebCore/rendering/break_lines.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/rendering/RenderLayer.cpp:185:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayer.cpp:2725:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayer.cpp:2725:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:89:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:90:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:92:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:93:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:94:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:94:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:95:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:95:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:96:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderImage.cpp:96:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderView.cpp:374:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderMenuList.cpp:81:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2937:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2937:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2940:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2940:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2942:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2942:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2945:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2945:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:2947:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:432:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:433:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:435:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:437:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:446:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:447:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderText.cpp:372:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderFileUploadControl.cpp:106:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderFileUploadControl.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderFileUploadControl.cpp:109:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 36 in 52 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>956586</commentid>
    <comment_count>3</comment_count>
      <attachid>218443</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-04 13:52:39 -0800</bug_when>
    <thetext>Comment on attachment 218443
Patch

Attachment 218443 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/39938327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956593</commentid>
    <comment_count>4</comment_count>
      <attachid>218443</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-04 14:01:05 -0800</bug_when>
    <thetext>Comment on attachment 218443
Patch

Attachment 218443 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/40238044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956603</commentid>
    <comment_count>5</comment_count>
      <attachid>218443</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-12-04 14:18:41 -0800</bug_when>
    <thetext>Comment on attachment 218443
Patch

Attachment 218443 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/39738095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956606</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-04 14:21:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; ERROR: Source/WebCore/rendering/RenderLayer.cpp:185:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayer.cpp:2725:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayer.cpp:2725:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]

See bug #125254.

&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:89:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:90:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:92:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:93:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:94:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:94:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:95:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:95:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:96:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderImage.cpp:96:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]

See bug #125246. In particular, the first error (RenderImage.cpp:89) is covered by this bug. I suspect the subsequent warnings are fallout from this bug.

&gt; ERROR: Source/WebCore/rendering/RenderView.cpp:374:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]

See bug #125246.

&gt; ERROR: Source/WebCore/rendering/RenderMenuList.cpp:81:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]

See bug #125254.

&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2937:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2937:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2940:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2940:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2942:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2942:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2945:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2945:  Comma should be at the beggining of the line in a member initialization list.  [whitespace/init] [4]
&gt; ERROR: Source/WebCore/rendering/RenderBox.cpp:2947:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]

See bug #125246.

&gt; ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:432:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:433:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:435:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:437:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:446:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderLayerCompositor.cpp:447:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]

See bug #125254.

&gt; ERROR: Source/WebCore/rendering/RenderText.cpp:372:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]

See bug #125246.

&gt; ERROR: Source/WebCore/rendering/RenderFileUploadControl.cpp:106:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
&gt; ERROR: Source/WebCore/rendering/RenderFileUploadControl.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]

See bug #125254.

&gt; ERROR: Source/WebCore/rendering/RenderFileUploadControl.cpp:109:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]

See bug #125246.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956610</commentid>
    <comment_count>7</comment_count>
      <attachid>218443</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-04 14:22:18 -0800</bug_when>
    <thetext>Comment on attachment 218443
Patch

Attachment 218443 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/39738092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956636</commentid>
    <comment_count>8</comment_count>
      <attachid>218458</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-04 14:53:08 -0800</bug_when>
    <thetext>Created attachment 218458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956640</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-04 14:56:21 -0800</bug_when>
    <thetext>Attachment 218458 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/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/rendering/InlineBox.cpp&apos;, u&apos;Source/WebCore/rendering/InlineBox.h&apos;, u&apos;Source/WebCore/rendering/InlineTextBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBox.h&apos;, u&apos;Source/WebCore/rendering/RenderBoxModelObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderButton.cpp&apos;, u&apos;Source/WebCore/rendering/RenderElement.cpp&apos;, u&apos;Source/WebCore/rendering/RenderEmbeddedObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFileUploadControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFrameSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderIFrame.h&apos;, u&apos;Source/WebCore/rendering/RenderImage.cpp&apos;, u&apos;Source/WebCore/rendering/RenderImage.h&apos;, u&apos;Source/WebCore/rendering/RenderInline.cpp&apos;, u&apos;Source/WebCore/rendering/RenderInline.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerFilterInfo.h&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.h&apos;, u&apos;Source/WebCore/rendering/RenderObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderObject.h&apos;, u&apos;Source/WebCore/rendering/RenderScrollbar.h&apos;, u&apos;Source/WebCore/rendering/RenderSearchField.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.h&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.h&apos;, u&apos;Source/WebCore/rendering/RenderTextControlMultiLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControlSingleLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextLineBoxes.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTheme.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTheme.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeIOS.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeIOS.mm&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderVideo.cpp&apos;, u&apos;Source/WebCore/rendering/RenderView.cpp&apos;, u&apos;Source/WebCore/rendering/RenderView.h&apos;, u&apos;Source/WebCore/rendering/RenderWidget.cpp&apos;, u&apos;Source/WebCore/rendering/RootInlineBox.cpp&apos;, u&apos;Source/WebCore/rendering/break_lines.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/rendering/RenderLayer.cpp:185:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderMenuList.cpp:81:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
Total errors found: 2 in 52 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>956699</commentid>
    <comment_count>10</comment_count>
      <attachid>218458</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-04 16:52:53 -0800</bug_when>
    <thetext>Comment on attachment 218458
Patch

Attachment 218458 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/42728037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956750</commentid>
    <comment_count>11</comment_count>
      <attachid>218458</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-04 18:52:48 -0800</bug_when>
    <thetext>Comment on attachment 218458
Patch

Attachment 218458 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/43328073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957279</commentid>
    <comment_count>12</comment_count>
      <attachid>218603</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-06 10:08:05 -0800</bug_when>
    <thetext>Created attachment 218603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957280</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-06 10:09:56 -0800</bug_when>
    <thetext>Attachment 218603 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/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/rendering/InlineBox.cpp&apos;, u&apos;Source/WebCore/rendering/InlineBox.h&apos;, u&apos;Source/WebCore/rendering/InlineTextBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBox.h&apos;, u&apos;Source/WebCore/rendering/RenderBoxModelObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderButton.cpp&apos;, u&apos;Source/WebCore/rendering/RenderElement.cpp&apos;, u&apos;Source/WebCore/rendering/RenderEmbeddedObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFileUploadControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFrameSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderIFrame.h&apos;, u&apos;Source/WebCore/rendering/RenderImage.cpp&apos;, u&apos;Source/WebCore/rendering/RenderImage.h&apos;, u&apos;Source/WebCore/rendering/RenderInline.cpp&apos;, u&apos;Source/WebCore/rendering/RenderInline.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerFilterInfo.h&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.h&apos;, u&apos;Source/WebCore/rendering/RenderObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderObject.h&apos;, u&apos;Source/WebCore/rendering/RenderScrollbar.h&apos;, u&apos;Source/WebCore/rendering/RenderSearchField.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.h&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.h&apos;, u&apos;Source/WebCore/rendering/RenderTextControlMultiLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControlSingleLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextLineBoxes.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTheme.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTheme.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeIOS.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeIOS.mm&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.h&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderVideo.cpp&apos;, u&apos;Source/WebCore/rendering/RenderView.cpp&apos;, u&apos;Source/WebCore/rendering/RenderView.h&apos;, u&apos;Source/WebCore/rendering/RenderWidget.cpp&apos;, u&apos;Source/WebCore/rendering/RootInlineBox.cpp&apos;, u&apos;Source/WebCore/rendering/break_lines.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/rendering/RenderLayer.cpp:185:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/rendering/RenderMenuList.cpp:81:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
Total errors found: 2 in 52 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>957303</commentid>
    <comment_count>14</comment_count>
      <attachid>218603</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-12-06 10:54:43 -0800</bug_when>
    <thetext>Comment on attachment 218603
Patch

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

Pleaes refresh from iOS sources.

I think longer term we should replace #if PLATFORM(IOS) with functional macros, like #if USE(TOUCH_OVERFLOW_SCROLLING) or whatever.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1018
&gt; +    float documentScale = renderer().frame().documentScale();

This is stale code.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3569
&gt; +    // On the phone we want to constrain VisiblePositions to the editable region closest to the input position, so

&quot;On the phone&quot; -&gt; &quot;On iOS&quot;

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2681
&gt; +#if PLATFORM(IOS)
&gt; +float RenderLayerCompositor::minimumDocumentScale() const
&gt; +{
&gt; +    return m_renderView.frameView().frame().minimumDocumentScale();
&gt; +}
&gt; +
&gt; +bool RenderLayerCompositor::allowCompositingLayerVisualDegradation() const
&gt; +{
&gt; +    Page* page = m_renderView.frameView().frame().page();
&gt; +    return !page || page-&gt;settings().allowCompositingLayerVisualDegradation();
&gt; +}
&gt; +#endif
&gt; +
&gt;  float RenderLayerCompositor::deviceScaleFactor() const
&gt;  {
&gt; +#if PLATFORM(IOS)
&gt; +    return m_renderView.frameView().frame().deviceScaleFactor();
&gt; +#else
&gt;      Page* page = this-&gt;page();
&gt;      return page ? page-&gt;deviceScaleFactor() : 1;
&gt; +#endif
&gt;  }
&gt;  
&gt;  float RenderLayerCompositor::pageScaleFactor() const
&gt;  {
&gt; +#if PLATFORM(IOS)
&gt; +    return m_renderView.frameView().frame().documentScale();
&gt; +#else
&gt;      Page* page = this-&gt;page();
&gt;      return page ? page-&gt;pageScaleFactor() : 1;
&gt; +#endif
&gt;  }

Your patch is stale here.

&gt; Source/WebCore/rendering/RenderMenuList.cpp:52
&gt; +#include &quot;LocalizedStrings.h&quot;

Is this necessary?

&gt; Source/WebCore/rendering/RenderObject.cpp:1156
&gt; +// which are annotated with additional state which helps the iPhone draw selections in its unique way.

the iPhone -&gt; iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957322</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-06 11:30:39 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 218603 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218603&amp;action=review
&gt; 
&gt; Pleaes refresh from iOS sources.
&gt; 
&gt; I think longer term we should replace #if PLATFORM(IOS) with functional macros, like #if USE(TOUCH_OVERFLOW_SCROLLING) or whatever.
&gt; 

I agree. I&apos;ll look to fix this up and/or file follow-up bugs as applicable.

&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:1018
&gt; &gt; +    float documentScale = renderer().frame().documentScale();
&gt; 
&gt; This is stale code.

Will fix.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:3569
&gt; &gt; +    // On the phone we want to constrain VisiblePositions to the editable region closest to the input position, so
&gt; 
&gt; &quot;On the phone&quot; -&gt; &quot;On iOS&quot;
&gt; 

Will fix.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2681
&gt; &gt; +#if PLATFORM(IOS)
&gt; &gt; +float RenderLayerCompositor::minimumDocumentScale() const
&gt; &gt; +{
&gt; &gt; +    return m_renderView.frameView().frame().minimumDocumentScale();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool RenderLayerCompositor::allowCompositingLayerVisualDegradation() const
&gt; &gt; +{
&gt; &gt; +    Page* page = m_renderView.frameView().frame().page();
&gt; &gt; +    return !page || page-&gt;settings().allowCompositingLayerVisualDegradation();
&gt; &gt; +}
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt;  float RenderLayerCompositor::deviceScaleFactor() const
&gt; &gt;  {
&gt; &gt; +#if PLATFORM(IOS)
&gt; &gt; +    return m_renderView.frameView().frame().deviceScaleFactor();
&gt; &gt; +#else
&gt; &gt;      Page* page = this-&gt;page();
&gt; &gt;      return page ? page-&gt;deviceScaleFactor() : 1;
&gt; &gt; +#endif
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  float RenderLayerCompositor::pageScaleFactor() const
&gt; &gt;  {
&gt; &gt; +#if PLATFORM(IOS)
&gt; &gt; +    return m_renderView.frameView().frame().documentScale();
&gt; &gt; +#else
&gt; &gt;      Page* page = this-&gt;page();
&gt; &gt;      return page ? page-&gt;pageScaleFactor() : 1;
&gt; &gt; +#endif
&gt; &gt;  }
&gt; 
&gt; Your patch is stale here.

Will fix.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderMenuList.cpp:52
&gt; &gt; +#include &quot;LocalizedStrings.h&quot;
&gt; 
&gt; Is this necessary?
&gt; 

Yes, it&apos;s necessary as we call htmlSelectMultipleItems() (defined in LocalizedStrings.h) in RenderMenuList::setTextFromOption().

&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1156
&gt; &gt; +// which are annotated with additional state which helps the iPhone draw selections in its unique way.
&gt; 
&gt; the iPhone -&gt; iOS

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957331</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-06 11:56:54 -0800</bug_when>
    <thetext>Committed r160236: &lt;http://trac.webkit.org/changeset/160236&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962615</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-23 15:22:32 -0800</bug_when>
    <thetext>Committed iOS build fix in &lt;http://trac.webkit.org/changeset/161028&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218443</attachid>
            <date>2013-12-04 13:47:23 -0800</date>
            <delta_ts>2013-12-04 14:53:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125239-20131204134723.patch</filename>
            <type>text/plain</type>
            <size>226581</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIzMmI3NzVlN2ZjYWZl
ZGZkZmViNDhkYTA1YWY1YzQ4NjIzNzc4Yi4uZjg1MzM4YTM3Mzk1NmNiYzZjNzY1NmJjYzE1ODBk
NDYxMmNiYTIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1MiBAQAorMjAxMy0xMi0wNCAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0g
V2ViQ29yZS9yZW5kZXJpbmcgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVCb3g6OnByZXZpb3VzT25MaW5lRXhpc3RzKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KTogTW9kaWZpZWQgdG8gcXVlcnkgUmVuZGVyU3R5bGUKKyAgICAgICAgb24gaU9TIGZvciB0aGUg
Y29tcG9zaXRpb24gZmlsbCBjb2xvci4gQWRkZWQgRklYTUUgdG8gbWFrZSB0aGlzIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREZWNv
cmF0aW9uKTogQWRkZWQgaU9TLXNwZWNpZmljIGRlY29yYXRpb24gY29kZS4KKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVTdHlsZUZvck1hcmtlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4g
QWxzbywgYWRkZWQKKyAgICAgICAgRklYTUUgdG8gbWFrZSB0aGlzIGNvZGUgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOiBDaGFuZ2Vk
IGFjY2VzcyBjb250cm9sIG9mIGxvZ2ljYWx7TGVmdCwgUmlnaHR9U2VsZWN0aW9uT2Zmc2V0KCkK
KyAgICAgICAgZnJvbSBwcml2YXRlIHRvIHByb3RlY3RlZCBzbyB0aGF0IHRoZXNlIG1ldGhvZHMg
Y2FuIGJlIHVzZWQgZnJvbSBSZW5kZXJJbWFnZTo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKCkuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmJvcmRlclJhZGlpKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZC4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS82MjA5NzYzPgorICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4gCisgICAgICAgIChXZWJDb3JlOjpjdXN0b21Db250YWluaW5nQmxv
Y2tXaWR0aCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJD
b3JlOjpjdXN0b21Db250YWluaW5nQmxvY2tIZWlnaHQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFU
Rk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNv
cmU6OmN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3VzdG9tQ29udGFpbmluZ0Jsb2Nr
QXZhaWxhYmxlTG9naWNhbEhlaWdodCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUyku
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2lu
Zyk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlOyBjYWxscyBjdXN0b21Db250YWluaW5nQmxvY2tB
dmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgY29kZTsgY2FsbHMgY3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoKCkuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQ
b3NpdGlvbmVkKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGU7IGNhbGxzIGN1c3RvbUNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxIZWlnaHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpzdGlja3lQb3NpdGlvbk9mZnNldCk6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZpeGVk
UG9zaXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZpZXdw
b3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6bGF5b3V0
KTogQWRkZWQ7IGlPUy1zcGVjaWZpYy4gSW5jbHVkZXMgRklYTUUgY29tbWVudC4KKyAgICAgICAg
U2VlIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVEaWRDaGFuZ2UpOiBNb2RpZmllZCB0byBv
bmx5IGNhbGwgYXJlQ3Vyc29yc0VxdWFsKCkgYW5kCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2No
ZWR1bGVDdXJzb3JVcGRhdGUoKSBvbiBhIG5vbi1pT1MgcG9ydC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOiBBZGRlZCBpT1Mtc3Bl
Y2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbik6IFRoaXMgbWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBs
ZW1lbnRhdGlvbiBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uV2l0aERlc2NyaXB0aW9uKTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5vZGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVU
ZXh0VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKTogRGl0
dG87IEFsc28gYWRkZWQgRklYTUUgY29tbWVudCBhcyB0aGlzIGNvZGUgbWF5IG5vdAorICAgICAg
ICBiZSBzcGVjaWZpYyB0byBpT1MuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5o
OiBBZGRlZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZCB0byBSZW5kZXJPYmplY3Q6OnJlbmRlck5h
bWUoKS4gQWRkZWQKKyAgICAgICAgRklYTUUgY29tbWVudCB0byBkZXRlcm1pbmUgd2hldGhlciB0
aGlzIHdvcmthcm91bmQgaXMgc3RpbGwgYXBwbGljYWJsZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNvbGxlY3RT
ZWxlY3Rpb25SZWN0cyk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRBcmVhRWxlbWVudEZvY3VzUmluZyk6IFRoaXMg
bWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzRm9yU2Vs
ZWN0aW9uKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6IEFkZGVkIGlP
Uy1zcGVjaWZpYyBtZW1iZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6flJlbmRlckxheWVyKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6d2lsbEJlRGVzdHJveWVkKTogQWRkZWQ7IGlPUy1zcGVj
aWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNBY2NlbGVyYXRlZFRvdWNo
U2Nyb2xsaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFuZGxl
VG91Y2hFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVOZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmcpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSBhcyB3ZSB1c2Ug
VUlLaXQKKyAgICAgICAgdG8gY29tcG9zaXRlIG91ciBzY3JvbGwgYmFycy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOiBNb2RpZmll
ZCB0byBtYWtlIHVzZSBvZiB0aGUgcGFzc2VkIFN0eWxlRGlmZmVyZW5jZSBvbiBpT1MuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0KTogQWRkZWQ7IGlP
Uy1zcGVjaWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9s
bCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KTogQWRkIGlPUy1zcGVjaWZpYyB3b3JrYXJvdW5kIHdpdGggRklYTUUu
IFNlZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKTog
QWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFwaGljc0xh
eWVyKTogTW9kaWZpZWQgdG8gbm90IGFwcGx5IHBhZ2Ugc2NhbGUgb24gaU9TCisgICAgICAgIGFz
IHdlIGFwcGx5IGEgcGFnZSBzY2FsZSBhdCBhIGRpZmZlcmVudCB0aW1lIGluIHRoZSBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpsYXllcldpbGxCZURlc3Ryb3ll
ZCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJDb3JlOjps
YXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgdmFyaWFudCB3aXRoIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNob3VsZENsaXBDb21wb3NpdGVkQm91bmRzKTogQWRkZWQgaU9TLXNwZWNp
ZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZWdpc3RlclNjcm9sbGluZ0xheWVy
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVT
Y3JvbGxpbmdMYXllcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCk6IENhbGwgUmVuZGVyTGF5ZXI6Omhhc0JveERl
Y29yYXRpb25zT3JCYWNrZ3JvdW5kKCkKKyAgICAgICAgd2hlbiBidWlsZGluZyBvbiBpT1MgU2lt
dWxhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYXJlbnRGb3JT
dWJsYXllcnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSBhbmQgRklYTUUgY29tbWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRzSW50b1dpbmRvdyk6IE9w
dC1pbnRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGNvZGUgcGF0aC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdCk6IEFkZGVk
IGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludEludG9MYXllcik6IENvbXBpbGUtb3V0IEFTU0VSVF9OT1RfUkVBQ0hFRCBmb3IgaU9T
IGFuZCBhZGRlZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjptaW5pbXVtRG9jdW1lbnRTY2FsZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JN
KElPUykuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFsbG93Q29tcG9z
aXRpbmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0o
SU9TKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
aHJvbWVDbGllbnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMp
OiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhh
c0Rpc3BsYXlOb25lKTogQWRkZWQ7IGlPUy1zcGVjaWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDdXN0b21MYXllcnNBZnRlckZsdXNoKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNoQ2hh
bmdlc0ZvckxheWVyKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZENoYW5nZVZpc2libGVSZWN0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCk6
IERvbid0IGFwcGx5IHBhZ2Ugc2NhbGUgZmFjdG9yIG9uIGlPUy4gV2UgYXBwbHkKKyAgICAgICAg
dGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGF0IGEgZGlmZmVyZW50IHRpbWUgaW4gdGhlIGNvZGUuIEFs
c28sIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6IEFkZGVkIGlPUy1zcGVj
aWZpYyB3b3JrYXJvdW5kLgorICAgICAgICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzgzNDgzMzc+IGZv
ciBtb3JlIGRldGFpbHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNldElzSW5XaW5kb3cpOiBVc2Ugbm9uLU1hYyBjb2RlIHBhdGggZm9yIGlPUy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWxsb3dzSW5kZXBlbmRlbnRseUNvbXBv
c2l0ZWRGcmFtZXMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzT3duQmFj
a2luZ1N0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlYXNvbnNGb3JDb21wb3NpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKTogT3B0
LWludG8gY2FsbGluZworICAgICAgICBBbmltYXRpb25Db250cm9sbGVyOjppc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKCkgb24gaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsaW5nKTogQWRkZWQ7IGd1YXJk
ZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OmlzU3RpY2t5SW5BY2NlbGVy
YXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbik6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZpeGVkUG9z
aXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZpZXdwb3J0
Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6bWluaW11bURvY3VtZW50U2NhbGUpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjphbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6IEFk
ZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpwYWdlU2NhbGVGYWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29udGVudHNTY2FsZU11bHRpcGxpZXJGb3JOZXdUaWxlcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290
TGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUZpeGVkVmlld3BvcnRDb25zdHJhaW50cyk6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZp
eGVkUG9zaXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZp
ZXdwb3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0
ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcik6IFRoaXMgbWV0aG9kIGhhcyBhbiBl
bXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TCisgICAgICAgIGFzIHdlIGJhdGNoIHVwZGF0ZSB2
aWV3cG9ydC1jb25zdHJhaW5lZCBsYXllcnMgaW4gdGhlIGlPUy1zcGVjaWZpYyBtZXRob2QsIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgpLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycyk6IEFkZGVkOyBn
dWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVucmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsU2Ny
b2xsaW5nTGF5ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3Jv
bGxpbmdMYXllclJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c3RhcnRJbml0aWFsTGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oOiBBZGRlZCBpT1Mtc3BlY2lmaWMgQ2xh
bmcgd29ya2Fyb3VuZCB0byBpZ25vcmUKKyAgICAgICAgYW4gdW51c2VkIHByaXZhdGUgZmllbGQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNlbGVjdGVkT3B0aW9uQ291bnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1Mp
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KTogT24g
aU9TIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwSXNWaXNpYmxl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6On5SZW5kZXJNZW51TGlzdCk6IE9u
IGlPUyB3ZSBkb24ndCBtYWtlIHVzZSBvZiBSZW5kZXJNZW51TGlzdDo6bV9wb3B1cC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKTogQWRkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21FbGVtZW50
KTogT24gaU9TIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwLgor
ICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tT3B0aW9uKTogQWRkIGlPUy1zcGVj
aWZpYyBjb2RlLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCk6IERlZmluZSBS
ZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkgdG8gQVNTRVJUX05PVF9SRUFDSEVEKCkgb24gaU9T
IGFzCisgICAgICAgIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVw
LgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmhpZGVQb3B1cCk6IFRoaXMgbWV0aG9kIGhhcyBh
biBlbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TIGFzIHdlIGRvbid0IG1ha2UgdXNlCisgICAg
ICAgIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6
OnBvcHVwRGlkSGlkZSk6IFRoaXMgbWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBm
b3IgaU9TIGFzIHdlIGRvbid0IG1ha2UgdXNlCisgICAgICAgIG9mIFJlbmRlck1lbnVMaXN0Ojpt
X3BvcHVwSXNWaXNpYmxlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojpjb2x1bW5OdW1iZXJGb3JPZmZzZXQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLiBBbHNvLCBhZGRlZCBhIEZJWE1FIGNvbW1lbnQgdG8KKyAgICAgICAgbWFr
ZSB0aGlzIGZ1bmN0aW9uIHJldHVybiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGluc3RlYWQgb2YgYSBz
aWduZWQgaW50ZWdlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNl
bGVjdGlvblJlY3RzKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZGVzdHJveSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppbm5lckxpbmVIZWlnaHQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKTogQWRk
ZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
OiBDaGFuZ2UgdGhlIGFjY2VzcyBjb250cm9sIG9mIFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JC
b3hTaWRlKCkgZnJvbSBwcm90ZWN0ZWQgdG8KKyAgICAgICAgcHVibGljIHNvIHRoYXQgaXQgY2Fu
IGJlIHVzZWQgZnJvbSBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSgp
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVF1YWRzRm9yU2VsZWN0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmg6IENoYW5nZSB0aGUg
YWNjZXNzIGNvbnRyb2wgb2YgUmVuZGVyU2Nyb2xsYmFyOjpnZXRTY3JvbGxiYXJQc2V1ZG9TdHls
ZSgpIGZyb20KKyAgICAgICAgcHJpdmF0ZSB0byBwdWJsaWMgc28gdGhhdCBpdCBjYW4gYmUgdXNl
ZCBmcm9tIHRoZSBpT1Mtc3BlY2lmaWMgc3RhdGljIGZ1bmN0aW9uLCBzY3JvbGxiYXJIYXNEaXNw
bGF5Tm9uZSwKKyAgICAgICAgZGVmaW5lZCBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVRleHQpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29k
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c2V0VGV4dEludGVy
bmFsKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y2FuU2Nyb2xsKTog
QWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjppbm5lckxpbmVIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmU6OmdldEF2Z0NoYXJXaWR0aCk6IENvbXBpbGUtb3V0IGNvZGUgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OmNyZWF0ZUlubmVyVGV4dFN0eWxlKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lk
dGgpOiBDb21waWxlLW91dCBjb2RlIHdoZW4gYnVpbGRpbmcgZm9yIGlPUy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2lj
YWxXaWR0aCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6cG9zaXRpb25Gb3JQ
b2ludCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJP
bmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0
aW9ucyk6IE1vZGlmaWVkIHRvIGNhbGwgdGhlIGNvbnRyb2wtc3BlY2lmaWMgcGFpbnQqRGVjb3Jh
dGlvbnMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25z
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGRE
ZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
VGV4dEFyZWFEZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBhaW50TWVudUxpc3REZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50RmlsZVVwbG9hZEljb25E
ZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oOiBEb24ndCBjb21waWxlIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKTogQ29tcGlsZS1vdXQgY29kZSB3
aGVuIGJ1aWxkaW5nIGZvciBpT1MuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXZhaWxhYmxlTG9naWNhbEhlaWdodCk6
IEFkZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZC4gU2VlIDxyZGFyOi8vcHJvYmxlbS83MTY2ODA4
Pi4KKyAgICAgICAgKFdlYkNvcmU6OmZpeGVkUG9zaXRpb25PZmZzZXQpOiBBZGRlZDsgdXNlZCBp
biBpT1Mtc3BlY2lmaWMgY29kZSAoZS5nLiBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29udGFpbmVy
KCkpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bWFwTG9jYWxUb0NvbnRhaW5lcik6
IFVzZSBXZWJDb3JlOjpmaXhlZFBvc2l0aW9uT2Zmc2V0KCkgaW5zdGVhZCBvZiAKKyAgICAgICAg
RnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGaXhlZFBvc2l0aW9uSW5WaWV3cG9ydCk6IEFk
ZGVkOyB1c2VkIGluIFJlbmRlclZpZXc6Omhhc0N1c3RvbUZpeGVkUG9zaXRpb24oKS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6Omhhc0N1c3RvbUZpeGVkUG9zaXRpb24pOiBBZGRlZDsg
Z3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJXaWRnZXQ6OndpbGxCZURlc3Ryb3llZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBj
b2RlLgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3gpOiBEaXR0by4KKyAg
ICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwOiBPbmx5IGluY2x1ZGUgaGVhZGVyIDxD
b3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+IHdoZW4gYnVpbGRpbmcgZm9yIE1hYy4KKwogMjAx
My0xMi0wNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFsbG93IEltYWdlQnVmZmVyIHRvIHVzZSBhbiBJT1N1cmZhY2UgdGhhdCBpcyBsYXJnZXIg
dGhhbiBuZWNlc3NhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjZGM3N2I4NjFiNWNiMWMyNTIyMjdlODI5ZGE2Mzc1NDM5YThj
YjVhLi5iY2VmOTkxOGE1ZjkzZmY5MDRjYWVlMTkyNjliYjc5NzE5MTAzODcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDQw
LDYgKzU0NDAsOCBAQAogCQlDRTdCMkRCNTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRTdCMkRCMTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0U3
QjJEQjYxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIyMTU4NkFC
QUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi87IH07CiAJCUNFOTUy
MDhBMTgxMUI0NzUwMDdBNTM5MiAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2VlcGVySU9TLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM0Q0IxRDE2MUEx
MzEyMDBEMjE0REEgLyogV2ViU2FmZUluY3JlbWVudGFsU3dlZXBlcklPUy5oICovOyB9OworCQlG
RUQxM0Q1MjBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDUwMENFQTk0OTcwMEQ4OTQ2
NiAvKiBSZW5kZXJUaGVtZUlPUy5oICovOyB9OworCQlDNTVDN0JBMTE3MThBRkJBMDAxMzI3RTQg
LyogUmVuZGVyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTVDN0JBMDE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0g
Ki87IH07CiAJCUNFQ0FERkM2MTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUNB
REZDMjE1Mzc3OEZGMDBFMzcwNjggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmUuY3BwICovOyB9Owog
CQlDRUNBREZDNzE1Mzc3OEZGMDBFMzcwNjggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0FERkMzMTUzNzc4
RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFQ0FERkM4MTUzNzc4RkYwMEUzNzA2OCAv
KiBEaWN0YXRpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFQ0FERkM0MTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25Db21tYW5k
LmNwcCAqLzsgfTsKQEAgLTEyNTU4LDYgKzEyNTYwLDggQEAKIAkJQ0U3QjJEQjAxNTg2QUJBRDAw
OThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbTsg
cGF0aCA9IG1hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNFN0IyREIxMTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlLmg7IHBhdGggPSBtYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFN0IyREIyMTU4NkFCQUQwMDk4QjNGQSAv
KiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW07IHBhdGggPSBtYWMvVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RUQxM0Q1MDBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGhlbWVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzU1QzdCQTAxNzE4QUZCQTAwMTMyN0U0IC8qIFJlbmRlclRoZW1lSU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGhlbWVJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFQ0FERkMyMTUzNzc4RkYwMEUzNzA2
OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNFQ0FERkMzMTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUNBREZDNDE1Mzc3OEZGMDBFMzcw
NjggLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaWN0YXRpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxMjM5LDYgKzIxMjQzLDggQEAKIAkJCQk4NkZGODg1RjE1REUzQjgyMDBCRDZCMjggLyog
UmVuZGVyVGV4dFRyYWNrQ3VlLmggKi8sCiAJCQkJQkNFQTQ4NEEwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlclRoZW1lLmNwcCAqLywKIAkJCQlCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVyVGhlbWUuaCAqLywKKwkJCQlGRUQxM0Q1MDBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhl
bWVJT1MuaCAqLywKKwkJCQlDNTVDN0JBMDE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJ
T1MubW0gKi8sCiAJCQkJQkNFQTQ4NDgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
LmggKi8sCiAJCQkJQkNFQTQ4NDkwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLm1t
ICovLAogCQkJCTkzOTU1QTQyMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVlQXNUZXh0LmNw
cCAqLywKQEAgLTI0MzU4LDYgKzI0MzY0LDcgQEAKIAkJCQk0MzkwNDZERTEyREEyNUU4MDBBRjgw
QTIgLyogUmVuZGVyTWF0aE1MTWF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RTAxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzkwNDZFMjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MUm9vdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkVEMTNENTIwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJlbmRlclRoZW1lSU9TLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFNDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MUm93LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFNjEyREEyNUU4MDBBRjgwQTIgLyog
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4MzIyODUxODAx
M0VEODAwOTk5RTBDIC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovLApA
QCAtMjgyOTksNiArMjgzMDYsNyBAQAogCQkJCTk3NkQ2QzdCMTIyQjhBM0QwMDFGRDFGNyAvKiBX
ZWJLaXRCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTBCOTIzOTE1RjA4REM0
MDBFMTA5ODYgLyogV2ViS2l0Q1NTQXJyYXlGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyRThBRTMwMTZBNDhFMUMwMDZCQjNBQSAvKiBXZWJLaXRDU1NGaWx0ZXJSdWxlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUM1NUM3QkExMTcxOEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJU
aGVtZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMDYwMzZGMTQzMjdEMkUwMEFCRjRCQSAv
KiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTI4OEU3MjBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMjg4RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcApp
bmRleCA1MTFjNjk1ZTdkODk1ZDNkYjc4N2NhZDU5NTMxOWI5ODljZjA3NjY2Li4zNWQxN2RmM2Rm
OGM2Y2NmZGNjODE1ZTE4MjA5MjRhNDBmMWY0ZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmNwcApAQCAtMTkzLDYgKzE5MywxNSBAQCBib29sIElubGluZUJveDo6bmV4dE9u
TGluZUV4aXN0cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5leHRPbkxpbmVFeGlz
dHMoKTsKIH0KIAorYm9vbCBJbmxpbmVCb3g6OnByZXZpb3VzT25MaW5lRXhpc3RzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBy
ZXZPbkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHBhcmVudCgpLT5w
cmV2aW91c09uTGluZUV4aXN0cygpOworfQorCiBJbmxpbmVCb3gqIElubGluZUJveDo6bmV4dExl
YWZDaGlsZCgpIGNvbnN0CiB7CiAgICAgSW5saW5lQm94KiBsZWFmID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guaAppbmRleCBmNjUyNDE5ZGIwYjdlNjNkNDc4ZGFiNTZiMDNmNWQ0
YzRlMGY5MjQ1Li5hNmNlNWRlY2YwNjkwZjkxZDBlMjlmN2FlNjA1OWU2NzRmMzg2NDQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCkBAIC0xMzEsNiArMTMxLDcgQEAgcHVibGlj
OgogICAgICAgICBtX3ByZXYgPSBwcmV2OwogICAgIH0KICAgICBib29sIG5leHRPbkxpbmVFeGlz
dHMoKSBjb25zdDsKKyAgICBib29sIHByZXZpb3VzT25MaW5lRXhpc3RzKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNMZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGEwOThmMzVhMWRh
NmEwNDY5ODE3NmU1OTkxZThlNjRlMTRiOTA5MDcuLjJjMzgxZTdkOWVhMjJlNGNiYmI5YzZhOThj
ODQ0MjJlNGIxZDM1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKQEAgLTcxNiw3ICs3MTYsMTMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBv
c2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEYKIAogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNvbG9yIHN0aWxsIGFwcGxpY2Fi
bGUgYXMgb2YgTWF2ZXJpY2tzPyBmb3Igbm9uLU1hYyBwb3J0cz8gV2Ugc2hvdWxkCisgICAgLy8g
YmUgYWJsZSB0byBtb3ZlIHRoaXMgY29sb3IgaW5mb3JtYXRpb24gdG8gUmVuZGVyU3R5bGUuCiAg
ICAgQ29sb3IgYyA9IENvbG9yKDIyNSwgMjIxLCA4NSk7CisjZWxzZQorICAgIENvbG9yIGMgPSBz
dHlsZS5jb21wb3NpdGlvbkZpbGxDb2xvcigpOworI2VuZGlmCiAgICAgCiAgICAgdXBkYXRlR3Jh
cGhpY3NDb250ZXh0KCpjb250ZXh0LCBUZXh0UGFpbnRTdHlsZShjLCBzdHlsZS5jb2xvclNwYWNl
KCkpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKIApAQCAtMTAwMSw3ICsxMDA3LDIwIEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAKICAgICAvLyBVc2UgYSBzcGVjaWFsIGZ1bmN0
aW9uIGZvciB1bmRlcmxpbmVzIHRvIGdldCB0aGUgcG9zaXRpb25pbmcgZXhhY3RseSByaWdodC4K
ICAgICBib29sIGlzUHJpbnRpbmcgPSByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKTsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHRleHRE
ZWNvcmF0aW9uVGhpY2tuZXNzKTsKKyNlbHNlCisgICAgLy8gT24gaU9TIHdlIHdhbnQgdG8gZHJh
dyBjcmlzcCBkZWNvcmF0aW9ucy4gVGhlIGZ1bmN0aW9uIGRyYXdMaW5lRm9yVGV4dCB0YWtlcyB0
aGUgY29udGV4dCdzCisgICAgLy8gc3Ryb2tlVGhpY2tuZXNzIGFuZCByZW5kZXJzIHRoYXQgYXQg
ZGV2aWNlIHBpeGVsIHNjYWxlIChpLmUuIGEgc3Ryb2tlVGhpY2tuZXNzIG9mIDEgd2lsbAorICAg
IC8vIHByb2R1Y2UgYSAxIGRldmljZSBwaXhlbCBsaW5lLCBzbyB0aGlubmVyIG9uIHJldGluYSB0
aGFuIG5vbi1yZXRpbmEpLiBXZSB3aWxsIGFsc28gc2NhbGUKKyAgICAvLyBvdXIgdGhpY2tuZXNz
IGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBmb250LiBTaW5jZSBvdXIgZGVmYXVsdCBzaXplIGlz
IDE2cHggd2UnbGwgdXNlIHRoYXQKKyAgICAvLyBhcyBhIHNjYWxlIHJlZmVyZW5jZS4KKyAgICBm
bG9hdCBkb2N1bWVudFNjYWxlID0gcmVuZGVyZXIoKS5mcmFtZSgpLmRvY3VtZW50U2NhbGUoKTsK
KyAgICBjb25zdCBmbG9hdCB0ZXh0RGVjb3JhdGlvbkJhc2VGb250U2l6ZSA9IDE2OworICAgIGZs
b2F0IGZvbnRTaXplU2NhbGluZyA9IHJlbmRlcmVyKCkuc3R5bGUoKS5mb250U2l6ZSgpIC8gdGV4
dERlY29yYXRpb25CYXNlRm9udFNpemU7CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gcm91
bmRmKHRleHREZWNvcmF0aW9uVGhpY2tuZXNzICogZm9udFNpemVTY2FsaW5nICogZG9jdW1lbnRT
Y2FsZSk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsK
KyNlbmRpZgogCiAgICAgYm9vbCBsaW5lc0FyZU9wYXF1ZSA9ICFpc1ByaW50aW5nICYmICghKGRl
Y29yYXRpb24gJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSkgfHwgdW5kZXJsaW5lLmFscGhhKCkg
PT0gMjU1KSAmJiAoIShkZWNvcmF0aW9uICYgVGV4dERlY29yYXRpb25PdmVybGluZSkgfHwgb3Zl
cmxpbmUuYWxwaGEoKSA9PSAyNTUpICYmICghKGRlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbkxp
bmVUaHJvdWdoKSB8fCBsaW5ldGhyb3VnaC5hbHBoYSgpID09IDI1NSk7CiAKQEAgLTExNjQsNiAr
MTE4MywxMSBAQCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKERvY3VtZW50TQogICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5
bGU7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgogICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckRpY3RhdGlvbkFsdGVy
bmF0aXZlc0xpbmVTdHlsZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKKyAgICAgICAgLy8gRklYTUU6
IFJlbmFtZSBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0
eWxlIGFuZCByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXNMaW5lU3R5bGU7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJT
cGVsbGluZ0xpbmVTdHlsZTsKQEAgLTEzMDQsNiArMTMyOCwxMCBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0
UG9pbnQmCiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNh
dG9yOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAg
ICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgUExBVEZPUk0o
SU9TKS1ndWFyZC4KKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBo
cmFzZVdpdGhBbHRlcm5hdGl2ZXM6CisjZW5kaWYKICAgICAgICAgICAgICAgICBpZiAoYmFja2dy
b3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzM0LDYgKzEzNjIsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3Vt
ZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAg
ICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAgICAgICAgICAgICAgICBwYWlu
dERvY3VtZW50TWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIHRydWUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5MzMzNTI+LiBBbHNvLCByZW1vdmUgdGhl
IFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOgorICAgICAgICAgICAgICAgIHBhaW50RG9j
dW1lbnRNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRN
YXJrZXI6OlRleHRNYXRjaDoKICAgICAgICAgICAgICAgICBwYWludFRleHRNYXRjaE1hcmtlcihw
dCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250KTsKICAgICAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDI5MWE0Nzc2
Y2YyMWI0MGU1ZGE3NGIwMDllOGU0ZmZjM2RhYjlmM2YuLmM2Y2MyMWMyNThhNWZkOTk4NTQxMGNh
Nzc3OTZlYTZlNzIxODBmMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcApAQCAtMjIxMCw3ICsyMjEwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAg
IGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lmlu
ZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogICAgICAgICBvdmVy
Zmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZs
b3dCb3guaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCisgICAgICAgIGlmICghb3ZlcmZsb3dC
b3guaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBtYXkgYmUgYXBwbGljYWJsZSB0byBub24taU9TIHBvcnRzLgor
ICAgICAgICAgICAgJiYgKCFoYXNMYXllcigpIHx8ICFsYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkK
KyNlbmRpZgorICAgICAgICApCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTU5
LDYgKzM1NjQsMTUgQEAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5n
RWRpdGluZ0JvdW5kYXJpZXMoUmVuZGVyQmxvY2smIHBhcmVudCwKICAgICAvLyBJZiB3ZSBjYW4n
dCBmaW5kIGFuIGFuY2VzdG9yIHRvIGNoZWNrIGVkaXRhYmlsaXR5IG9uLCBvciBlZGl0YWJpbGl0
eSBpcyB1bmNoYW5nZWQsIHdlIHJlY3VyIGxpa2Ugbm9ybWFsCiAgICAgaWYgKGlzRWRpdGluZ0Jv
dW5kYXJ5KGFuY2VzdG9yLCBjaGlsZCkpCiAgICAgICAgIHJldHVybiBjaGlsZC5wb3NpdGlvbkZv
clBvaW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKKyAgICAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gT24gdGhlIHBob25lIHdlIHdhbnQgdG8gY29uc3RyYWluIFZpc2libGVQb3NpdGlv
bnMgdG8gdGhlIGVkaXRhYmxlIHJlZ2lvbiBjbG9zZXN0IHRvIHRoZSBpbnB1dCBwb3NpdGlvbiwg
c28KKyAgICAvLyB3ZSB3aWxsIGFsbG93IGRlc2NlbnQgZnJvbSBub24tZWR0aWFibGUgdG8gZWRp
dGFibGUgY29udGVudC4KKyAgICAvLyBGSVhNRTogVGhpcyBjb25zdHJhaW5pbmcgbXVzdCBiZSBk
b25lIGF0IGEgaGlnaGVyIGxldmVsIG9uY2Ugd2UgaW1wbGVtZW50IGNvbnRlbnRFZGl0YWJsZS4g
Rm9yIG5vdywgaWYgc29tZXRoaW5nCisgICAgLy8gaXMgZWRpdGFibGUsIHRoZSB3aG9sZSBkb2N1
bWVudCB3aWxsIGJlLgorICAgIGlmIChjaGlsZEVsZW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCkg
JiYgIWFuY2VzdG9yLT5lbGVtZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJl
dHVybiBjaGlsZC5wb3NpdGlvbkZvclBvaW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKKyNl
bmRpZgogCiAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaWxk
LCBkZXBlbmRpbmcgb24gaWYgdGhlIGNsaWNrIHdhcyB0byB0aGUgbG9naWNhbCBsZWZ0IG9yIGxv
Z2ljYWwgcmlnaHQgb2YgdGhlIGNoaWxkCiAgICAgTGF5b3V0VW5pdCBjaGlsZE1pZGRsZSA9IHBh
cmVudC5sb2dpY2FsV2lkdGhGb3JDaGlsZChjaGlsZCkgLyAyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAppbmRleCA4ZjYzODA2MGNlZGE3MGYyZjM5MjA5N2NmODJkODk4MjA1
Mjg3MDE5Li4wMmM4YWQxZTE0OGI1NDM5NjkzMmI0NGM2ZWMzY2I0MWMxMDM2MmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNDU4LDYgKzQ1OCw5IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZvaWQgc2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoaW50LCBMYXlv
dXRVbml0KTsKIAorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVu
ZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29uc3QgTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcyYpOworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExheW91dFVuaXQgcG9zaXRpb24sIGNv
bnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmKTsKKwogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UsIGJv
b2wgcmVjb21wdXRlRmxvYXRzID0gZmFsc2UpOwogICAgIHZvaWQgY2xlYXJMYXlvdXRPdmVyZmxv
dygpOwpAQCAtNTc4LDkgKzU4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFVuaXQmIGxh
c3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxh
c3RMb2dpY2FsUmlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25z
dCBQYWludEluZm8qKTsKICAgICBMYXlvdXRSZWN0IGJsb2NrU2VsZWN0aW9uR2FwKFJlbmRlckJs
b2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0
aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgICAgICBMYXlv
dXRVbml0IGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCBsYXN0TG9naWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIGNvbnN0IExv
Z2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQYWludEluZm8qKTsKLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ss
IExheW91dFVuaXQgcG9zaXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMm
KTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2VsZWN0aW9u
T2Zmc2V0Q2FjaGVzJik7Ci0gICAgCisKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2
aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zs
b3cKICAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dEZsb2F0aW5nT2JqZWN0cyhSZW5kZXJCbG9jayYs
IGNvbnN0IFBhaW50SW5mbyosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0U2l6ZSYp
IHsgfTsKICAgICBmcmllbmQgY2xhc3MgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNTZhMGQzYTliOGUzNTU0Mjcy
NGI5YjUwNDA0M2I2ZjcyNjE4MjhlNi4uYjE4YmUzNzIyYTFjNTEwZmI2ZGViZDlhNDA0NTA2NDk1
NDU2MTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTYyLDYg
KzYyLDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTU5Niw2ICs2
MDAsMTggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2Fs
SGVpZ2h0QnlNaW5NYXgoTGF5b3V0VW5pdCBsb2dpY2EKICAgICByZXR1cm4gc3RkOjptYXgobG9n
aWNhbEhlaWdodCwgY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KHN0eWxlVG9Vc2UubG9naWNh
bE1pbkhlaWdodCgpKSk7CiB9CiAKK1JvdW5kZWRSZWN0OjpSYWRpaSBSZW5kZXJCb3g6OmJvcmRl
clJhZGlpKCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OworICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVSZWN0KCk7CisKKyAgICB1bnNpZ25lZCBi
b3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCk7CisgICAgdW5zaWduZWQgYm9yZGVy
VG9wID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKKyAgICBib3VuZHMubW92ZUJ5KExheW91dFBv
aW50KGJvcmRlckxlZnQsIGJvcmRlclRvcCkpOworICAgIGJvdW5kcy5jb250cmFjdChib3JkZXJM
ZWZ0ICsgc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCBib3JkZXJUb3AgKyBzdHlsZS5ib3JkZXJC
b3R0b21XaWR0aCgpKTsKKyAgICByZXR1cm4gc3R5bGUuZ2V0Um91bmRlZEJvcmRlckZvcihib3Vu
ZHMpLnJhZGlpKCk7Cit9CisKIEludFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3go
KSBjb25zdAogewogICAgIC8vIFRoaXMgaXMgd3Jvbmcgd2l0aCB0cmFuc2Zvcm1zIGFuZCBmbGlw
cGVkIHdyaXRpbmcgbW9kZXMuCkBAIC0xMTU5LDYgKzExNzUsMTQgQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWkKICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lv
bihwYWludEluZm8ucmVuZGVyUmVnaW9uKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zm
c2V0KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjov
L3Byb2JsZW0vNjIwOTc2Mz4uIEZvcmNlIHRoZSBwYWludGluZyBib3VuZHMgb2YgY2hlY2tib3hl
cyBhbmQgcmFkaW8gY29udHJvbHMgdG8gYmUgc3F1YXJlLgorICAgIGlmIChzdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9Q
YXJ0KSB7CisgICAgICAgIGludCB3aWR0aCA9IHN0ZDo6bWluKHBhaW50UmVjdC53aWR0aCgpLCBw
YWludFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBpbnQgaGVpZ2h0ID0gd2lkdGg7CisgICAgICAg
IHBhaW50UmVjdCA9IEludFJlY3QocGFpbnRSZWN0LngoKSwgcGFpbnRSZWN0LnkoKSArICh0aGlz
LT5oZWlnaHQoKSAtIGhlaWdodCkgLyAyLCB3aWR0aCwgaGVpZ2h0KTsgLy8gVmVydGljYWxseSBj
ZW50ZXIgdGhlIGNoZWNrYm94LCBsaWtlIG9uIGRlc2t0b3AKKyAgICB9CisjZW5kaWYKICAgICBC
YWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UgPSBkZXRlcm1pbmVCYWNrZ3Jv
dW5kQmxlZWRBdm9pZGFuY2UocGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgLy8gRklYTUU6IFNo
b3VsZCBldmVudHVhbGx5IGdpdmUgdGhlIHRoZW1lIGNvbnRyb2wgb3ZlciB3aGV0aGVyIHRoZSBi
b3ggc2hhZG93IHNob3VsZCBwYWludCwgc2luY2UgY29udHJvbHMgY291bGQgaGF2ZQpAQCAtMjEw
OSw5ICsyMTMzLDE1IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhCiAgICAgcmVjdC5zZXRMb2Nh
dGlvbih0b3BMZWZ0KTsKICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAg
UmVuZGVyQm94KiBjb250YWluZXJCb3ggPSB0b1JlbmRlckJveChvKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIGlmICghY29udGFpbmVyQm94LT5sYXllcigpIHx8ICFjb250YWluZXJCb3gt
PmxheWVyKCktPmhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkgeworI2VuZGlmCiAgICAg
ICAgIGNvbnRhaW5lckJveC0+YXBwbHlDYWNoZWRDbGlwQW5kU2Nyb2xsT2Zmc2V0Rm9yUmVwYWlu
dChyZWN0KTsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgfSAKKyNlbmRpZgogICAgIH0KIAogICAgIGlm
IChjb250YWluZXJTa2lwcGVkKSB7CkBAIC0yODkxLDYgKzI5MjEsMzMgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoQXZhaWxhYmxlTG9naWNhbEhlaWdodFR5
cGUgaGVpZ2h0VHkKICAgICByZXR1cm4gY29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KGF2
YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKSwgaGVpZ2h0
VHlwZSkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGlubGluZSBpbnQgY3VzdG9t
Q29udGFpbmluZ0Jsb2NrV2lkdGgoY29uc3QgUmVuZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVy
Qm94JiBjb250YWluaW5nQmxvY2tCb3gpCit7CisgICAgcmV0dXJuIHZpZXcuZnJhbWVWaWV3KCku
Y3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS53aWR0aCgpIC0gY29udGFpbmluZ0Jsb2Nr
Qm94LmJvcmRlckxlZnQoKSAtIGNvbnRhaW5pbmdCbG9ja0JveC5ib3JkZXJSaWdodCgpIC0gY29u
dGFpbmluZ0Jsb2NrQm94LnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKK30KKworc3RhdGljIGlu
bGluZSBpbnQgY3VzdG9tQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KGNvbnN0IFJlbmRlclZpZXcmIHZp
ZXcsIGNvbnN0IFJlbmRlckJveCYgY29udGFpbmluZ0Jsb2NrQm94KQoreworICAgIHJldHVybiB2
aWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCkuaGVpZ2h0KCkg
LSBjb250YWluaW5nQmxvY2tCb3guYm9yZGVyVG9wKCkgLSBjb250YWluaW5nQmxvY2tCb3guYm9y
ZGVyQm90dG9tKCkgLSBjb250YWluaW5nQmxvY2tCb3guaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpOworfQorCitzdGF0aWMgaW50IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclZpZXcmIHZpZXcsIGNvbnN0IFJl
bmRlckJveCYgY29udGFpbmluZ0Jsb2NrQm94KQoreworICAgIHJldHVybiBzdHlsZS5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gY3VzdG9tQ29udGFpbmluZ0Jsb2NrV2lkdGgodmlldywgY29u
dGFpbmluZ0Jsb2NrQm94KSA6IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0hlaWdodCh2aWV3LCBjb250
YWluaW5nQmxvY2tCb3gpOworfQorCitzdGF0aWMgaW50IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJWaWV3JiB2
aWV3LCBjb25zdCBSZW5kZXJCb3gmIGNvbnRhaW5pbmdCbG9ja0JveCkKK3sKKyAgICByZXR1cm4g
c3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0hl
aWdodCh2aWV3LCBjb250YWluaW5nQmxvY2tCb3gpIDogY3VzdG9tQ29udGFpbmluZ0Jsb2NrV2lk
dGgodmlldywgY29udGFpbmluZ0Jsb2NrQm94KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3Vz
dG9tQ29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTG9naWNhbEhlaWdodChjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFJlbmRlclZpZXcmIHZpZXcpCit7CisgICAgcmV0dXJuIHN0eWxlLmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB2aWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9z
aXRpb25MYXlvdXRSZWN0KCkuaGVpZ2h0KCkgOiB2aWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVk
UG9zaXRpb25MYXlvdXRSZWN0KCkud2lkdGgoKTsKK30KKyNlbmRpZgorCiBMYXlvdXRVbml0IFJl
bmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaCwgQXZh
aWxhYmxlTG9naWNhbEhlaWdodFR5cGUgaGVpZ2h0VHlwZSkgY29uc3QKIHsKICAgICAvLyBXZSBu
ZWVkIHRvIHN0b3AgaGVyZSwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBpbmNyZWFzZSB0aGUgaGVp
Z2h0IG9mIHRoZSB0YWJsZQpAQCAtMjkwMyw5ICsyOTYwLDIxIEBAIExheW91dFVuaXQgUmVuZGVy
Qm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoLCBBdmFpbGFi
bGVMb2dpCiAgICAgfQogCiAgICAgaWYgKGguaXNQZXJjZW50KCkgJiYgaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Js
b2NrKCk7CisgICAgICAgIC8vIElmIHdlJ3JlIGZpeGVkLCBhbmQgb3VyIGNvbnRhaW5lciBpcyB0
aGUgUmVuZGVyVmlldywgdXNlIHRoZSBjdXN0b20gZml4ZWQgcG9zaXRpb24gcmVjdCBmb3Igc2l6
aW5nLgorICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlclZpZXcoKSkgeworICAg
ICAgICAgICAgUmVuZGVyVmlldyYgdmlldyA9IHRvUmVuZGVyVmlldygqY29udGFpbmluZ0Jsb2Nr
KTsKKyAgICAgICAgICAgIGlmICh2aWV3Lmhhc0N1c3RvbUZpeGVkUG9zaXRpb24oKnRoaXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJv
eFNpemluZyh2YWx1ZUZvckxlbmd0aChoLCBjdXN0b21Db250YWluaW5nQmxvY2tBdmFpbGFibGVM
b2dpY2FsSGVpZ2h0KGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKSwgdmlldykpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNp
emluZyh2YWx1ZUZvckxlbmd0aChoLCBjb250YWluaW5nQmxvY2stPmF2YWlsYWJsZUxvZ2ljYWxI
ZWlnaHQoaGVpZ2h0VHlwZSkpKTsKKyNlbHNlCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdy
b25nIGlmIHRoZSBjb250YWluaW5nQmxvY2sgaGFzIGEgcGVycGVuZGljdWxhciB3cml0aW5nIG1v
ZGUuCiAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrKCkpOwogICAgICAgICBy
ZXR1cm4gYWRqdXN0Q29udGVudEJveExvZ2ljYWxIZWlnaHRGb3JCb3hTaXppbmcodmFsdWVGb3JM
ZW5ndGgoaCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisjZW5kaWYKICAgICB9CiAKICAgICBMYXlvdXRV
bml0IGhlaWdodEluY2x1ZGluZ1Njcm9sbGJhciA9IGNvbXB1dGVDb250ZW50QW5kU2Nyb2xsYmFy
TG9naWNhbEhlaWdodFVzaW5nKGgpOwpAQCAtMjk3MCw4ICszMDM5LDE1IEBAIExheW91dFVuaXQg
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0
IFJlbmRlckJveE1vCiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAg
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgICAgIGlmICghZmxvd1RocmVhZCkKKyAgICAgICAgaWYgKCFmbG93VGhyZWFk
KSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKHZpZXcoKS5oYXNDdXN0b21G
aXhlZFBvc2l0aW9uKCp0aGlzKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJveCYg
Y29udGFpbmluZ0Jsb2NrQm94ID0gdG9SZW5kZXJCb3goKmNvbnRhaW5pbmdCbG9jayk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aChjb250
YWluaW5nQmxvY2tCb3guc3R5bGUoKSwgJnZpZXcoKSwgY29udGFpbmluZ0Jsb2NrQm94KTsKKyAg
ICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94KGNvbnRh
aW5pbmdCbG9jayktPmNsaWVudExvZ2ljYWxXaWR0aCgpOworICAgICAgICB9CiAKICAgICAgICAg
aWYgKGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBzdHlsZSgp
LnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBjb250YWlu
aW5nQmxvY2stPnZpZXcoKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKQEAgLTMwMjcsNiArMzEwMywx
MCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZv
clBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TQogICAgICAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIDAsIGZhbHNlKTsK
IAogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzQm94KCkpIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIGlmICh2aWV3KCkuaGFzQ3VzdG9tRml4ZWRQb3NpdGlvbigqdGhpcykpCisgICAg
ICAgICAgICByZXR1cm4gY3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodChzdHlsZSgp
LCB2aWV3KCksIHRvUmVuZGVyQm94KCpjb250YWluaW5nQmxvY2spKTsKKyNlbmRpZgogICAgICAg
ICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGNvbnRhaW5pbmdCbG9jayk7
CiAgICAgICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2ItPmNsaWVudExvZ2ljYWxIZWlnaHQoKTsK
ICAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKTsKQEAgLTQ0NDksNyArNDUyOSwxMSBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6
bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQogICAgICAgICByZWN0LnVuaXRlKGxheW91dE92ZXJmbG93UmVjdCgpKTsKIAogICAgIGJvb2wg
aGFzVHJhbnNmb3JtID0gaGFzTGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgaWYgKGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IChoYXNUcmFuc2Zv
cm0gJiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLT5zaG91bGRUcmFuc2Zvcm1zQWZmZWN0T3ZlcmZs
b3coKSkpIHsKKyNlbHNlCiAgICAgaWYgKGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IGhhc1RyYW5z
Zm9ybSkgeworI2VuZGlmCiAgICAgICAgIC8vIElmIHdlIGFyZSByZWxhdGl2ZWx5IHBvc2l0aW9u
ZWQgb3IgaWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSwgdGhlbiB3ZSBoYXZlIHRvIGNvbnZlcnQKICAg
ICAgICAgLy8gdGhpcyByZWN0YW5nbGUgaW50byBwaHlzaWNhbCBjb29yZGluYXRlcywgYXBwbHkg
cmVsYXRpdmUgcG9zaXRpb25pbmcgYW5kIHRyYW5zZm9ybXMKICAgICAgICAgLy8gdG8gaXQsIGFu
ZCB0aGVuIGNvbnZlcnQgaXQgYmFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApp
bmRleCA1MDIwOWFjMjM3NGQxYjVhN2RkNmYwZjUzMWRjMWFiODZhMWM2YjBhLi4zNGE0OTQxZTJh
NGIyNzlmOGRjNTRlZjhhYmM0MjkwYTVjMWQ4ZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGljOgogICAgIEludFJlY3QgcGl4ZWxT
bmFwcGVkQm9yZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwg
bV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkU2l6ZSgpKTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBi
b3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHBpeGVsU25h
cHBlZEJvcmRlckJveFJlY3QoKTsgfQogCisgICAgUm91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJh
ZGlpKCkgY29uc3Q7CisKICAgICAvLyBUaGUgY29udGVudCBhcmVhIG9mIHRoZSBib3ggKGV4Y2x1
ZGVzIHBhZGRpbmcgLSBhbmQgaW50cmluc2ljIHBhZGRpbmcgZm9yIHRhYmxlIGNlbGxzLCBldGMu
Li4gLSBhbmQgYm9yZGVyKS4KICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkgY29uc3Qg
eyByZXR1cm4gTGF5b3V0UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJU
b3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQoKSk7IH0K
ICAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5z
Zm9ybXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAppbmRleCBjZWY3NDNmYTdhM2MzZWNlMDVkMjllMzcwMTNlMDVjYTJmYWU1YTJjLi5l
ZDNkZmZkMDcwNjQwZWIzMzNlNDI5NzRkNzYwN2ExMTM0NWJlNDQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQzMiw3ICs0
MzIsMTEgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c3RpY2t5UG9zaXRpb25P
ZmZzZXQoKSBjb25zdAogICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9p
bnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBj
b25zdHJhaW5pbmdSZWN0LnNldExvY2F0aW9uKHNjcm9sbE9mZnNldCk7CiAgICAgfSBlbHNlIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gdmll
dygpLmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCk7CisjZWxzZQog
ICAgICAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IHZpZXcoKS5mcmFtZVZpZXcoKS52aWV3
cG9ydENvbnN0cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKICAgICAgICAgZmxv
YXQgc2NhbGUgPSB2aWV3KCkuZnJhbWVWaWV3KCkuZnJhbWUoKS5mcmFtZVNjYWxlRmFjdG9yKCk7
CiAgICAgICAgIHZpZXdwb3J0UmVjdC5zY2FsZSgxIC8gc2NhbGUpOwogICAgICAgICBjb25zdHJh
aW5pbmdSZWN0ID0gdmlld3BvcnRSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QnV0dG9uLmNwcAppbmRleCA1NzIyZjFjY2I3ODliN2I2N2JhNzJkYTRhYTg0YjE3MDE5ZGY5YjE4
Li5kZjMxYzI2YzUwNWMxY2E2ZDM0NGRiYTQ2YmQ0OGI2ZmE4ODFmMmRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMjksNiArMjksMTAgQEAKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJlbmRlclRoZW1lSU9TLmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMTky
LDQgKzE5NiwxNCBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6dGltZXJGaXJlZChUaW1lcjxSZW5kZXJC
dXR0b24+KikKICAgICByZXBhaW50KCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJl
bmRlckJ1dHRvbjo6bGF5b3V0KCkKK3sKKyAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmlu
ZyBsYXlvdXQuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4uCisgICAgUmVuZGVyVGhlbWVJ
T1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxlKCksIHRoaXMpOworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcAppbmRleCBjOWVjYjlmMDY0ZmU4OTA5YzJmZWEyM2E3ODlmM2Q3M2E5Mzg5ZjVi
Li41ZTU2OTU4YjI5YzdiZTQ1ZjM0MjhkZGMwZTU4ODgwMGVmYWU5Y2Y0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC04NDYsNiArODQ2LDEwIEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbmV3CiAgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKICAg
ICAgICAgICAgIGRvY3VtZW50KCkuc2V0QW5ub3RhdGVkUmVnaW9uc0RpcnR5KHRydWUpOwogI2Vu
ZGlmCisjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgICAgICBp
ZiAodmlzaWJpbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBkb2N1bWVudCgpLmRpcnR5VG91Y2hF
dmVudFJlY3RzKCk7CisjZW5kaWYKICAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkKSB7CiAg
ICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQo
cGFyZW50KCkpOwpAQCAtOTIzLDYgKzkyNyw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6c3R5bGVX
aWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3CiAg
ICAgfQogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBib29sIGFyZU5vbklkZW50aWNh
bEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKQogewogICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKQEAgLTkz
Myw2ICs5MzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKIHsKICAgICByZXR1cm4gYS0+Y3Vy
c29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwg
YXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7CiB9CisjZW5kaWYKIAogdm9p
ZCBSZW5kZXJFbGVtZW50OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewpAQCAtOTcyLDggKzk3OCwxMCBAQCB2b2lkIFJl
bmRlckVsZW1lbnQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkUwogICAgIC8vIERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdl
IG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgbGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5
IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtub3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRT
dHlsZSgpKS4KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG9sZFN0eWxlICYmICFhcmVD
dXJzb3JzRXF1YWwob2xkU3R5bGUsICZzdHlsZSgpKSkKICAgICAgICAgZnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5zY2hlZHVsZUN1cnNvclVwZGF0ZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVy
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBiMjc0NjgzODYwZWIzYTU4NGE5ZDMy
YjZiM2U3MDFiYTU5NGEwOGQxLi4yYTlkYmU1ODhkOTFiZjNjNjIyMWI3NWMwOWJjYTk5ZWFjM2Uw
NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKQEAgLTEzNCwxMCArMTM0LDE2IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OnJlcXVpcmVzTGF5ZXIoKSBjb25zdAogCiBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjphbGxv
d3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gVGhlIHRpbWluZyBvZiBsYXllciBjcmVhdGlvbiBpcyBkaWZmZXJlbnQgb24gdGhlIHBo
b25lLCBzaW5jZSB0aGUgcGx1Z2luIGNhbiBvbmx5IGJlIG1hbmlwdWxhdGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgorICAgIHJldHVybiB3aWRnZXQoKSAmJiB3aWRnZXQoKS0+aXNQbHVnaW5WaWV3
QmFzZSgpICYmIHRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0KCkpLT53aWxsUHJvdmlkZVBsdWdpbkxh
eWVyKCk7CisjZWxzZQogICAgIHJldHVybiB3aWRnZXQoKSAmJiB3aWRnZXQoKS0+aXNQbHVnaW5W
aWV3QmFzZSgpICYmIHRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0KCkpLT5wbGF0Zm9ybUxheWVyKCk7
CisjZW5kaWYKIH0KICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBTdHJpbmcg
dW5hdmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQoUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBs
dWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKQogewog
ICAgIHN3aXRjaCAocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIHsKQEAgLTE1NCw2ICsxNjAs
NyBAQCBzdGF0aWMgU3RyaW5nIHVuYXZhaWxhYmxlUGx1Z2luUmVwbGFjZW1lbnRUZXh0KFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgYm9vbCBzaG91bGRVbmF2
YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlckVt
YmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbikKIHsKQEAgLTE2MywxMSArMTcwLDE5IEBAIHN0YXRpYyBib29sIHNob3VsZFVu
YXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVy
RW1iCiAKIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFBsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uKFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVh
c29uKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0ocGx1Z2luVW5hdmFp
bGFiaWxpdHlSZWFzb24pOworI2Vsc2UKICAgICBzZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bldpdGhEZXNjcmlwdGlvbihwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgdW5hdmFpbGFibGVQ
bHVnaW5SZXBsYWNlbWVudFRleHQocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKTsKKyNlbmRp
ZgogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRQbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbldpdGhEZXNjcmlwdGlvbihQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5V
bmF2YWlsYWJpbGl0eVJlYXNvbiwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29u
KTsKKyAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRpb24pOworI2Vsc2UKICAgICBBU1NFUlQoIW1f
aXNQbHVnaW5VbmF2YWlsYWJsZSk7CiAgICAgbV9pc1BsdWdpblVuYXZhaWxhYmxlID0gdHJ1ZTsK
ICAgICBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID0gcGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb247CkBAIC0xNzYsNiArMTkxLDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2V0
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25XaXRoRGVzY3JpcHRpb24oUGx1Z2luVW4KICAgICAg
ICAgbV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCA9IHVuYXZhaWxhYmxlUGx1Z2lu
UmVwbGFjZW1lbnRUZXh0KHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fdW5hdmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQgPSBkZXNjcmlwdGlvbjsK
KyNlbmRpZgogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRVbmF2YWlsYWJsZVBs
dWdpbkluZGljYXRvcklzUHJlc3NlZChib29sIHByZXNzZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAppbmRleCAxOWU5ZWEz
ZWQ1YmRmN2M1NzkwMjJiYWVlOWJjYzU3MmJiMWYwOGMxLi4yMDdkZjI1N2YyZGVjYTU5ZWQ5MmY4
MDcyZmMxMGVlNTMxNzA2NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKQEAgLTM3LDE1ICszNywyNSBAQAogI2luY2x1
ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgPG1hdGguaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGNvbnN0IGludCBhZnRl
ckJ1dHRvblNwYWNpbmcgPSA0OworI2lmICFQTEFURk9STShJT1MpCiBjb25zdCBpbnQgaWNvbkhl
aWdodCA9IDE2OwogY29uc3QgaW50IGljb25XaWR0aCA9IDE2OwogY29uc3QgaW50IGljb25GaWxl
bmFtZVNwYWNpbmcgPSAyOwogY29uc3QgaW50IGRlZmF1bHRXaWR0aE51bUNoYXJzID0gMzQ7Cisj
ZWxzZQorLy8gT24gaU9TIHRoZSBpY29uIGhlaWdodCBtYXRjaGVzIHRoZSBidXR0b24gaGVpZ2h0
LCB0byBtYXhpbWl6ZSB0aGUgaWNvbiBzaXplLgorY29uc3QgaW50IGljb25GaWxlbmFtZVNwYWNp
bmcgPSBhZnRlckJ1dHRvblNwYWNpbmc7Citjb25zdCBpbnQgZGVmYXVsdFdpZHRoTnVtQ2hhcnMg
PSAzODsKKyNlbmRpZgogY29uc3QgaW50IGJ1dHRvblNoYWRvd0hlaWdodCA9IDI7CiAKIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbChIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCkBAIC05Myw4ICsxMDMsMTgg
QEAgc3RhdGljIGludCBub2RlV2lkdGgoTm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUgJiYg
bm9kZS0+cmVuZGVyQm94KCkpID8gbm9kZS0+cmVuZGVyQm94KCktPnBpeGVsU25hcHBlZFdpZHRo
KCkgOiAwOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGludCBub2RlSGVpZ2h0KE5v
ZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIChub2RlICYmIG5vZGUtPnJlbmRlckJveCgpKSA/IG5v
ZGUtPnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRIZWlnaHQoKSA6IDA7Cit9CisjZW5kaWYKKwog
aW50IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFtZVdpZHRoKCkgY29uc3QKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgaW50IGljb25XaWR0aCA9IG5vZGVIZWlnaHQodXBsb2Fk
QnV0dG9uKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIGNvbnRlbnRCb3hSZWN0
KCkucGl4ZWxTbmFwcGVkV2lkdGgoKSAtIG5vZGVXaWR0aCh1cGxvYWRCdXR0b24oKSkgLSBhZnRl
ckJ1dHRvblNwYWNpbmcKICAgICAgICAgLSAoaW5wdXRFbGVtZW50KCkuaWNvbigpID8gaWNvbldp
ZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDApKTsKIH0KQEAgLTEyMSw2ICsxNDEsMTAgQEAg
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCBkaXNwbGF5ZWRGaWxlbmFtZSwgc3R5bGUoKSwgVGV4dFJ1
bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJl
Y3Rpb25PdmVycmlkZSk7CiAgICAgICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaW50IGljb25IZWlnaHQgPSBub2RlSGVpZ2h0
KHVwbG9hZEJ1dHRvbigpKTsKKyAgICAgICAgaW50IGljb25XaWR0aCA9IGljb25IZWlnaHQ7Cisj
ZW5kaWYKICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUg
cGxhY2VkCiAgICAgICAgIExheW91dFVuaXQgY29udGVudExlZnQgPSBwYWludE9mZnNldC54KCkg
KyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBidXR0b24gPSB1cGxvYWRCdXR0b24oKTsKQEAgLTE1OCw4ICsxODIsMTcgQEAgdm9pZCBSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW4KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpY29uWCA9
IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBidXR0b25XaWR0aCAtIGFmdGVyQnV0dG9u
U3BhY2luZyAtIGljb25XaWR0aDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIGlm
IChSZW5kZXJCdXR0b24qIGJ1dHRvblJlbmRlcmVyID0gdG9SZW5kZXJCdXR0b24oYnV0dG9uLT5y
ZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbiBhbmQg
ZGVjb3JhdGlvbnMuCisgICAgICAgICAgICAgICAgSW50UmVjdCBpY29uUmVjdChpY29uWCwgaWNv
blksIGljb25XaWR0aCwgaWNvbkhlaWdodCk7CisgICAgICAgICAgICAgICAgUmVuZGVyVGhlbWU6
OkZpbGVVcGxvYWREZWNvcmF0aW9ucyBkZWNvcmF0aW9uc1R5cGUgPSBpbnB1dEVsZW1lbnQoKS5m
aWxlcygpLT5sZW5ndGgoKSA9PSAxID8gUmVuZGVyVGhlbWU6OlNpbmdsZUZpbGUgOiBSZW5kZXJU
aGVtZTo6TXVsdGlwbGVGaWxlczsKKyAgICAgICAgICAgICAgICB0aGVtZSgpLT5wYWludEZpbGVV
cGxvYWRJY29uRGVjb3JhdGlvbnModGhpcywgYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywgaWNv
blJlY3QsIGlucHV0RWxlbWVudCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKKyAgICAgICAg
ICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24KICAgICAgICAg
ICAgIGlucHV0RWxlbWVudCgpLmljb24oKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJl
Y3Qocm91bmRUb0ludChpY29uWCksIHJvdW5kVG9JbnQoaWNvblkpLCBpY29uV2lkdGgsIGljb25I
ZWlnaHQpKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogCkBAIC0yNDEsNiArMjc0LDEwIEBA
IFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0dG9uVmFsdWUoKQogU3RyaW5nIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4dFZhbHVlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChp
bnB1dEVsZW1lbnQoKS5maWxlcygpLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZ1Ry
dW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShpbnB1dEVsZW1lbnQoKS5kaXNwbGF5U3RyaW5nKCksIG1h
eEZpbGVuYW1lV2lkdGgoKSwgc3R5bGUoKS5mb250KCksIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxl
Um91bmRpbmdIYWNrcyk7CisjZW5kaWYKICAgICByZXR1cm4gdGhlbWUoKS0+ZmlsZUxpc3ROYW1l
Rm9yV2lkdGgoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSwgc3R5bGUoKS5mb250KCksIG1heEZpbGVu
YW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCkubXVsdGlwbGUoKSk7CiB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAppbmRleCAxY2YwNzE5NTc3NDM5
MDY4M2ViNjU4MzRjNjFmYWY5ZTcxNDUzMTNlLi40MTYzOTJmNTkxNzI1NWM0N2I0OTM3MzgwY2Iw
MTE0NWY0MjIwMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAKQEAgLTUxNCw3ICs1MTQsMTIgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25G
cmFtZXMoKQogICAgICAgICAgICAgaWYgKHdpZHRoICE9IGNoaWxkLT53aWR0aCgpIHx8IGhlaWdo
dCAhPSBjaGlsZC0+aGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0V2lkdGgo
d2lkdGgpOwogICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRIZWlnaHQoaGVpZ2h0KTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgaU9TLXNwZWNp
ZmljPworICAgICAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OworI2Vsc2UKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoKTsKKyNlbmRp
ZgogICAgICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKICAgICAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5oCmluZGV4IGVhODU5NjRiMzBiMTRkNmMw
NmQxYjEwOTFjZDM3MTIxNzQzZTYwNjQuLmFlMTQzNjgwOTAwZjE5NTQ3MGM5ZmQ4NjE3ZjcwYjVj
NDExOWZlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJh
bWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmgKQEAgLTU0
LDcgKzU0LDEyIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJJRnJhbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gRklYTUU6IERvIHdlIHN0aWxsIG5lZWQgdGhpcyB3b3JrYXJvdW5kIHRvIGF2b2lkIGJy
ZWFraW5nIGxheW91dCB0ZXN0cz8KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyUGFydE9iamVjdCI7IH0KKyNlbHNlCiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gIlJlbmRlcklGcmFtZSI7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVz
TGF5ZXIoKSBjb25zdCBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKaW5kZXggYjJlZTMxN2E1ODk4OWJkNTkwNjVmYzU2Njg4YmJiMmUyMDZjOTVmMy4u
NzliNTY4N2MyMmVkZThkMGYwOGQ0N2NhNzQwYTAwN2JlYTA5NDMxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC00Nyw4ICs0Nyw3MSBAQAogI2luY2x1ZGUg
IlNWR0ltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgiCisjaW5jbHVk
ZSAiU2VsZWN0aW9uUmVjdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgYmVoYXZlIGNvcnJlY3RseSBm
b3IgZmxvYXRpbmcgb3IgcG9zaXRpb25lZCBpbWFnZXMsIGJ1dCBXZWJDb3JlIGRvZXNuJ3QgaGFu
ZGxlIHRob3NlIHdlbGwKKy8vIGR1cmluZyBzZWxlY3Rpb24gY3JlYXRpb24geWV0IGFueXdheS4K
Ky8vIEZJWE1FOiBXZSBjYW4ndCB0ZWxsIHdoZXRoZXIgb3Igbm90IHdlIGNvbnRhaW4gdGhlIHN0
YXJ0IG9yIGVuZCBvZiB0aGUgc2VsZWN0ZWQgUmFuZ2UgdXNpbmcgb25seSB0aGUgb2Zmc2V0cwor
Ly8gb2YgdGhlIHN0YXJ0IGFuZCBlbmQsIHdlIG5lZWQgdG8ga25vdyB0aGUgd2hvbGUgUG9zaXRp
b24uCit2b2lkIFJlbmRlckltYWdlOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVj
dGlvblJlY3Q+JiByZWN0cywgdW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFJlbmRlckJsb2Nr
KiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKworICAgIEludFJl
Y3QgaW1hZ2VSZWN0OworICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcGFj
a2FnZSBsaW5lIGJvdW5kcyBpbnRvIFNlbGVjdGlvblJlY3RzLiBXZSBzaG91bGQgZmluZAorICAg
IC8vIHRoZSByaWdodCBhbmQgbGVmdCBleHRlbnQgb2YgdGhlIHNlbGVjdGlvbiBvbmNlIGZvciB0
aGUgZW50aXJlIHNlbGVjdGVkIFJhbmdlLCBwZXJoYXBzCisgICAgLy8gdXNpbmcgdGhlIFJhbmdl
J3MgY29tbW9uIGFuY2VzdG9yLgorICAgIEludFJlY3QgbGluZUV4dGVudFJlY3Q7CisgICAgYm9v
bCBpc0ZpcnN0T25MaW5lID0gZmFsc2U7CisgICAgYm9vbCBpc0xhc3RPbkxpbmUgPSBmYWxzZTsK
KworICAgIElubGluZUJveCogaW5saW5lQm94ID0gaW5saW5lQm94V3JhcHBlcigpOworICAgIGlm
ICghaW5saW5lQm94KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBibG9jayBpbWFnZS4KKyAgICAg
ICAgaW1hZ2VSZWN0ID0gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAg
IGlzRmlyc3RPbkxpbmUgPSB0cnVlOworICAgICAgICBpc0xhc3RPbkxpbmUgPSB0cnVlOworICAg
ICAgICBsaW5lRXh0ZW50UmVjdCA9IGltYWdlUmVjdDsKKyAgICAgICAgaWYgKGNvbnRhaW5pbmdC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICAgICAgbGluZUV4dGVu
dFJlY3Quc2V0WChjb250YWluaW5nQmxvY2stPngoKSk7CisgICAgICAgICAgICBsaW5lRXh0ZW50
UmVjdC5zZXRXaWR0aChjb250YWluaW5nQmxvY2stPndpZHRoKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbGluZUV4dGVudFJlY3Quc2V0WShjb250YWluaW5nQmxvY2stPnkoKSk7
CisgICAgICAgICAgICBsaW5lRXh0ZW50UmVjdC5zZXRIZWlnaHQoY29udGFpbmluZ0Jsb2NrLT5o
ZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBMYXlvdXRVbml0IHNl
bGVjdGlvblRvcCA9ICFjb250YWluaW5nQmxvY2stPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSA/IGlubGluZUJveC0+cm9vdCgpLnNlbGVjdGlvblRvcCgpIC0gbG9naWNhbFRv
cCgpIDogbG9naWNhbEJvdHRvbSgpIC0gaW5saW5lQm94LT5yb290KCkuc2VsZWN0aW9uQm90dG9t
KCk7CisgICAgICAgIGltYWdlUmVjdCA9IEludFJlY3QoMCwgIHNlbGVjdGlvblRvcCwgbG9naWNh
bFdpZHRoKCksIGlubGluZUJveC0+cm9vdCgpLnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICAgICAg
aXNGaXJzdE9uTGluZSA9ICFpbmxpbmVCb3gtPnByZXZpb3VzT25MaW5lRXhpc3RzKCk7CisgICAg
ICAgIGlzTGFzdE9uTGluZSA9ICFpbmxpbmVCb3gtPm5leHRPbkxpbmVFeGlzdHMoKTsKKyAgICAg
ICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBjYWNoZSgqY29udGFpbmluZ0Jsb2NrKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T2Zmc2V0ID0gY29udGFpbmluZ0Jsb2NrLT5sb2dpY2Fs
TGVmdFNlbGVjdGlvbk9mZnNldCgqY29udGFpbmluZ0Jsb2NrLCBpbmxpbmVCb3gtPmxvZ2ljYWxU
b3AoKSwgY2FjaGUpOworICAgICAgICBMYXlvdXRVbml0IHJpZ2h0T2Zmc2V0ID0gY29udGFpbmlu
Z0Jsb2NrLT5sb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoKmNvbnRhaW5pbmdCbG9jaywgaW5s
aW5lQm94LT5sb2dpY2FsVG9wKCksIGNhY2hlKTsKKyAgICAgICAgbGluZUV4dGVudFJlY3QgPSBJ
bnRSZWN0KGxlZnRPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbWFnZVJlY3QueSgpLCByaWdodE9m
ZnNldCAtIGxlZnRPZmZzZXQsIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICghaW5s
aW5lQm94LT5pc0hvcml6b250YWwoKSkgeworICAgICAgICAgICAgaW1hZ2VSZWN0ID0gaW1hZ2VS
ZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAgICAgICAgICBsaW5lRXh0ZW50UmVjdCA9IGxpbmVF
eHRlbnRSZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29s
IGlzRml4ZWQgPSBmYWxzZTsKKyAgICBJbnRSZWN0IGFic29sdXRlQm91bmRzID0gbG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QoaW1hZ2VSZWN0KSwgZmFsc2UsICZpc0ZpeGVkKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworICAgIEludFJlY3QgbGluZUV4dGVudEJvdW5kcyA9IGxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxpbmVFeHRlbnRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKyAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKKyAgICAgICAgbGluZUV4dGVudEJvdW5kcyA9IGxpbmVFeHRlbnRCb3VuZHMudHJhbnNwb3Nl
ZFJlY3QoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVyIG1ha2lu
ZyBTZWxlY3Rpb25SZWN0IGEgc3RydWN0IG9yIGJldHRlciBvcmdhbml6ZSBpdHMgb3B0aW9uYWwg
ZmllbGRzIGludG8KKyAgICAvLyBhbiBhdXhpbGlhcnkgc3RydWN0IHRvIHNpbXBsaWZ5IGl0cyBp
bml0aWFsaXphdGlvbi4KKyAgICByZWN0cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChhYnNvbHV0ZUJv
dW5kcywgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmRpcmVjdGlvbigpLCBsaW5lRXh0ZW50Qm91
bmRzLngoKSwgbGluZUV4dGVudEJvdW5kcy5tYXhYKCksIGxpbmVFeHRlbnRCb3VuZHMubWF4WSgp
LCAwLCBmYWxzZSAvKiBsaW5lIGJyZWFrICovLCBpc0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxpbmUs
IGZhbHNlIC8qIGNvbnRhaW5zIHN0YXJ0ICovLCBmYWxzZSAvKiBjb250YWlucyBlbmQgKi8sIGNv
bnRhaW5pbmdCbG9jay0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBpc0ZpeGVk
LCBmYWxzZSAvKiBydWJ5IHRleHQgKi8sIGNvbHVtbk51bWJlckZvck9mZnNldChhYnNvbHV0ZUJv
dW5kcy54KCkpKSk7Cit9CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
UmVuZGVySW1hZ2U6OlJlbmRlckltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVy
U3R5bGU+IHN0eWxlKQpAQCAtNDYyLDYgKzUyNSw5IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgCiB2b2lkIFJlbmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50SW5m
byYgcGFpbnRJbmZvKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0ocGFp
bnRJbmZvKTsKKyNlbHNlCiAgICAgaWYgKGRvY3VtZW50KCkucHJpbnRpbmcoKSB8fCAhZnJhbWUo
KS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IApAQCAtNDkzLDYgKzU1OSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50QXJlYUVsZW1lbnRG
b2N1c1JpbmcoUGFpbnRJbmZvJiBwYWludEluZm8pCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRy
YXdGb2N1c1JpbmcocGF0aCwgb3V0bGluZVdpZHRoLAogICAgICAgICBhcmVhRWxlbWVudFN0eWxl
LT5vdXRsaW5lT2Zmc2V0KCksCiAgICAgICAgIGFyZWFFbGVtZW50U3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikpOworI2VuZGlmCiB9CiAKIHZvaWQg
UmVuZGVySW1hZ2U6OmFyZWFFbGVtZW50Rm9jdXNDaGFuZ2VkKEhUTUxBcmVhRWxlbWVudCogZWxl
bWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKaW5kZXggYzIzYTI2OTFl
MzBmODhjZGRkOGY0YzRjYWVmNWNjMzJkMmM3YjU4NC4uODRkZmM5MGFmMjJmNGM0YWVmNTg0ZmRl
YTQzZmNhNzc2NjY1ZjgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgK
QEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFyZWFFbGVtZW50Rm9jdXNDaGFu
Z2VkKEhUTUxBcmVhRWxlbWVudCopOwogCiAgICAgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1l
ckZpcmVkKFRpbWVyPFJlbmRlckltYWdlPiopOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2aXJ0dWFsIHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0
PiYsIHVuc2lnbmVkLCB1bnNpZ25lZCkgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIHZvaWQgc2V0
SXNHZW5lcmF0ZWRDb250ZW50KGJvb2wgZ2VuZXJhdGVkID0gdHJ1ZSkgeyBtX2lzR2VuZXJhdGVk
Q29udGVudCA9IGdlbmVyYXRlZDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCmluZGV4IDI5YzViNzM5YjQ0Mjc2NmViM2M2ODAzYWMwNzdkMDZhNjQzNGQ0YmQu
LjY2OTUxZTdlNzFiNGRiMDFkMjRkNWFkNDdiNDFmNjJhYTQ4MWQ2Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC02OTcsNiArNjk3LDE0IEBAIHZvaWQg
UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CiAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVRdWFkcyhx
dWFkcywgd2FzRml4ZWQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZW5kZXJJbmxp
bmU6OmFic29sdXRlUXVhZHNGb3JTZWxlY3Rpb24oVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKSBj
b25zdAoreworICAgIEFic29sdXRlUXVhZHNHZW5lcmF0b3JDb250ZXh0IGNvbnRleHQodGhpcywg
cXVhZHMpOworICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKGNvbnRleHQpOworfQorI2VuZGlmCisK
IExheW91dFVuaXQgUmVuZGVySW5saW5lOjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsKICAgICBMYXlv
dXRQb2ludCB0b3BMZWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCmlu
ZGV4IDdkODc4MTZjZjQyNDM1MzBkMzNjOTM1Yzc2YjI2MWQ2OTkzMjQ0NTEuLjYzZDFjZWRkOGEw
ZTNjMWE4NmVkZWMzMWE2MzYwOWE5MGI2ZWEzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmgKQEAgLTY4LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICBJbmxpbmVCb3gq
IGZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKSBjb25zdCB7IHJldHVybiBhbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSA/IGZpcnN0TGluZUJveCgpIDogY3VsbGVkSW5saW5lRmlyc3RMaW5lQm94
KCk7IH0KICAgICBJbmxpbmVCb3gqIGxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIGNvbnN0
IHsgcmV0dXJuIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpID8gbGFzdExpbmVCb3goKSA6IGN1bGxl
ZElubGluZUxhc3RMaW5lQm94KCk7IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVRdWFkc0ZvclNlbGVjdGlvbihWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMp
IGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKICAgICB2aXJ0dWFsIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiB2aXJ0dWFsQ29udGludWF0aW9uKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4g
Y29udGludWF0aW9uKCk7IH0KICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUVsZW1lbnRDb250aW51
YXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggMTZhOTZiYmUyZWQ3ZmMzNzYwYzA2YTk2NjA0MDQxNDQxMGE2YTVkMy4uNzQ5MTkwODNl
N2JkNTg3ZDZhNjQ3MTllOGRkOWNjYzgyMTU0MzJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xODIsNiArMTgyLDEyIEBAIFJlbmRlckxheWVyOjpSZW5k
ZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3Qp
CiAgICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oTm9JbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uKQogICAgICwgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbihO
b05vdENvbXBvc2l0ZWRSZWFzb24pCiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgLCBt
X2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJl
ZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQorICAgICwgbV9pblVzZXJT
Y3JvbGwoZmFsc2UpCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsQm91bmRzT3JpZ2luVXBkYXRlKGZh
bHNlKQorI2VuZGlmCiAgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxz
ZSkKICAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRApAQCAtMjM3LDYgKzI0Myw5IEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQog
ICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRo
aXMpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpLmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKICAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBy
ZW5kZXJlcigpLmVsZW1lbnQoKSkKICAgICAgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJT
Y3JvbGxPZmZzZXQobV9zY3JvbGxPZmZzZXQpOwogICAgIH0KQEAgLTE3NjcsNiArMTc3NiwxNCBA
QCB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlcgogICAgIH0KIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgUmVuZGVyTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgaWYgKFJlbmRlckxh
eWVyQmFja2luZyogbGF5ZXJCYWNraW5nID0gYmFja2luZygpKQorICAgICAgICBsYXllckJhY2tp
bmctPmxheWVyV2lsbEJlRGVzdHJveWVkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJMYXll
cjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQp
CiB7CiAgICAgUmVuZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTIwODQsNiArMjEwMSw1
NSBAQCB2b2lkIFJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllciwgTGF5b3V0UgogICAgIHJlY3QubW92ZSgtZGVsdGEueCgpLCAt
ZGVsdGEueSgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhh
c0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSBjb25zdAoreworI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5ncygpOworCisgICAgLy8gRklYTUU6IHNldHRpbmdzIHNo
b3VsZCBub3QgYmUgbnVsbCBhdCB0aGlzIHBvaW50LiBJZiB5b3UgZmluZCBhIHJlbGlhYmxlIHdh
eSB0byBoaXQgdGhpcyBhc3NlcnRpb24sIHBsZWFzZSBmaWxlIGEgYnVnLgorICAgIC8vIFNlZSA8
cmRhcjovL3Byb2JsZW0vMTAyNjYxMDE+LgorICAgIEFTU0VSVChzZXR0aW5ncyk7CisKKyAgICBy
ZXR1cm4gcmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCAo
c2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwo
KSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxl
cmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2Yg
V2ViS2l0LgorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hF
dmVudCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCit2
b2lkIFJlbmRlckxheWVyOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRMaXN0ZW5lcihyZW5kZXJlcigpLmVs
ZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkg
fHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudExp
c3RlbmVyKHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogYm9vbCBSZW5kZXJMYXll
cjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdApAQCAtMjEwNyw5ICsyMTczLDExIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpCiAgICAg
ICAgICAgICAmJiBjYW5CZVN0YWNraW5nQ29udGFpbmVyKCkKICAgICAgICAgICAgICYmICFoYXNP
dXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudCgpOwogCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
X09WRVJGTE9XX1NDUk9MTElORykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQUNDRUxF
UkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQogICAgICAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9s
bGluZyA9IGZvcmNlVXNlQ29tcG9zaXRlZFNjcm9sbGluZyB8fCByZW5kZXJlcigpLnN0eWxlKCku
dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpOwogI2Vsc2UKKyAgICAgICAgLy8gT24gaU9TIHdl
IGRvbid0IHdhbnQgdG8gb3B0IGludG8gYWNjZWxlcmF0ZWQgY29tcG9zaXRlZCBzY3JvbGxpbmcs
IHdoaWNoIGNyZWF0ZXMgc2Nyb2xsIGJhcgorICAgICAgICAvLyBsYXllcnMgaW4gV2ViQ29yZSwg
YmVjYXVzZSB3ZSB1c2UgVUlLaXQgdG8gY29tcG9zaXRlIG91ciBzY3JvbGwgYmFycy4KICAgICAg
ICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBmb3JjZVVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmc7CiAjZW5kaWYKICAgICAgICAgLy8gV2UgZ2F0aGVyIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdXNl
IHdpdGggR29vZ2xlIFVNQSBoaXN0b2dyYW1zIHRvCkBAIC0yMjQxLDYgKzIzMDksMTcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQogICAgICAgICAvLyBFbnN1cmUg
dGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAo
Zm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgogICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCiAgICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
KSB7CisgICAgICAgICAgICBpbnQgbWF4WCA9IHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVudFdp
ZHRoKCk7CisgICAgICAgICAgICBpZiAoeCA+IG1heFggLSBjYXJldFdpZHRoKSB7CisgICAgICAg
ICAgICAgICAgeCArPSBjYXJldFdpZHRoOworICAgICAgICAgICAgICAgIGlmICh4IDw9IGNhcmV0
V2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlm
ICh4IDwgbV9zY3JvbGxPZmZzZXQud2lkdGgoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAg
ICAgeCAtPSBjYXJldFdpZHRoOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
Ly8gRklYTUU6IEV2ZW50dWFsbHksIHdlIHdpbGwgd2FudCB0byBwZXJmb3JtIGEgYmxpdC4gIEZv
ciBub3cgbmV2ZXIKQEAgLTIyNDksOCArMjMyOCwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUbyhpbnQgeCwgaW50IHkpCiAgICAgLy8gaXMgZWl0aGVyIG9jY2x1ZGVkIGJ5IGFub3RoZXIg
bGF5ZXIgb3IgY2xpcHBlZCBieSBhbiBlbmNsb3NpbmcKICAgICAvLyBsYXllciBvciBjb250YWlu
cyBmaXhlZCBiYWNrZ3JvdW5kcywgZXRjLikuCiAgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQg
PSBJbnRTaXplKHggLSBzY3JvbGxPcmlnaW4oKS54KCksIHkgLSBzY3JvbGxPcmlnaW4oKS55KCkp
OwotICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBuZXdTY3JvbGxPZmZzZXQpCisgICAgaWYgKG1f
c2Nyb2xsT2Zmc2V0ID09IG5ld1Njcm9sbE9mZnNldCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgaWYgKG1fcmVxdWlyZXNTY3JvbGxCb3VuZHNPcmlnaW5VcGRhdGUpCisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisjZW5kaWYKICAgICAgICAg
cmV0dXJuOworfQogICAgIG1fc2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0OwogCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Nyb2xsTGF5ZXIoJnJlbmRlcmVyKCkuZnJh
bWUoKSk7CkBAIC0yMjc2LDYgKzIzNjAsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8o
aW50IHgsIGludCB5KQogICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KICAgICAg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKICAgICAgICAgfQor
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRpcnR5VG91Y2hFdmVudFJlY3RzKCk7CisjZW5kaWYKICAgICB9CiAKICAgICBGcmFtZSYgZnJh
bWUgPSByZW5kZXJlcigpLmZyYW1lKCk7CkBAIC0yMjk2LDcgKzIzODQsMTEgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQogI2VuZGlmCiAKICAgICAvLyBKdXN0IHNj
aGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGlmICghaGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKQorI2Vsc2UKICAgICBpZiAo
cmVxdWlyZXNSZXBhaW50KQorI2VuZGlmCiAgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFVzaW5n
Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHBpeGVsU25hcHBlZEludFJlY3QobV9yZXBhaW50
UmVjdCkpOwogCiAgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0yMzg2
LDEwICsyNDc4LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgU2Nyb2xsQWxpZ25tCiAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudExheWVyID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgICAgIExheW91dFJlY3QgdmlzaWJs
ZVJlY3RSZWxhdGl2ZVRvRG9jdW1lbnQgPSB2aWV3UmVjdDsKICAgICAgICAgICAgIEludFNpemUg
c2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50ID0gZnJhbWVWaWV3LnNjcm9sbE9mZnNldFJl
bGF0aXZlVG9Eb2N1bWVudCgpOwogICAgICAgICAgICAgdmlzaWJsZVJlY3RSZWxhdGl2ZVRvRG9j
dW1lbnQuc2V0TG9jYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50
LndpZHRoKCksIHNjcm9sbE9mZnNldFJlbGF0aXZlVG9Eb2N1bWVudC5oZWlnaHQoKSkpOworI2Vs
c2UKKyAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcuYWN0dWFsVmlz
aWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpc2libGVSZWN0UmVs
YXRpdmVUb0RvY3VtZW50ID0gdmlld1JlY3Q7CisjZW5kaWYKIAogICAgICAgICAgICAgTGF5b3V0
UmVjdCByID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB2aXNpYmxlUmVjdFJlbGF0aXZlVG9E
b2N1bWVudCwgcmVjdCwgYWxpZ25YLCBhbGlnblkpOwogICAgICAgICAgICAgICAgIApAQCAtMjYy
NCw2ICsyNzIxLDEzIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NyCiAgICAgaWYgKHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykgewogICAgICAgICB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCkt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAw
OwogICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBo
b3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDogMDsKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgaWYgKGhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkgeworICAgICAgICAg
ICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IDA7CisgICAgICAgICAgICBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gMDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKSwK
QEAgLTI3NjEsNiArMjg2NSwyNyBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSByZW5kZXJlcigpLmZyYW1lKCkucGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJv
bWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXI6OmRpZEVuZFNjcm9sbCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigp
LmZyYW1lKCkucGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRP
dmVyZmxvd1Njcm9sbCgpOworfQorICAgIAordm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Ny
b2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBz
aW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIGlmIChQYWdl
KiBwYWdlID0gcmVuZGVyZXIoKS5mcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21l
KCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgor
CiBJbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25N
b3VzZVBvc2l0aW9uKCk7CkBAIC0yODMyLDYgKzI5NTcsMTIgQEAgSW50U2l6ZSBSZW5kZXJMYXll
cjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiB2
b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8g
Tm8gbmVlZCB0byBpbnZhbGlkYXRlIHNjcm9sbGJhcnMgaWYgd2UncmUgdXNpbmcgYWNjZWxlcmF0
ZWQgc2Nyb2xsaW5nLgorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CiAgICAgICAgIGlmIChHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewpAQCAtMjg2
Myw2ICsyOTk0LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByCiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIC8vIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgc2Nyb2xs
IGNvcm5lciBpZiB3ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBzY3JvbGxpbmcuCisgICAgaWYgKGhh
c0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewogICAgICAgICBsYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwpAQCAtMjk4NCw2ICszMTIxLDEyIEBAIGludCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpCiB7CiAgICAgaWYgKCFtX3ZCYXIgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAh
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCiAgICAgICAgIHJldHVy
biAwOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Ny
b2xsaW5nKCkpIAorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1fdkJh
ci0+d2lkdGgoKTsKIH0KIApAQCAtMjk5MSw2ICszMTM0LDEyIEBAIGludCBSZW5kZXJMYXllcjo6
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuCiB7CiAgICAgaWYgKCFtX2hCYXIgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCiAgICAgICAgIHJldHVybiAwOwor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5n
KCkpIAorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1faEJhci0+aGVp
Z2h0KCk7CiB9CiAKQEAgLTMyMTksOCArMzM2OCwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVz
IHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVl
ZAogICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXgg
KG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KICAgICAgICAgSW50U2l6ZSBjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBh
ZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRy
eSBwb2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3Vl
IHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24g
dGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQg
b3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3Ig
bW9yZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisjZW5kaWYKICAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xs
T2Zmc2V0KCkpCiAgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0
KTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOwpAQCAtMzI2MCw2ICszNDE5LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBv
aW50CiAgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1
cm47CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRG9uJ3QgcmVuZGVyIChjdXN0b20pIHNj
cm9sbGJhcnMgaWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcuCisgICAgaWYgKGhhc0Fj
Y2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CiAgICAgLy8gb24gdG9wIG9mIGV2
ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzCiAgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBq
dXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJz
CkBAIC01MjQzLDcgKzU0MDgsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJl
Y3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAgICAg
Y2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpOwog
ICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgY2xpcCByZWN0cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IGNoaWxkIGxheWVycy4KKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHJlbmRlcmVyKCkuaGFz
Q2xpcE9yT3ZlcmZsb3dDbGlwKCkgJiYgKGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93
Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwIHx8IHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5y
b290TGF5ZXIpKSB7CisjZWxzZQogICAgIGlmICgocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAoY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVy
Zmxvd0NsaXAgfHwgdGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllcikpIHx8IHJlbmRl
cmVyKCkuaGFzQ2xpcCgpKSB7CisjZW5kaWYKICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxp
c2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogCiAgICAgICAgIC8vIFRoaXMgb2Zmc2V0IGNhbm5v
dCB1c2UgY29udmVydFRvTGF5ZXJDb29yZHMsIGJlY2F1c2Ugc29tZXRpbWVzIG91ciByb290TGF5
ZXIgbWF5IGJlIGFjcm9zcwpAQCAtNjE4Myw2ICs2MzUyLDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6
c2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
ICAgICAgICAmJiAhcmVuZGVyZXIoKS5oYXNGaWx0ZXIoKQogI2VuZGlmCisjaWYgUExBVEZPUk0o
SU9TKQorICAgICAgICAgICAgJiYgIWhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKQorI2Vu
ZGlmCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgJiYgIXJlbmRlcmVyKCku
aGFzQmxlbmRNb2RlKCkKICNlbmRpZgpAQCAtNjM5Nyw3ICs2NTY5LDcgQEAgaW5saW5lIGJvb2wg
UmVuZGVyTGF5ZXI6Om5lZWRzQ29tcG9zaXRpbmdMYXllcnNSZWJ1aWx0Rm9yT3ZlcmZsb3coY29u
c3QgUmVuZGVyU3QKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAot
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgYm9v
bCBpc05vcm1hbEZsb3dPbmx5ID0gc2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwogICAgIGlmIChp
c05vcm1hbEZsb3dPbmx5ICE9IG1faXNOb3JtYWxGbG93T25seSkgewpAQCAtNjQ3Nyw2ICs2NjQ5
LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVM
YXllciB8fCBkaWZmID49IFN0eWxlRGlmZmVyZW5jZUxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9u
bHkpCisgICAgICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kaXJ0eVRvdWNoRXZlbnRSZWN0cygp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGlmZik7CisjZW5kaWYKKwogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKICAgICB1cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdFJlbmRlcmVyKCk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjUxMCw2ICs2Njg5LDE4IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cp
CiAgICAgICAgIHVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpOwogI2VuZGlmCiAgICAg
fQorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisg
ICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0
ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2Ft
ZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3Vj
aCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggMTQyYjU2YzZiYTJmNDYxMGJiYjgzNTgwNjJhY2E3NzM0
NTJiMDFjNy4uZDU4ZWUyYTExNGQyYTFiMzE5NmY2ZjA2ZTYyMzA0YTgzZjIzYzM2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTMyMCw2ICszMjAsMTAgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsK
ICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51
bGxlZCBvdXQuCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgogICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3Q7CiAKICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KQEAgLTQyMCw2ICs0MjQsMjcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQogICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEq
IGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
VG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUb3VjaFNjcm9sbGFibGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVl
OyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNPdmVyZmxvd1Njcm9sbCgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRT
Y3JvbGwoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kU2Nyb2xsKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRJc1VzZXJTY3JvbGwoYm9vbCBpc1VzZXJTY3JvbGwpIE9WRVJSSURFIHsg
bV9pblVzZXJTY3JvbGwgPSBpc1VzZXJTY3JvbGw7IH0KKworICAgIGJvb2wgaXNJblVzZXJTY3Jv
bGwoKSBjb25zdCB7IHJldHVybiBtX2luVXNlclNjcm9sbDsgfQorCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbEJvdW5kc09yaWdpblVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3Jv
bGxCb3VuZHNPcmlnaW5VcGRhdGU7IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsQm91bmRz
T3JpZ2luVXBkYXRlKGJvb2wgcmVxdWlyZXNVcGRhdGUgPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxCb3VuZHNPcmlnaW5VcGRhdGUgPSByZXF1aXJlc1VwZGF0ZTsgfQorCisgICAgYm9vbCBoYXNB
Y2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyNlbmRpZgorCiAgICAgaW50IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSkgY29uc3Q7CiAKQEAgLTcyOCw2ICs3NTMsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRp
Y0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9z
aXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3Np
dGlvbjsgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhib29s
IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorI2VuZGlmCisK
ICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaGFzVHJh
bnNmb3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFzIHRoZSB0cmFu
c2Zvcm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQpAQCAtMTA0NCw2ICsxMDc0
LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCiAgICAgLy8gUmVjdGFuZ2xlIGVuY29tcGFzc2lu
ZyB0aGUgc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplciByZWN0LgogICAgIEludFJlY3Qgc2Nyb2xs
Q29ybmVyQW5kUmVzaXplclJlY3QoKSBjb25zdDsKIApAQCAtMTIwNCw2ICsxMjM5LDEzIEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJl
YXNvbiA6IDI7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyAgICBib29sIG1faW5Vc2VyU2Nyb2xs
IDogMTsKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxCb3VuZHNPcmlnaW5VcGRhdGUgOiAxOwor
I2VuZGlmCisKICAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
ICAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGNlYTZhYjk5MDdh
OTY3N2ZkNDZjNDAzYjk5NTQwNWMzZmQ0ZWM3MmYuLjdiODkyNDYxYjgyOTFiMjBkY2E2MDFhNWFk
NjdkOTUzODRhY2M4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0zMTIsOCArMzEyLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcigpCiAgICAgICAgIG1fY2hpbGRDb250YWlu
bWVudExheWVyID0gY3JlYXRlR3JhcGhpY3NMYXllcigiVGlsZWRCYWNraW5nIEZsYXR0ZW5pbmcg
TGF5ZXIiKTsKIAogICAgIGlmIChtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKSB7CisjaWYg
IVBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gUGFnZSBzY2FsZSBpcyBhcHBsaWVkIGFib3ZlIHRo
ZSBSZW5kZXJWaWV3IG9uIGlPUy4KICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50
c09wYXF1ZSh0cnVlKTsKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRBcHBsaWVzUGFnZVNj
YWxlKCk7CisjZW5kaWYKICAgICB9CiAKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKQEAg
LTMzNCw2ICszMzcsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlH
cmFwaGljc0xheWVyKCkKICNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OmxheWVyV2lsbEJlRGVzdHJveWVkKCkKK3sKKyAgICBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNFbWJl
ZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIpLmFsbG93c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBQbHVnaW5WaWV3QmFzZSogcGx1Z2lu
Vmlld0Jhc2UgPSB0b1BsdWdpblZpZXdCYXNlKHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS53aWRn
ZXQoKSk7CisgICAgICAgIGlmIChwbHVnaW5WaWV3QmFzZSAmJiBtX2dyYXBoaWNzTGF5ZXItPmNv
bnRlbnRzTGF5ZXJGb3JNZWRpYSgpKQorICAgICAgICAgICAgcGx1Z2luVmlld0Jhc2UtPmRldGFj
aFBsdWdpbkxheWVyKCk7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpkZXN0cm95R3JhcGhpY3NMYXllcnMoKQogewogICAgIGlmIChtX2dyYXBoaWNzTGF5ZXIp
IHsKQEAgLTM5NSwyNyArNDEwLDQ4IEBAIHN0YXRpYyBib29sIGhhc05vblplcm9UcmFuc2Zvcm1P
cmlnaW4oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKICAgICAgICAgfHwgKHN0eWxlLnRy
YW5zZm9ybU9yaWdpblkoKS50eXBlKCkgPT0gRml4ZWQgJiYgc3R5bGUudHJhbnNmb3JtT3JpZ2lu
WSgpLnZhbHVlKCkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLy8gRklYTUU6IFdlIHNob3Vs
ZCBtZXJnZSB0aGUgY29uY2VwdCBvZiBSZW5kZXJMYXllcjo6e2hhc0FjY2VsZXJhdGVkVG91Y2hT
Y3JvbGxpbmcsIG5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZ30oKQorLy8gc28gdGhhdCB3ZSBjYW4g
cmVtb3ZlIHRoaXMgaU9TLXNwZWNpZmljIHZhcmlhbnQuCitzdGF0aWMgYm9vbCBsYXllck9yQW5j
ZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcoUmVuZGVyTGF5ZXImIGxheWVyKQoreworICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJl
bnQoKSkgeworICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQWNj
ZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorI2Vsc2UKIHN0YXRpYyBib29sIGxheWVyT3JBbmNl
c3RvcklzVHJhbnNmb3JtZWRPclVzaW5nQ29tcG9zaXRlZFNjcm9sbGluZyhSZW5kZXJMYXllciYg
bGF5ZXIpCiB7CiAgICAgZm9yIChSZW5kZXJMYXllciogY3VyciA9ICZsYXllcjsgY3VycjsgY3Vy
ciA9IGN1cnItPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8
fCBjdXJyLT5uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KLQorI2VuZGlmCisgICAg
CiBib29sIFJlbmRlckxheWVyQmFja2luZzo6c2hvdWxkQ2xpcENvbXBvc2l0ZWRCb3VuZHMoKSBj
b25zdAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gU2Nyb2xsYmFyIGxheWVycyB1c2Ug
dGhpcyBsYXllciBmb3IgcmVsYXRpdmUgcG9zaXRpb25pbmcsIHNvIGRvbid0IGNsaXAuCiAgICAg
aWYgKGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAKICAgICBpZiAobV91c2lu
Z1RpbGVkQ2FjaGVMYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBpZiAobGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3Np
dGVkU2Nyb2xsaW5nKG1fb3duaW5nTGF5ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjZWxz
ZQorICAgIGlmIChsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcobV9vd25p
bmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYgKG1fb3du
aW5nTGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25z
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNiw5ICs1NTIsMTUgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICAgICAK
ICAgICBib29sIG5lZWRzRGVzY2VuZGVudHNDbGlwcGluZ0xheWVyID0gY29tcG9zaXRvcigpLmNs
aXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhtX293bmluZ0xheWVyKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAvLyBPdXIgc2Nyb2xsaW5nIGxheWVyIHdpbGwgY2xpcC4KKyAgICBpZiAobV9v
d25pbmdMYXllci5oYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisgICAgICAgIG5lZWRz
RGVzY2VuZGVudHNDbGlwcGluZ0xheWVyID0gZmFsc2U7CisjZWxzZQogICAgIC8vIE91ciBzY3Jv
bGxpbmcgbGF5ZXIgd2lsbCBjbGlwLgogICAgIGlmIChtX293bmluZ0xheWVyLm5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZygpKQogICAgICAgICBuZWVkc0Rlc2NlbmRlbnRzQ2xpcHBpbmdMYXllciA9
IGZhbHNlOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogICAgIGlmICh1cGRhdGVBbmNlc3Rv
ckNsaXBwaW5nTGF5ZXIoY29tcG9zaXRvcigpLmNsaXBwZWRCeUFuY2VzdG9yKG1fb3duaW5nTGF5
ZXIpKSkKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKQEAgLTUyOSw4ICs1NzEs
MTMgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1
cmF0aW9uKCkKICAgICBpZiAodXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhyZXF1aXJlc0hv
cml6b250YWxTY3JvbGxiYXJMYXllcigpLCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIo
KSwgcmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpKSkKICAgICAgICAgbGF5ZXJDb25maWdDaGFu
Z2VkID0gdHJ1ZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAodXBkYXRlU2Nyb2xsaW5n
TGF5ZXJzKG1fb3duaW5nTGF5ZXIuaGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKSkKKyAg
ICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKKyNlbHNlCiAgICAgaWYgKHVwZGF0ZVNj
cm9sbGluZ0xheWVycyhtX293bmluZ0xheWVyLm5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpKSkK
ICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAKICAgICBpZiAobGF5ZXJDb25maWdDaGFuZ2VkKQogICAgICAgICB1cGRhdGVJbnRlcm5h
bEhpZXJhcmNoeSgpOwpAQCAtNTYyLDggKzYwOSwxNSBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR3JhcGhpY3NMYXllckNvbmZpZ3VyYXRpb24oKQogCiAgICAgaWYgKHJlbmRlcmVy
KCkuaXNFbWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QoJnJlbmRlcmVy
KCkpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgUGx1Z2luVmll
d0Jhc2UqIHBsdWdpblZpZXdCYXNlID0gdG9QbHVnaW5WaWV3QmFzZSh0b1JlbmRlcldpZGdldCgm
cmVuZGVyZXIoKSktPndpZGdldCgpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChw
bHVnaW5WaWV3QmFzZSAmJiAhbV9ncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyRm9yTWVkaWEo
KSkgeworICAgICAgICAgICAgcGx1Z2luVmlld0Jhc2UtPmRldGFjaFBsdWdpbkxheWVyKCk7Cisg
ICAgICAgICAgICBwbHVnaW5WaWV3QmFzZS0+YXR0YWNoUGx1Z2luTGF5ZXIoKTsKKyAgICAgICAg
fQorI2Vsc2UKICAgICAgICAgaWYgKCFwbHVnaW5WaWV3QmFzZS0+c2hvdWxkTm90QWRkTGF5ZXIo
KSkKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb01lZGlhKHBsdWdp
blZpZXdCYXNlLT5wbGF0Zm9ybUxheWVyKCkpOworI2VuZGlmCiAgICAgfQogI2lmIEVOQUJMRShW
SURFTykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzVmlkZW8oKSkgewpAQCAtNjY5LDYgKzcy
MywxOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21l
dHJ5KCkKICAgICBlbHNlCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHJl
bmRlcmVyKCkudmlldygpLmRvY3VtZW50UmVjdCgpLmxvY2F0aW9uKCk7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBjb21wQW5jZXN0b3ItPmhhc0FjY2VsZXJh
dGVkVG91Y2hTY3JvbGxpbmcoKSkgeworICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRv
UmVuZGVyQm94KCZjb21wQW5jZXN0b3ItPnJlbmRlcmVyKCkpOworICAgICAgICBJbnRSZWN0IHBh
ZGRpbmdCb3gocmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHJlbmRlckJveC0+Ym9yZGVyVG9wKCks
CisgICAgICAgICAgICByZW5kZXJCb3gtPndpZHRoKCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQo
KSAtIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwKKyAgICAgICAgICAgIHJlbmRlckJveC0+aGVp
Z2h0KCkgLSByZW5kZXJCb3gtPmJvcmRlclRvcCgpIC0gcmVuZGVyQm94LT5ib3JkZXJCb3R0b20o
KSk7CisKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSBjb21wQW5jZXN0b3ItPnNjcm9s
bGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24g
PSBwYWRkaW5nQm94LmxvY2F0aW9uKCkgLSBzY3JvbGxPZmZzZXQ7CisgICAgfQorI2VuZGlmCisK
ICAgICBpZiAoY29tcEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rvci0+bmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpIHsKICAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChj
b21wQW5jZXN0b3ItPnJlbmRlcmVyKCkpOwogICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldCA9
IGNvbXBBbmNlc3Rvci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC04MjIsNiArODg4LDM1
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnko
KQogICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHBhZGRp
bmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwog
CiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNldFNpemUocGFkZGluZ0JveC5zaXplKCkpOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgSW50U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNl
dCA9IG1fc2Nyb2xsaW5nTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOworICAgICAgICBtX3Nj
cm9sbGluZ0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIoSW50UG9pbnQoKSAtIHBhZGRpbmdC
b3gubG9jYXRpb24oKSk7CisgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBv
bGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbGluZ0xheWVyLT5vZmZzZXRGcm9tUmVu
ZGVyZXIoKTsKKworICAgICAgICBpZiAobV9vd25pbmdMYXllci5pc0luVXNlclNjcm9sbCgpKSB7
CisgICAgICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdl
IGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNl
IHRoYXQgd2lsbCBjYXVzZQorICAgICAgICAgICAgLy8gaml0dGVyLiBTZXQgYSBmbGFnIHRvIGVu
c3VyZSB0aGF0IHdlIHN5bmMgdXAgbGF0ZXIuCisgICAgICAgICAgICBtX293bmluZ0xheWVyLnNl
dFJlcXVpcmVzU2Nyb2xsQm91bmRzT3JpZ2luVXBkYXRlKHRydWUpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zm
c2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBv
c2l0aW9uIG9uIHRoZSBzdWJsYXllci4KKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNl
dEJvdW5kc09yaWdpbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC53aWR0aCgpLCBzY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3Jv
bGxCb3VuZHNPcmlnaW5VcGRhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmlu
Z0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKworICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5
ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2Ny
b2xsU2l6ZSAhPSBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94
T2Zmc2V0Q2hhbmdlZCkKKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CisKKyAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXRT
aXplKHNjcm9sbFNpemUpOworICAgICAgICAvLyBTY3JvbGxpbmcgdGhlIGNvbnRlbnQgbGF5ZXIg
ZG9lcyBub3QgbmVlZCB0byB0cmlnZ2VyIGEgcmVwYWludC4gVGhlIG9mZnNldCB3aWxsIGJlIGNv
bXBlbnNhdGVkIGF3YXkgZHVyaW5nIHBhaW50aW5nLgorICAgICAgICAvLyBGSVhNRTogVGhlIHBh
aW50IG9mZnNldCBhbmQgdGhlIHNjcm9sbCBvZmZzZXQgc2hvdWxkIHJlYWxseSBiZSBzZXBhcmF0
ZSBjb25jZXB0cy4KKyAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXRPZmZzZXRG
cm9tUmVuZGVyZXIocGFkZGluZ0JveC5sb2NhdGlvbigpIC0gSW50UG9pbnQoKSAtIHNjcm9sbE9m
ZnNldCwgR3JhcGhpY3NMYXllcjo6RG9udFNldE5lZWRzRGlzcGxheSk7CisgICAgICAgIAorICAg
ICAgICBjb21wb3NpdG9yKCkuc2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZCgmbV9vd25pbmdM
YXllcik7CisjZWxzZQogICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoLXNjcm9sbE9mZnNldC53aWR0aCgpLCAtc2Nyb2xsT2Zmc2V0LmhlaWdo
dCgpKSk7CiAKICAgICAgICAgSW50U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCA9IG1fc2Ny
b2xsaW5nTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtODQwLDYgKzkzNSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAg
ICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldFNpemUoc2Nyb2xsU2l6ZSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgcGFpbnQgb2Zmc2V0IGFuZCB0aGUgc2Nyb2xsIG9mZnNldCBzaG91
bGQgcmVhbGx5IGJlIHNlcGFyYXRlIGNvbmNlcHRzLgogICAgICAgICBtX3Njcm9sbGluZ0NvbnRl
bnRzTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihzY3JvbGxpbmdDb250ZW50c09mZnNldCwg
R3JhcGhpY3NMYXllcjo6RG9udFNldE5lZWRzRGlzcGxheSk7CisjZW5kaWYKIAogICAgICAgICBp
ZiAobV9mb3JlZ3JvdW5kTGF5ZXIpIHsKICAgICAgICAgICAgIG1fZm9yZWdyb3VuZExheWVyLT5z
ZXRTaXplKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2l6ZSgpKTsKQEAgLTkwOSw2ICsxMDA1
LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZURpcmVjdGx5Q29tcG9zaXRlZENv
bnRlbnRzKGJvb2wgaXNTaW1wbGVDb250YWluZXIKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnJlZ2lzdGVyU2Nyb2xsaW5nTGF5ZXJzKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgY29t
cG9zaXRvcigpLnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWludFN0YXR1cyhtX293bmluZ0xheWVyKTsK
KyNlbHNlCiAgICAgLy8gUmVnaXN0ZXIgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGFuZCB0aGVpciBj
b250YWluZXJzIHdpdGggdGhlIHNjcm9sbGluZyBjb29yZGluYXRvci4KICAgICBTY3JvbGxpbmdD
b29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBzY3JvbGxpbmdDb29yZGluYXRvckZy
b21MYXllcihtX293bmluZ0xheWVyKTsKICAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQpA
QCAtOTI0LDYgKzEwMjMsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cmVnaXN0ZXJTY3Jv
bGxpbmdMYXllcnMoKQogICAgIC8vIGxheWVyIGFzIGEgY29udGFpbmVyLgogICAgIGJvb2wgaXND
b250YWluZXIgPSBtX293bmluZ0xheWVyLmhhc1RyYW5zZm9ybSgpICYmICFtX293bmluZ0xheWVy
LmlzUm9vdExheWVyKCk7CiAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldExheWVySXNDb250
YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGNoaWxkRm9yU3VwZXJsYXllcnMoKSwgaXNDb250
YWluZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRl
cm5hbEhpZXJhcmNoeSgpCkBAIC0xMzIwLDggKzE0MjAsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQog
ICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChzY3JvbGxp
bmdDb29yZGluYXRvcikKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Ny
b2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZSgmbV9vd25pbmdMYXllcik7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIucGFyZW50KCkpCisgICAg
ICAgICAgICAgICAgY29tcG9zaXRvcigpLnNjcm9sbGluZ0xheWVyQWRkZWRPclVwZGF0ZWQoJm1f
b3duaW5nTGF5ZXIpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fc2Nyb2xs
aW5nTGF5ZXIpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmICghcmVuZGVyZXIoKS5k
b2N1bWVudEJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2Nyb2xs
aW5nTGF5ZXJSZW1vdmVkKCZtX293bmluZ0xheWVyLCBtX3Njcm9sbGluZ0xheWVyLT5wbGF0Zm9y
bUxheWVyKCksIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyNl
bmRpZgogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKSk7
CiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXIgPSBudWxscHRyOwpAQCAtMTMzNCw4ICsxNDQyLDEw
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBu
ZWVkc1Njcm9sbGluZ0xheWVycykKICAgICBpZiAobGF5ZXJDaGFuZ2VkKSB7CiAgICAgICAgIHVw
ZGF0ZUludGVybmFsSGllcmFyY2h5KCk7CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UGFp
bnRpbmdQaGFzZShwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkpOworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
ICAgIGNvbXBvc2l0b3IoKS5zY3JvbGxpbmdMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyKTsK
KyNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBsYXllckNoYW5nZWQ7CkBAIC0xNzI1LDggKzE4
MzUsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudChi
b29sIGlzU2ltcGxlQ29udGFpbmVyKSBjb25zdAogICAgIGlmIChyZW5kZXJlcigpLmlzVmlkZW8o
KSAmJiB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLnNob3VsZERpc3BsYXlWaWRlbygpKQogICAg
ICAgICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgp
OwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCi0jZWxpZiBFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKSAmJiBVU0UoQ0EpCisjZWxpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCiAgICAg
aWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMoJnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gbV9v
d25pbmdMYXllci5oYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwogI2VuZGlmCkBAIC0x
OTAzLDcgKzIwMTMsMTQgQEAgR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJCYWNraW5nOjpwYXJl
bnRGb3JTdWJsYXllcnMoKSBjb25zdAogICAgIGlmIChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIp
CiAgICAgICAgIHJldHVybiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIuZ2V0KCk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBpT1Mtc3BlY2lm
aWMgY29kZSBwYXRoPworICAgIGlmIChHcmFwaGljc0xheWVyKiBjbGlwcGluZ0xheWVyID0gdGhp
cy0+Y2xpcHBpbmdMYXllcigpKQorICAgICAgICByZXR1cm4gY2xpcHBpbmdMYXllcjsKKyAgICBy
ZXR1cm4gbV9ncmFwaGljc0xheWVyLmdldCgpOworI2Vsc2UKICAgICByZXR1cm4gbV9jaGlsZENv
bnRhaW5tZW50TGF5ZXIgPyBtX2NoaWxkQ29udGFpbm1lbnRMYXllci5nZXQoKSA6IG1fZ3JhcGhp
Y3NMYXllci5nZXQoKTsKKyNlbmRpZgogfQogCiBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckJh
Y2tpbmc6OmNoaWxkRm9yU3VwZXJsYXllcnMoKSBjb25zdApAQCAtMTkyMyw3ICsyMDQwLDcgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50c0ludG9XaW5kb3coKSBjb25zdAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9vd25pbmdMYXllci5pc1Jvb3RMYXllcigpKSB7
Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKElPUykgfHwgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQogICAgICAgICBpZiAoY29tcG9zaXRvcigpLmluRm9yY2VkQ29tcG9zaXRp
bmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTIwMTYsNiAr
MjEzMywxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxh
eUluUmVjdChjb25zdCBJbnRSZWN0JiByKQogICAgIGlmIChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5
ZXIgJiYgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewogICAgICAg
ICBJbnRSZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKICAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92
ZSgtbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAvLyBBY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkgYmFrZXMgc2Nyb2xs
T2Zmc2V0IGludG8gb2Zmc2V0RnJvbVJlbmRlcmVyIG9uIGlPUy4KKyAgICAgICAgbGF5ZXJEaXJ0
eVJlY3QubW92ZSgtbV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKSk7CisjZW5kaWYKICAgICAg
ICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJE
aXJ0eVJlY3QpOwogICAgIH0KIH0KQEAgLTIwMjUsNyArMjE0NiwxMiBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllciwgR3JhcAogICAgICAgICAgICAgICAgICAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZp
b3IsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIHBhaW50aW5nUGhhc2UpCiB7CiAgICAgaWYg
KHBhaW50c0ludG9XaW5kb3coKSB8fCBwYWludHNJbnRvQ29tcG9zaXRlZEFuY2VzdG9yKCkpIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQorICAgICAgICAvLyBGSVhNRTogTG9va3MgbGlrZSB0aGUgQ0FM
YXllciB0cmVlIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIEdyYXBoaWNzTGF5ZXIgaGVpcmFyY2h5
CisgICAgICAgIC8vIHdoZW4gcGFnZXMgYXJlIHJlc3RvcmVkIGZyb20gdGhlIFBhZ2VDYWNoZS4K
KyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg3MTI1ODc+IEFTU0VSVDogV2hlbiBHb2luZyBC
YWNrIHRvIFBhZ2Ugd2l0aCBQbHVnaW5zIGluIFBhZ2VDYWNoZQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTgzLDYg
KzIzMDksMTggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnNob3VsZER1bXBQcm9wZXJ0eUZv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyLAogICAgIHJldHVybiB0cnVlOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQorZmxvYXQgUmVuZGVyTGF5ZXJCYWNraW5nOjptaW5pbXVtRG9j
dW1lbnRTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS5taW5pbXVtRG9j
dW1lbnRTY2FsZSgpOworfQorCitib29sIFJlbmRlckxheWVyQmFja2luZzo6YWxsb3dDb21wb3Np
dGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBjb21wb3Np
dG9yKCkuYWxsb3dDb21wb3NpdGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24oKTsKK30KKyNlbmRp
ZgorCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnZlcmlmeU5vdFBh
aW50aW5nKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAppbmRleCAyNGEzYWZiMjk5OWU1ODU0ZTEyMDcwZmQwMjRiZjg4NjgxZjI5MWQ5Li5iYzcx
MWQ1NGQwOGI0MWY2ZTZjMDIzYzUzMjRmOWY4NWM1ZjlmM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCkBAIC02MCw2ICs2MCwxMCBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJCYWNraW5nKFJlbmRlckxheWVyJik7CiAgICAg
flJlbmRlckxheWVyQmFja2luZygpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgbGF5
ZXJXaWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgorCiAgICAgUmVuZGVyTGF5ZXImIG93bmluZ0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25pbmdMYXllcjsgfQogCiAgICAgZW51bSBVcGRhdGVB
ZnRlckxheW91dEZsYWcgewpAQCAtMTcyLDYgKzE3NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKikgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGdldEN1cnJlbnRUcmFuc2Zvcm0oY29uc3Qg
R3JhcGhpY3NMYXllciosIFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3QgT1ZFUlJJREU7CiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBmbG9hdCBtaW5pbXVtRG9jdW1lbnRTY2Fs
ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd0NvbXBvc2l0aW5nTGF5
ZXJWaXN1YWxEZWdyYWRhdGlvbigpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVh
bCBib29sIGlzVHJhY2tpbmdSZXBhaW50cygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGREdW1wUHJvcGVydHlGb3JMYXllcihjb25z
dCBHcmFwaGljc0xheWVyKiwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKSBjb25zdCBPVkVSUklE
RTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKaW5kZXggMWM2MjI4YzQzNDg4MTQxN2NjZmYxMDNkZWI2NDBkMzE5MGQxYjI2NS4uMDNl
MDZmMTY3OWNlYTAxNDVlNzcyMzRjZGIwNTEzNTIwMTk5ZWE1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTY2LDYgKzY2
LDEyIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJSZWdpb24u
aCIKKyNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAjaW5jbHVkZSAi
SFRNTEF1ZGlvRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKQEAgLTg4
LDcgKzk0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBjYW52
YXNBcmVhVGhyZXNob2xkUmVxdWlyaW5nQ29tcG9zaXRpbmcgPSA1MCAqIDEwMDsKIC8vIER1cmlu
ZyBwYWdlIGxvYWRpbmcgZGVsYXkgbGF5ZXIgZmx1c2hlcyB1cCB0byB0aGlzIG1hbnkgc2Vjb25k
cyB0byBhbGxvdyB0aGVtIGNvYWxlc2NlLCByZWR1Y2luZyB3b3JrbG9hZC4KKyNpZiBQTEFURk9S
TShJT1MpCitzdGF0aWMgY29uc3QgZG91YmxlIHRocm90dGxlZExheWVyRmx1c2hJbml0aWFsRGVs
YXkgPSAuNTsKK3N0YXRpYyBjb25zdCBkb3VibGUgdGhyb3R0bGVkTGF5ZXJGbHVzaERlbGF5ID0g
MS41OworI2Vsc2UKIHN0YXRpYyBjb25zdCBkb3VibGUgdGhyb3R0bGVkTGF5ZXJGbHVzaERlbGF5
ID0gLjU7CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIApAQCAtMzYwLDYg
KzM3MSwxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNo
KGJvb2wgY2FuVGhyb3R0bGUpCiB7CiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJzKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoY2FuVGhyb3R0bGUpCisgICAgICAgIHN0YXJ0SW5p
dGlhbExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7CisjZW5kaWYKKwogICAgIGlmIChjYW5UaHJv
dHRsZSAmJiBpc1Rocm90dGxpbmdMYXllckZsdXNoZXMoKSkgewogICAgICAgICBtX2hhc1BlbmRp
bmdMYXllckZsdXNoID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzY3LDYgKzM4MywxNiBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKGJvb2wgY2Fu
VGhyb3R0bGUpCiAgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCitDaHJvbWVDbGllbnQqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2hyb21lQ2xpZW50
KCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZy
YW1lKCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuICZwYWdlLT5jaHJvbWUoKS5jbGllbnQoKTsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3Qp
CiB7CiAgICAgLy8gRnJhbWVWaWV3OjpmbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJm
cmFtZXMoKSBmbHVzaGVzIGVhY2ggc3ViZnJhbWUsCkBAIC0zNzcsNiArNDAzLDkgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyhib29sIGlzRmx1
c2hSb290KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHJvb3RMYXllckF0dGFjaG1l
bnQoKSA9PSBSb290TGF5ZXJVbmF0dGFjaGVkKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICBzdGFydExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7CisjZW5kaWYKICAgICAgICAgbV9zaG91
bGRGbHVzaE9uUmVhdHRhY2ggPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg4
LDI2ICs0MTcsODIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcyhib29sIGlzRmx1c2hSb290KQogICAgIG1fZmx1c2hpbmdMYXllcnMgPSB0cnVl
OwogCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVy
KCkpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJvb3RMYXllci0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlKGZyYW1lVmlldy52aXNpYmxlRXh0ZW50Q29udGVudFJlY3QoKSk7CisjZWxzZQog
ICAgICAgICAvLyBIYXZpbmcgYSBtX2NsaXBMYXllciBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBkb2lu
ZyBzY3JvbGxpbmcgdmlhIEdyYXBoaWNzTGF5ZXJzLgogICAgICAgICBJbnRSZWN0IHZpc2libGVS
ZWN0ID0gbV9jbGlwTGF5ZXIgPyBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy5jb250ZW50
c1NpemUoKSkgOiBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIHJvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKKyNlbmRpZgogICAgIH0K
ICAgICAKICAgICBBU1NFUlQobV9mbHVzaGluZ0xheWVycyk7CiAgICAgbV9mbHVzaGluZ0xheWVy
cyA9IGZhbHNlOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHVwZGF0ZUN1c3RvbUxheWVyc0Fm
dGVyRmx1c2goKTsKKworICAgIENocm9tZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2hyb21lQ2xp
ZW50KCk7CisgICAgaWYgKGNsaWVudCAmJiBpc0ZsdXNoUm9vdCkKKyAgICAgICAgY2xpZW50LT5k
aWRGbHVzaENvbXBvc2l0aW5nTGF5ZXJzKCk7CisjZWxzZQogICAgIGZvciAoYXV0byBpdCA9IG1f
dmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGUuYmVnaW4oKSwgZW5kID0gbV92
aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQogICAgICAgICByZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKCoq
aXQpOwogICAgIG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGUuY2xlYXIo
KTsKLQorI2VuZGlmCiAgICAgc3RhcnRMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpOwogfQogCisj
aWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgc2Nyb2xsYmFySGFzRGlzcGxheU5vbmUoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKCFzY3JvbGxiYXIgfHwgIXNjcm9sbGJhci0+
aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBzY3JvbGxiYXJTdHlsZSA9IHN0YXRpY19jYXN0PFJlbmRlclNjcm9sbGJh
cio+KHNjcm9sbGJhciktPmdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhckJHUGFydCwg
U0NST0xMQkFSKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyU3R5bGUgJiYgc2Nyb2xsYmFyU3R5bGUt
PmRpc3BsYXkoKSA9PSBOT05FOworfQorCisvLyBGSVhNRTogQ2FuIHdlIG1ha2UgfGxheWVyfCBj
b25zdCBSZW5kZXJMYXllciY/CitzdGF0aWMgdm9pZCB1cGRhdGVTY3JvbGxpbmdMYXllcldpdGhD
bGllbnQoUmVuZGVyTGF5ZXImIGxheWVyLCBDaHJvbWVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBp
ZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBi
YWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsKKyAgICBBU1NFUlQoYmFja2luZyk7CisKKyAgICBi
b29sIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciA9ICFzY3JvbGxiYXJIYXNEaXNwbGF5Tm9uZShs
YXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICBib29sIGFsbG93VmVydGljYWxTY3Jv
bGxiYXIgPSAhc2Nyb2xsYmFySGFzRGlzcGxheU5vbmUobGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFy
KCkpOworICAgIGNsaWVudC0+YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVy
ZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIo
KSwgYmFja2luZy0+c2Nyb2xsaW5nQ29udGVudHNMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksCisg
ICAgICAgIEludFNpemUobGF5ZXItPnNjcm9sbFdpZHRoKCksIGxheWVyLT5zY3JvbGxIZWlnaHQo
KSksIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dWZXJ0aWNhbFNjcm9sbGJhcik7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDdXN0b21MYXllcnNBZnRlckZs
dXNoKCkKK3sKKyAgICByZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKTsKKwor
ICAgIGlmICghbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlLmlzRW1wdHkoKSkgeworICAg
ICAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpOwor
CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZS5i
ZWdpbigpLCBlbmQgPSBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRhdGUuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudCgq
Kml0LCBjaHJvbWVDbGllbnQpOworICAgICAgICBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRh
dGUuY2xlYXIoKTsKKyAgICB9CisgICAgbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlLmNs
ZWFyKCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNo
Q2hhbmdlc0ZvckxheWVyKFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKIHsKICAgICBpZiAobV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmNv
bnRhaW5zKCZsYXllcikpCiAgICAgICAgIG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRp
bmdVcGRhdGUuYWRkKCZsYXllcik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKG1fc2Ny
b2xsaW5nTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpCisgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXJz
TmVlZGluZ1VwZGF0ZS5hZGQoJmxheWVyKTsKKyNlbmRpZgorCiAgICAgUmVuZGVyTGF5ZXJCYWNr
aW5nKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlmIChiYWNraW5nLT5iYWNrZ3Jv
dW5kTGF5ZXJQYWludHNGaXhlZFJvb3RCYWNrZ3JvdW5kKCkgJiYgZ3JhcGhpY3NMYXllciA9PSBi
YWNraW5nLT5iYWNrZ3JvdW5kTGF5ZXIoKSkKICAgICAgICAgZml4ZWRSb290QmFja2dyb3VuZExh
eWVyQ2hhbmdlZCgpOwpAQCAtNDI4LDcgKzUxMywxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6ZGlkQ2hhbmdlVmlzaWJsZVJlY3QoKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25z
dCBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKKworI2lm
IFBMQVRGT1JNKElPUykKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZnJhbWVWaWV3LnZpc2li
bGVFeHRlbnRDb250ZW50UmVjdCgpOworI2Vsc2UKICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0g
bV9jbGlwTGF5ZXIgPyBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy5jb250ZW50c1NpemUo
KSkgOiBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKICAgICBpZiAoIXJv
b3RMYXllci0+dmlzaWJsZVJlY3RDaGFuZ2VSZXF1aXJlc0ZsdXNoKHZpc2libGVSZWN0KSkKICAg
ICAgICAgcmV0dXJuOwogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaE5vdygpOwpAQCAtODc3LDkgKzk2
NywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKE92ZXJs
YXBNYXAmIG92ZXJsYXBNYXAsIFJlbmRlckxheWVyJgogICAgIH0KIAogICAgIEludFJlY3QgY2xp
cFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5k
ZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCgmcm9vdFJlbmRlckxheWVyKCksIDAsIEFic29sdXRl
Q2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMu
CisKKyAgICAvLyBPbiBpT1MsIHBhZ2VTY2FsZUZhY3RvcigpIGlzIG5vdCBhcHBsaWVkIGJ5IFJl
bmRlclZpZXcsIHNvIHdlIHNob3VsZCBub3Qgc2NhbGUgaGVyZS4KKyAgICAvLyBGSVhNRTogU2V0
IFNldHRpbmdzOjpkZWxlZ2F0ZXNQYWdlU2NhbGluZyB0byB0cnVlIGZvciBpT1MuCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MuZGVsZWdh
dGVzUGFnZVNjYWxpbmcoKSkKICAgICAgICAgY2xpcFJlY3Quc2NhbGUocGFnZVNjYWxlRmFjdG9y
KCkpOworI2VuZGlmCiAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRzKTsKICAgICBv
dmVybGFwTWFwLmFkZCgmbGF5ZXIsIGNsaXBSZWN0KTsKIH0KQEAgLTExMTksOCArMTIxNCwxMSBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzKFJlbmRlckxheWVyKiBhbmNlc3RvcgogICAgIC8vIHRvIGJlIGNvbXBvc2l0ZWQsIHRoZW4g
d2UgY2FuIGRyb3Agb3V0IG9mIGNvbXBvc2l0aW5nIG1vZGUgYWx0b2dldGhlci4gSG93ZXZlciwg
ZG9uJ3QgZHJvcCBvdXQgb2YgY29tcG9zaXRpbmcgbW9kZQogICAgIC8vIGlmIHRoZXJlIGFyZSBj
b21wb3NpdGVkIGxheWVycyB0aGF0IHdlIGRpZG4ndCBoaXQgaW4gb3VyIHRyYXZlcnNhbCAoZS5n
LiBiZWNhdXNlIG9mIHZpc2liaWxpdHk6aGlkZGVuKS4KICAgICBpZiAobGF5ZXIuaXNSb290TGF5
ZXIoKSAmJiAhY2hpbGRTdGF0ZS5tX3N1YnRyZWVJc0NvbXBvc2l0aW5nICYmICFyZXF1aXJlc0Nv
bXBvc2l0aW5nTGF5ZXIobGF5ZXIpICYmICFtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlICYmICFoYXNB
bnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhsYXllcikpIHsKKyAgICAgICAgLy8gRG9uJ3Qg
ZHJvcCBvdXQgb2YgY29tcG9zaXRpbmcgb24gaU9TLCBiZWNhdXNlIHdlIG1heSBmbGFzaC4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS84MzQ4MzM3Pi4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBl
bmFibGVDb21wb3NpdGluZ01vZGUoZmFsc2UpOwogICAgICAgICB3aWxsQmVDb21wb3NpdGVkID0g
ZmFsc2U7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgLy8gSWYgdGhlIGxheWVyIGlzIGdvaW5n
IGludG8gY29tcG9zaXRpbmcgbW9kZSwgcmVwYWludCBpdHMgb2xkIGxvY2F0aW9uLgpAQCAtMTY5
OSwxMSArMTc5NywxOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0SXNJbldpbmRv
dyhib29sIGlzSW5XaW5kb3cpCiAKICAgICAgICAgUm9vdExheWVyQXR0YWNobWVudCBhdHRhY2ht
ZW50ID0gc2hvdWxkUHJvcGFnYXRlQ29tcG9zaXRpbmdUb0VuY2xvc2luZ0ZyYW1lKCkgPyBSb290
TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lIDogUm9vdExheWVyQXR0YWNoZWRWaWFDaHJv
bWVDbGllbnQ7CiAgICAgICAgIGF0dGFjaFJvb3RMYXllcihhdHRhY2htZW50KTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIHJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygp
OworICAgICAgICByZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOworI2VuZGlmCiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKG1fcm9vdExheWVyQXR0YWNobWVudCA9PSBSb290TGF5ZXJVbmF0
dGFjaGVkKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGRldGFjaFJvb3RMYXllcigp
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdW5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMoKTsKKyAgICAgICAgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwor
I2VuZGlmCiAgICAgfQogfQogCkBAIC0xNzU4LDcgKzE4NjQsNyBAQCBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6aGFzM0RDb250ZW50KCkgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmFsbG93c0luZGVwZW5kZW50bHlDb21wb3NpdGVkRnJhbWVzKGNvbnN0IEZyYW1lVmll
dyogdmlldykKIHsKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogICAgIC8vIGZyYW1lcyBhcmUgb25seSBpbmRlcGVuZGVudGx5IGNvbXBvc2l0
ZWQgaW4gTWFjIHByZS1XZWJLaXQyLgogICAgIHJldHVybiB2aWV3LT5wbGF0Zm9ybVdpZGdldCgp
OwogI2Vsc2UKQEAgLTE4MzIsNiArMTkzOCw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSCiAg
ICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oKnJlbmRlcmVyKQogICAg
ICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycygqcmVuZGVyZXIpCiAgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbigqcmVuZGVyZXIsICpyZW5kZXJlci0+
bGF5ZXIoKSwgdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pCisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsaW5nKCpy
ZW5kZXJlcikKKyNlbmRpZgogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZs
b3dTY3JvbGxpbmcoKnJlbmRlcmVyLT5sYXllcigpKQogICAgICAgICB8fCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yQmxlbmRpbmcoKnJlbmRlcmVyKTsKIH0KQEAgLTE4NzgsNyArMTk4NywxMSBAQCBi
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNPd25CYWNraW5nU3RvcmUoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyLCBjbwogICAgICAgICB8fCByZW5kZXJlci5pc1RyYW5zcGFyZW50
KCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzTWFzaygpCiAgICAgICAgIHx8IHJlbmRlcmVyLmhh
c1JlZmxlY3Rpb24oKQotICAgICAgICB8fCByZW5kZXJlci5oYXNGaWx0ZXIoKSkKKyAgICAgICAg
fHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHx8IHJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxpbmcocmVuZGVyZXIpCisjZW5kaWYKKyAgICAgICAg
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgCkBAIC0xOTM1LDYgKzIwNDgs
MTEgQEAgQ29tcG9zaXRpbmdSZWFzb25zIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhc29uc0Zv
ckNvbXBvc2l0aW5nKGNvbnN0IFJlbmRlckxheWUKICAgICBpZiAocmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBvc2l0aW9uKCpyZW5kZXJlciwgKnJlbmRlcmVyLT5sYXllcigpKSkKICAgICAgICAgcmVh
c29ucyB8PSByZW5kZXJlci0+c3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gPyBD
b21wb3NpdGluZ1JlYXNvblBvc2l0aW9uRml4ZWQgOiBDb21wb3NpdGluZ1JlYXNvblBvc2l0aW9u
U3RpY2t5OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChyZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yU2Nyb2xsaW5nKCpyZW5kZXJlcikpCisgICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdS
ZWFzb25PdmVyZmxvd1Njcm9sbGluZ1RvdWNoOworI2VuZGlmCisKICAgICBpZiAocmVxdWlyZXND
b21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKCpyZW5kZXJlci0+bGF5ZXIoKSkpCiAgICAg
ICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFzb25PdmVyZmxvd1Njcm9sbGluZ1RvdWNoOwog
CkBAIC0yMjE3LDEwICsyMzM1LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplCiAgICAgcmV0
dXJuIChhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKCZyZW5kZXJl
ciwgQ1NTUHJvcGVydHlPcGFjaXR5KQogICAgICAgICAgICAgJiYgKGluQ29tcG9zaXRpbmdNb2Rl
KCkgfHwgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6QW5pbWF0ZWRPcGFj
aXR5VHJpZ2dlcikpKQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSNpZiAhUExBVEZPUk0oTUFD
KSB8fCAoIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDgwKQorI2lmIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1BQykgfHwgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vMTA5MDcyNTE+IC0gV2ViS2l0MiBkb2Vzbid0IHN1cHBvcnQgQ0EgYW5pbWF0aW9ucyBv
ZiBDSSBmaWx0ZXJzIG9uIExpb24gYW5kIGJlbG93CiAgICAgICAgICAgICB8fCBhbmltQ29udHJv
bGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKCZyZW5kZXJlciwgQ1NTUHJvcGVydHlX
ZWJraXRGaWx0ZXIpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgfHwgKCFQTEFURk9STShJT1Mp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MCkKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpIHx8ICFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA4MAogI2VuZGlmIC8vIENTU19GSUxURVJTCiAgICAgICAgICAgICB8fCBh
bmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKCZyZW5kZXJlciwgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogfQpAQCAtMjI1NCw2ICsyMzcyLDEzIEBAIGJvb2wg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5kaXJlY3RSZWFz
b24oUmVuZGVyTGF5ZXJNb2RlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JT
Y3JvbGxpbmcoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHJlbmRlcmVyLmhhc0xheWVyKCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5k
ZXJlcikubGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpOworfQorI2VuZGlm
CisKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmls
dGVycyhSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCkBAIC0yMjc3LDEwICsyNDAyLDMxIEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcoUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjCiAjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBib29sIGlzU3Rp
Y2t5SW5BY2NlbGVyYXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydChjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiogZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxv
d0xheWVyID0gMCkKK3sKKyAgICBBU1NFUlQobGF5ZXIucmVuZGVyZXIoKS5pc1N0aWNreVBvc2l0
aW9uZWQoKSk7CisKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nT3ZlcmZsb3dMYXllciA9IGxh
eWVyLmVuY2xvc2luZ092ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxmKTsKKyAgICBpZiAoZW5j
bG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5oYXNBY2NlbGVy
YXRlZFRvdWNoU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0FjY2VsZXJhdGVk
T3ZlcmZsb3dMYXllcikKKyAgICAgICAgICAgICplbmNsb3NpbmdBY2NlbGVyYXRlZE92ZXJmbG93
TGF5ZXIgPSBlbmNsb3NpbmdPdmVyZmxvd0xheWVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gIWVuY2xvc2luZ092ZXJmbG93TGF5ZXI7Cit9CisjZW5kaWYKKwog
c3RhdGljIGJvb2wgaXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGxheWVy
LnJlbmRlcmVyKCkuaXNTdGlja3lQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiBpc1N0aWNr
eUluQWNjZWxlcmF0ZWRTY3JvbGxpbmdMYXllck9yVmlld3BvcnQobGF5ZXIpOworI2Vsc2UKICAg
ICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc1N0aWNreVBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0
dXJuICFsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CisjZW5k
aWYKIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSAhPSBGaXhl
ZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjk1LDYgKzI0NDEsMjEgQEAg
c3RhdGljIGJvb2wgaXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXJMYXllcjo6Vmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24qIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uKSBjb25zdAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAocmVuZGVyZXIuaXNT
dGlja3lQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gcG9zaXRp
b246Zml4ZWQgZWxlbWVudHMgdGhhdCBjcmVhdGUgdGhlaXIgb3duIHN0YWNraW5nIGNvbnRleHQg
KGUuZy4gaGF2ZSBhbiBleHBsaWNpdCB6LWluZGV4LAorICAgIC8vIG9wYWNpdHksIHRyYW5zZm9y
bSkgY2FuIGdldCB0aGVpciBvd24gY29tcG9zaXRlZCBsYXllci4gQSBzdGFja2luZyBjb250ZXh0
IGlzIHJlcXVpcmVkIG90aGVyd2lzZQorICAgIC8vIHotaW5kZXggYW5kIGNsaXBwaW5nIHdpbGwg
YmUgYnJva2VuLgorICAgIGlmICghKHJlbmRlcmVyLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYm
IHJlbmRlcmVyLnN0eWxlKCkucG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3JlbmRlclZpZXcuaGFzQ3VzdG9tRml4ZWRQb3Np
dGlvbihyZW5kZXJlciwgUmVuZGVyVmlldzo6Q2hlY2tDb250YWluaW5nQmxvY2spKSB7CisgICAg
ICAgIG1fcmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorI2Vsc2UKICAgICAvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50
cyB0aGF0IGNyZWF0ZSB0aGVpciBvd24gc3RhY2tpbmcgY29udGV4dCAoZS5nLiBoYXZlIGFuIGV4
cGxpY2l0IHotaW5kZXgsCiAgICAgLy8gb3BhY2l0eSwgdHJhbnNmb3JtKSBjYW4gZ2V0IHRoZWly
IG93biBjb21wb3NpdGVkIGxheWVyLiBBIHN0YWNraW5nIGNvbnRleHQgaXMgcmVxdWlyZWQgb3Ro
ZXJ3aXNlCiAgICAgLy8gei1pbmRleCBhbmQgY2xpcHBpbmcgd2lsbCBiZSBicm9rZW4uCkBAIC0y
MzE3LDYgKzI0NzgsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogCiAgICAgaWYgKGlzU3Rp
Y2t5KQogICAgICAgICByZXR1cm4gaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSAmJiBpc1ZpZXdw
b3J0Q29uc3RyYWluZWRGaXhlZE9yU3RpY2t5TGF5ZXIobGF5ZXIpOworI2VuZGlmCiAKICAgICBh
dXRvIGNvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5lcigpOwogICAgIC8vIElmIHRoZSByZW5k
ZXJlciBpcyBub3QgaG9va2VkIHVwIHlldCB0aGVuIHdlIGhhdmUgdG8gd2FpdCB1bnRpbCBpdCBp
cy4KQEAgLTIzNDcsNyArMjUwOSwxMSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVx
dWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogICAgIH0K
IAogICAgIC8vIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIHRoYXQgYXJlIGludmlzaWJsZSBpbiB0
aGUgY3VycmVudCB2aWV3IGRvbid0IGdldCB0aGVpciBvd24gbGF5ZXIuCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIExheW91dFJlY3Qgdmlld0JvdW5kcyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpOworI2Vsc2UKICAgICBMYXlvdXRSZWN0
IHZpZXdCb3VuZHMgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb25zdHJhaW5l
ZFZpc2libGVDb250ZW50UmVjdCgpOworI2VuZGlmCiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
cyA9IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91bmRzKCZsYXllciwgMCwgUmVuZGVyTGF5ZXI6OlVz
ZUxvY2FsQ2xpcFJlY3RJZlBvc3NpYmxlIHwgUmVuZGVyTGF5ZXI6OkluY2x1ZGVMYXllckZpbHRl
ck91dHNldHMgfCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlcwogICAgICAgICB8IFJlbmRl
ckxheWVyOjpFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMgfCBSZW5kZXJMYXllcjo6RG9udENvbnN0
cmFpbkZvck1hc2sgfCBSZW5kZXJMYXllcjo6SW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyk7
CiAgICAgLy8gTWFwIHRvIG1fcmVuZGVyVmlldyB0byBpZ25vcmUgcGFnZSBzY2FsZS4KQEAgLTI0
ODEsMjAgKzI2NDcsNTEgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVHJhY2tpbmdS
ZXBhaW50cygpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNUcmFja2luZ1JlcGFpbnRzOwogfQogCisj
aWYgUExBVEZPUk0oSU9TKQorZmxvYXQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjptaW5pbXVtRG9j
dW1lbnRTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpLm1pbmltdW1Eb2N1bWVudFNjYWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjphbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpIGNvbnN0
Cit7CisgICAgUGFnZSogcGFnZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnBh
Z2UoKTsKKyAgICByZXR1cm4gIXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS5hbGxvd0NvbXBvc2l0
aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpOworfQorI2VuZGlmCisKIGZsb2F0IFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICByZXR1cm4gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkuZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyNlbHNlCiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAg
ICByZXR1cm4gcGFnZSA/IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkgOiAxOworI2VuZGlmCiB9
CiAKIGZsb2F0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpLmRvY3VtZW50U2NhbGUoKTsKKyNlbHNlCiAgICAgUGFnZSogcGFnZSA9IHRoaXMt
PnBhZ2UoKTsKICAgICByZXR1cm4gcGFnZSA/IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpIDogMTsK
KyNlbmRpZgogfQogCiBmbG9hdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbnRlbnRzU2NhbGVN
dWx0aXBsaWVyRm9yTmV3VGlsZXMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0CiB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIFRpbGVDYWNoZSogdGlsZUNhY2hlID0gbnVsbHB0cjsKKyAgICBp
ZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKKyAgICAgICAgdGlsZUNhY2hlID0gcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpLnRpbGVDYWNoZSgpOworCisgICAgaWYgKCF0aWxlQ2FjaGUpCisg
ICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIHRpbGVDYWNoZS0+dGlsaW5nTW9kZSgpID09
IFRpbGVDYWNoZTo6Wm9vbWluZyA/IDAuMTI1IDogMTsKKyNlbmRpZgogICAgIHJldHVybiAxOwog
fQogCkBAIC0yODY5LDYgKzMwNjYsMTQgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVu
c3VyZVJvb3RMYXllcigpCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShGbG9h
dFNpemUob3ZlcmZsb3dSZWN0Lm1heFgoKSwgb3ZlcmZsb3dSZWN0Lm1heFkoKSkpOwogICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgIC8vIFBhZ2Ugc2NhbGUgaXMgYXBwbGllZCBhYm92ZSB0aGlz
IG9uIGlPUywgc28gd2UnbGwganVzdCBzYXkgdGhhdCBvdXIgcm9vdCBsYXllciBhcHBsaWVzIGl0
LgorICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUo
KTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2Ug
JiYgJnBhZ2UtPm1haW5GcmFtZSgpID09ICZmcmFtZSkKKyAgICAgICAgICAgIG1fcm9vdENvbnRl
bnRMYXllci0+c2V0QXBwbGllc1BhZ2VTY2FsZSgpOworI2VuZGlmCisKICAgICAgICAgLy8gTmVl
ZCB0byBjbGlwIHRvIHByZXZlbnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUg
dGhpcyBmcmFtZQogICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
dHJ1ZSk7CiAgICAgfQpAQCAtMzE0OSw3ICszMzU0LDExIEBAIEZpeGVkUG9zaXRpb25WaWV3cG9y
dENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUZpeGVkVmlld3BvcnRD
b25zCiB7CiAgICAgQVNTRVJUKGxheWVyLmlzQ29tcG9zaXRlZCgpKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IG1fcmVuZGVyVmlldy5mcmFtZVZp
ZXcoKS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpOworI2Vsc2UKICAgICBMYXlvdXRS
ZWN0IHZpZXdwb3J0UmVjdCA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0
cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKIAogICAgIEZpeGVkUG9zaXRpb25W
aWV3cG9ydENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOwogCkBAIC0zMTg1LDEwICszMzk0LDE3IEBA
IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUZpeGVkVmlld3BvcnRDb25zCiBTdGlja3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWlu
dHMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50
cyhSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheWVyLmlzQ29tcG9z
aXRlZCgpKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSBmb3Igc3RpY2tpZXMgY29uc3RyYWluZWQgYnkgYW4gZW5jbG9zaW5nIGNsaXBwaW5nIGxh
eWVyLgorICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGFzc2VydGlvbiBmYWlsIG9uIGlPUz8K
ICAgICBBU1NFUlQoIWxheWVyLmVuY2xvc2luZ092ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxm
KSk7CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBMYXlvdXRSZWN0IHZpZXdwb3J0
UmVjdCA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0
UmVjdCgpOworI2Vsc2UKICAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7Cisj
ZW5kaWYKIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciA9IHRvUmVuZGVyQm94
TW9kZWxPYmplY3QobGF5ZXIucmVuZGVyZXIoKSk7CiAKQEAgLTMyMDMsNiArMzQxOSw3IEBAIFN0
aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNv
bXB1dGVTdGlja3lWaWV3cG9ydENvCiAgICAgcmV0dXJuIGNvbnN0cmFpbnRzOwogfQogCisjaWYg
IVBMQVRGT1JNKElPUykKIHN0YXRpYyBSZW5kZXJMYXllckJhY2tpbmcqIG5lYXJlc3RTY3JvbGxp
bmdDb29yZGluYXRvckFuY2VzdG9yKFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBSZW5kZXJM
YXllciogYW5jZXN0b3IgPSBsYXllci5wYXJlbnQoKTsKQEAgLTMyMTYsOSArMzQzMywxNCBAQCBz
dGF0aWMgUmVuZGVyTGF5ZXJCYWNraW5nKiBuZWFyZXN0U2Nyb2xsaW5nQ29vcmRpbmF0b3JBbmNl
c3RvcihSZW5kZXJMYXllciYgbGF5ZQogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYK
IAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyT3JVcGRhdGVWaWV3cG9ydENv
bnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogeworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIC8vIE9uIGlPUywgd2UgYmF0Y2gtdXBkYXRl
IHZpZXdwb3J0LWNvbnN0cmFpbmVkIGxheWVycyBpbiB1cGRhdGVDdXN0b21MYXllcnNBZnRlckZs
dXNoKCkuCisjZWxzZQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBzdGlja3kgcG9z
aXRpb24gaGVyZSEgQW5kIHdlIHNob3VsZCBldmVudHVhbGwgc3VwcG9ydCBmaXhlZC9zdGlja3kg
ZWxlbWVudHMKICAgICAvLyB0aGF0IGFyZSBpbnNpZGUgbm9uLW1haW4gZnJhbWVzIG9uY2Ugd2Ug
Z2V0IG5vbi1tYWluIGZyYW1lcyBzY3JvbGxpbmcgd2l0aCB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuCiAgICAgaWYgKG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQpAQCAt
MzI1MiwxNiArMzQ3NCwxMTMgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVy
T3JVcGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIKICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWROb2RlKG5vZGVJRCwg
Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMobGF5ZXIpLCBiYWNraW5nLT5ncmFwaGlj
c0xheWVyKCkpOwogICAgIGVsc2UKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0
ZVZpZXdwb3J0Q29uc3RyYWluZWROb2RlKG5vZGVJRCwgY29tcHV0ZUZpeGVkVmlld3BvcnRDb25z
dHJhaW50cyhsYXllciksIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7CisjZW5kaWYKIH0KIAog
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJWaWV3cG9ydENvbnN0cmFpbmVk
TGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAgIEFTU0VSVChtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMuY29udGFpbnMoJmxheWVyKSk7Ci0KKyNpZiBQTEFURk9STShJT1MpCisgICAg
VU5VU0VEX1BBUkFNKGxheWVyKTsKKyAgICAvLyBPbiBpT1MsIHdlIGJhdGNoLXVwZGF0ZSB2aWV3
cG9ydC1jb25zdHJhaW5lZCBsYXllcnMgaW4gdXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgp
LgorI2Vsc2UKICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIuYmFj
a2luZygpKQogICAgICAgICBiYWNraW5nLT5kZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKKyNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBIYXNoTWFwPFBsYXRm
b3JtTGF5ZXIqLCBzdGQ6OnVuaXF1ZV9wdHI8Vmlld3BvcnRDb25zdHJhaW50cz4+IExheWVyTWFw
OwordHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKj4gU3RpY2t5
Q29udGFpbmVyTWFwOworCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0ZXJBbGxW
aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCkKK3sKKyAgICAvLyBPbmx5IHRoZSBtYWluIGZyYW1l
IHNob3VsZCByZWdpc3RlciBmaXhlZC9zdGlja3kgbGF5ZXJzLgorICAgIGlmIChtX3JlbmRlclZp
ZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5
ZXJNYXAgbGF5ZXJNYXA7CisgICAgU3RpY2t5Q29udGFpbmVyTWFwIHN0aWNreUNvbnRhaW5lck1h
cDsKKworICAgIGZvciAoYXV0byBpdCA9IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5iZWdp
bigpLCBlbmQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqKml0OworICAgICAgICBBU1NF
UlQobGF5ZXIuaXNDb21wb3NpdGVkKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWV3
cG9ydENvbnN0cmFpbnRzPiBjb25zdHJhaW50czsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlcmVy
KCkuaXNTdGlja3lQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0cmFpbnRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxWaWV3cG9ydENvbnN0cmFpbnRzPihuZXcgU3RpY2t5UG9zaXRpb25WaWV3
cG9ydENvbnN0cmFpbnRzKGNvbXB1dGVTdGlja3lWaWV3cG9ydENvbnN0cmFpbnRzKGxheWVyKSkp
OworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1RvdWNoU2Nyb2xsYWJs
ZUxheWVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChpc1N0aWNreUluQWNjZWxlcmF0ZWRT
Y3JvbGxpbmdMYXllck9yVmlld3BvcnQobGF5ZXIsICZlbmNsb3NpbmdUb3VjaFNjcm9sbGFibGVM
YXllcikgJiYgZW5jbG9zaW5nVG91Y2hTY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZW5jbG9zaW5nVG91Y2hTY3JvbGxhYmxlTGF5ZXItPmlzQ29tcG9zaXRlZCgpKTsK
KyAgICAgICAgICAgICAgICBzdGlja3lDb250YWluZXJNYXAuYWRkKGxheWVyLmJhY2tpbmcoKS0+
Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGVuY2xvc2luZ1RvdWNoU2Nyb2xsYWJs
ZUxheWVyLT5iYWNraW5nKCktPnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29uc3RyYWludHMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFZpZXdwb3J0Q29uc3RyYWludHM+KG5ldyBGaXhlZFBvc2l0aW9uVmll
d3BvcnRDb25zdHJhaW50cyhjb21wdXRlRml4ZWRWaWV3cG9ydENvbnN0cmFpbnRzKGxheWVyKSkp
OworCisgICAgICAgIGxheWVyTWFwLmFkZChsYXllci5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBjb25zdHJhaW50cy5yZWxlYXNlKCkpOworICAgIH0KKyAgICAK
KyAgICBpZiAoQ2hyb21lQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50LT51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVyTWFwLCBz
dGlja3lDb250YWluZXJNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dW5y
ZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKQoreworICAgIC8vIE9ubHkgdGhl
IG1haW4gZnJhbWUgc2hvdWxkIHJlZ2lzdGVyIGZpeGVkL3N0aWNreSBsYXllcnMuCisgICAgaWYg
KG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoQ2hyb21lQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKSkg
eworICAgICAgICBMYXllck1hcCBsYXllck1hcDsKKyAgICAgICAgU3RpY2t5Q29udGFpbmVyTWFw
IHN0aWNreUNvbnRhaW5lck1hcDsKKyAgICAgICAgY2xpZW50LT51cGRhdGVWaWV3cG9ydENvbnN0
cmFpbmVkTGF5ZXJzKGxheWVyTWFwLCBzdGlja3lDb250YWluZXJNYXApOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkK
K3sKKyAgICBDaHJvbWVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpOworICAg
IGlmICghY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Nj
cm9sbGluZ0xheWVycy5iZWdpbigpLCBlbmQgPSBtX3Njcm9sbGluZ0xheWVycy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICB1cGRhdGVTY3JvbGxpbmdMYXllcldpdGhDbGllbnQoKipp
dCwgY2xpZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJB
bGxTY3JvbGxpbmdMYXllcnMoKQoreworICAgIENocm9tZUNsaWVudCogY2xpZW50ID0gdGhpcy0+
Y2hyb21lQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoYXV0byBpdCA9IG1fc2Nyb2xsaW5nTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fc2Nyb2xs
aW5nTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIm
IGxheWVyID0gKippdDsKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5
ZXIuYmFja2luZygpOworICAgICAgICBBU1NFUlQoYmFja2luZyk7CisgICAgICAgIGNsaWVudC0+
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmct
PnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsaW5nQ29u
dGVudHNMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIH0KK30KKworLy8gQ2FsbGVkIHdo
ZW4gdGhlIHNpemUgb2YgdGhlIGNvbnRlbnRzTGF5ZXIgY2hhbmdlcywgYW5kIHdoZW4gdGhlIGNv
bnRlbnRzTGF5ZXIgaXMgcmVwbGFjZWQgYnkgYW5vdGhlciBsYXllci4KK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllckFkZGVkT3JVcGRhdGVkKFJlbmRlckxheWVyKiBs
YXllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVuZGVyVmlldy5kb2N1bWVudCgpLmluUGFnZUNhY2hl
KCkpOworICAgIG1fc2Nyb2xsaW5nTGF5ZXJzLmFkZChsYXllcik7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllclJlbW92ZWQoUmVuZGVyTGF5ZXIqIGxheWVy
LCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNM
YXllcikKK3sKKyAgICBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRhdGUucmVtb3ZlKGxheWVy
KTsKKyAgICBtX3Njcm9sbGluZ0xheWVycy5yZW1vdmUobGF5ZXIpOworCisgICAgaWYgKG1fcmVu
ZGVyVmlldy5kb2N1bWVudCgpLmluUGFnZUNhY2hlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChDaHJvbWVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpKQorICAgICAg
ICBjbGllbnQtPnJlbW92ZVNjcm9sbGluZ0xheWVyKGxheWVyLT5yZW5kZXJlcigpLmVsZW1lbnQo
KSwgc2Nyb2xsaW5nTGF5ZXIsIGNvbnRlbnRzTGF5ZXIpOworfQorI2VuZGlmCisKIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5
SUQgZGlzcGxheUlEKQogewogICAgIGlmIChtX2xheWVyVXBkYXRlcikKQEAgLTMzMjcsNiArMzY0
NiwxNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRMYXllckZsdXNoVGltZXJJ
Zk5lZWRlZCgpCiAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxlZExh
eWVyRmx1c2hEZWxheSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c3RhcnRJbml0aWFsTGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQoKQoreworICAg
IGlmICghbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCh0aHJvdHRsZWRMYXllckZsdXNoSW5pdGlh
bERlbGF5KTsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJG
bHVzaFRpbWVyRmlyZWQoVGltZXI8UmVuZGVyTGF5ZXJDb21wb3NpdG9yPiopCiB7CiAgICAgaWYg
KCFtX2hhc1BlbmRpbmdMYXllckZsdXNoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDkzNDkzYzI1NTEwNmZiMjg4Y2UzOWEzZTZl
NWIxNGFkMjBlMmQ1ZmMuLjYwYWE3MTA0NWFiODRjYjYxNmI1ZGY5MzEzYWQ4ZGI5YzJhZWUzMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKQEAgLTI3Myw2ICsyNzMsMjAgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlVmlld3BvcnRD
b25zdHJhaW50U3RhdHVzKFJlbmRlckxheWVyJik7CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENv
bnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
b2lkIHJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygpOworICAgIHZvaWQgdW5y
ZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKTsKKworICAgIHZvaWQgc2Nyb2xs
aW5nTGF5ZXJBZGRlZE9yVXBkYXRlZChSZW5kZXJMYXllciopOworICAgIHZvaWQgc2Nyb2xsaW5n
TGF5ZXJSZW1vdmVkKFJlbmRlckxheWVyKiwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIs
IFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpOworCisgICAgdm9pZCByZWdpc3RlckFsbFNj
cm9sbGluZ0xheWVycygpOworICAgIHZvaWQgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygp
OworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudCBJbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1
YWwgZmxvYXQgbWluaW11bURvY3VtZW50U2NhbGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dDb21wb3NpdGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24oKSBjb25zdCBP
VkVSUklERTsKKyNlbmRpZgogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAg
ICAgdm9pZCBzZXRUcmFja3NSZXBhaW50cyhib29sKTsKIApAQCAtMzgzLDYgKzM5NywxNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5n
KGNvbnN0IFJlbmRlckxheWVyJikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9ySW5kaXJlY3RSZWFzb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYsIGJvb2wgaGFzQ29tcG9z
aXRlZERlc2NlbmRhbnRzLCBib29sIGhhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50cywgUmVuZGVy
TGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24mKSBjb25zdDsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxpbmcoUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVDdXN0b21MYXllcnNBZnRl
ckZsdXNoKCk7CisKKyAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCgpIGNvbnN0OworCisg
ICAgdm9pZCBzdGFydEluaXRpYWxMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpOworI2VuZGlmCisK
ICAgICB2b2lkIGFkZFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciYpOwogICAg
IHZvaWQgcmVnaXN0ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXll
ciYpOwogICAgIHZvaWQgdW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJM
YXllciYpOwpAQCAtNDUwLDYgKzQ3NCwxMCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0xheWVyPiBtX2NsaXBMYXllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NMYXllcj4gbV9zY3JvbGxMYXllcjsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBIYXNoU2V0
PFJlbmRlckxheWVyKj4gbV9zY3JvbGxpbmdMYXllcnM7CisgICAgSGFzaFNldDxSZW5kZXJMYXll
cio+IG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZTsKKyNlbmRpZgogICAgIEhhc2hTZXQ8
UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAgICAgSGFzaFNldDxS
ZW5kZXJMYXllcio+IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcklu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaApp
bmRleCBkMjU3ZTM5Y2JlZDE1ZWM1YjI1ZTEyM2FlMTU0OTBiMDE1ZTVlMmI5Li5lOTVmM2JmOGFl
NTM4MGYzNzI5ZDgzNDExYjBlY2NjYjYyYWJjMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oCkBAIC04OSw3ICs4OSwxNiBAQCBwcml2
YXRlOgogCiAgICAgc3RhdGljIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBPd25QdHI8Rmls
dGVySW5mbz4+JiBtYXAoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwdXNoCisjaWYgZGVmaW5lZChfX2hhc193YXJuaW5nKSAmJiBfX2hhc193YXJuaW5n
KCItV3VudXNlZC1wcml2YXRlLWZpZWxkIikKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VudXNlZC1wcml2YXRlLWZpZWxkIgorI2VuZGlmCisjZW5kaWYKICAgICBSZW5kZXJM
YXllciYgbV9sYXllcjsKKyNpZiBQTEFURk9STShJT1MpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisjZW5kaWYKIAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9yZW5k
ZXJlcjsKICAgICBMYXlvdXRSZWN0IG1fZGlydHlTb3VyY2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggMTM0YmE5Zjg4NDYyMmFmMDNmZjY5
N2JhMDdkYTU5NjAxZDY4NTQ1OC4uYjYxMmI1YTkwODU5YTc3YjY1ZTNlODY4N2RkZmNhMWVmY2Y2
YzRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBA
IC00OCwxMCArNDgsMjkgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8bWF0aC5o
PgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgc2l6ZV90IHNlbGVjdGVkT3B0aW9uQ291bnQo
Y29uc3QgUmVuZGVyTWVudUxpc3QmIHJlbmRlck1lbnVMaXN0KQoreworICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSByZW5kZXJNZW51TGlzdC5zZWxlY3RFbGVtZW50
KCkubGlzdEl0ZW1zKCk7CisgICAgc2l6ZV90IG51bWJlck9mSXRlbXMgPSBsaXN0SXRlbXMuc2l6
ZSgpOworCisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mSXRlbXM7ICsraSkgeworICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdO
YW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbXNbaV0pLT5zZWxl
Y3RlZCgpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50Owor
fQorI2VuZGlmCisKIFJlbmRlck1lbnVMaXN0OjpSZW5kZXJNZW51TGlzdChIVE1MU2VsZWN0RWxl
bWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAgICAgOiBSZW5kZXJG
bGV4aWJsZUJveChlbGVtZW50LCBzdGQ6Om1vdmUoc3R5bGUpKQogICAgICwgbV9idXR0b25UZXh0
KG51bGxwdHIpCkBAIC01OSwxNSArNzgsMTkgQEAgUmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVM
aXN0KEhUTUxTZWxlY3RFbGVtZW50JiBlbGVtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPgogICAg
ICwgbV9uZWVkc09wdGlvbnNXaWR0aFVwZGF0ZSh0cnVlKQogICAgICwgbV9vcHRpb25zV2lkdGgo
MCkKICAgICAsIG1fbGFzdEFjdGl2ZUluZGV4KC0xKQorI2lmICFQTEFURk9STShJT1MpCiAgICAg
LCBtX3BvcHVwSXNWaXNpYmxlKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKIFJlbmRlck1lbnVMaXN0
Ojp+UmVuZGVyTWVudUxpc3QoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1fcG9w
dXApCiAgICAgICAgIG1fcG9wdXAtPmRpc2Nvbm5lY3RDbGllbnQoKTsKICAgICBtX3BvcHVwID0g
MDsKKyNlbmRpZgogfQogCiBib29sIFJlbmRlck1lbnVMaXN0OjpjYW5CZVJlcGxhY2VkV2l0aElu
bGluZVJ1bkluKCkgY29uc3QKQEAgLTExOCw2ICsxNDEsMjYgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAgICAgICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKExF
RlQpOwogICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYg
bV9idXR0b25UZXh0LT50ZXh0KCktPmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdI
VF9UT19MRUZUKSA/IFJUTCA6IExUUjsKICAgICAgICAgaW5uZXJTdHlsZS5zZXREaXJlY3Rpb24o
ZGlyZWN0aW9uKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LnBhZ2UoKS0+Y2hyb21lKCkuc2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0Rp
cmVjdGlvbigpKSB7CisgICAgICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKHN0eWxlKCkuZGly
ZWN0aW9uKCkgPT0gTFRSID8gTEVGVCA6IFJJR0hUKTsKKyAgICAgICAgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb247CisgICAgICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaTsKKyAgICAgICAgaWYg
KG11bHRpcGxlKCkgJiYgc2VsZWN0ZWRPcHRpb25Db3VudCgqdGhpcykgIT0gMSkgeworICAgICAg
ICAgICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS0+
ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUlRMIDogTFRS
OworICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBVQk5vcm1hbDsKKyAgICAgICAgfSBlbHNlIGlm
IChtX29wdGlvblN0eWxlKSB7CisgICAgICAgICAgICBkaXJlY3Rpb24gPSBtX29wdGlvblN0eWxl
LT5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgIHVuaWNvZGVCaWRpID0gbV9vcHRpb25TdHlsZS0+
dW5pY29kZUJpZGkoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9
IHN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgICAgICAgICB1bmljb2RlQmlkaSA9IHN0eWxlKCku
dW5pY29kZUJpZGkoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubmVyU3R5bGUuc2V0RGlyZWN0
aW9uKGRpcmVjdGlvbik7CisgICAgICAgIGlubmVyU3R5bGUuc2V0VW5pY29kZUJpZGkodW5pY29k
ZUJpZGkpOworICAgIH0KKyNlbHNlCiAgICAgfSBlbHNlIGlmIChtX29wdGlvblN0eWxlICYmIGRv
Y3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5zZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVX
cml0aW5nRGlyZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKChtX29wdGlvblN0eWxlLT5kaXJlY3Rp
b24oKSAhPSBpbm5lclN0eWxlLmRpcmVjdGlvbigpIHx8IG1fb3B0aW9uU3R5bGUtPnVuaWNvZGVC
aWRpKCkgIT0gaW5uZXJTdHlsZS51bmljb2RlQmlkaSgpKSkKICAgICAgICAgICAgIG1faW5uZXJC
bG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CkBAIC0xMjUsNiArMTY4
LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAgICAgICAgIGlu
bmVyU3R5bGUuc2V0RGlyZWN0aW9uKG1fb3B0aW9uU3R5bGUtPmRpcmVjdGlvbigpKTsKICAgICAg
ICAgaW5uZXJTdHlsZS5zZXRVbmljb2RlQmlkaShtX29wdGlvblN0eWxlLT51bmljb2RlQmlkaSgp
KTsKICAgICB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIH0KIAogSFRNTFNlbGVjdEVsZW1l
bnQmIFJlbmRlck1lbnVMaXN0OjpzZWxlY3RFbGVtZW50KCkgY29uc3QKQEAgLTIwNyw5ICsyNTEs
MTEgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICBt
X25lZWRzT3B0aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CiAgICAgfQogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBpZiAobV9wb3B1cElzVmlzaWJsZSkKICAgICAgICAgbV9wb3B1cC0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKICAgICBlbHNlCisjZW5kaWYKICAgICAgICAgc2V0VGV4dEZyb21PcHRp
b24oc2VsZWN0RWxlbWVudCgpLnNlbGVjdGVkSW5kZXgoKSk7CiB9CiAKQEAgLTIyOCw2ICsyNzQs
MTQgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbklu
ZGV4KQogICAgICAgICB9CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChtdWx0
aXBsZSgpKSB7CisgICAgICAgIHNpemVfdCBjb3VudCA9IHNlbGVjdGVkT3B0aW9uQ291bnQoKnRo
aXMpOworICAgICAgICBpZiAoY291bnQgIT0gMSkKKyAgICAgICAgICAgIHRleHQgPSBodG1sU2Vs
ZWN0TXVsdGlwbGVJdGVtcyhjb3VudCk7CisgICAgfQorI2VuZGlmCisKICAgICBzZXRUZXh0KHRl
eHQuc3RyaXBXaGl0ZVNwYWNlKCkpOwogICAgIGRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihvcHRpb25J
bmRleCk7CiB9CkBAIC0zMDIsNiArMzU2LDEzIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
RGlydHkoZmFsc2UpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQKK3ZvaWQgUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisjZWxzZQogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkK
IHsKICAgICBpZiAobV9wb3B1cElzVmlzaWJsZSkKQEAgLTMyNSwxMSArMzg2LDE0IEBAIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCiAgICAgYWJzQm91bmRzLnNldExvY2F0aW9uKHJv
dW5kZWRJbnRQb2ludChhYnNUb3BMZWZ0KSk7CiAgICAgbV9wb3B1cC0+c2hvdyhhYnNCb3VuZHMs
ICZ2aWV3KCkuZnJhbWVWaWV3KCksIHNlbGVjdEVsZW1lbnQoKS5vcHRpb25Ub0xpc3RJbmRleChz
ZWxlY3RFbGVtZW50KCkuc2VsZWN0ZWRJbmRleCgpKSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZW5k
ZXJNZW51TGlzdDo6aGlkZVBvcHVwKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICht
X3BvcHVwKQogICAgICAgICBtX3BvcHVwLT5oaWRlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5k
ZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlT25D
aGFuZ2UpCkBAIC01NjQsNyArNjI4LDkgQEAgaW50IFJlbmRlck1lbnVMaXN0OjpzZWxlY3RlZElu
ZGV4KCkgY29uc3QKIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRlKCkKIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIG1fcG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKKyNlbmRpZgog
fQogCiBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAppbmRl
eCAzNjczNGEzZTVkYjQxYjQzNTlmNDUxMTA1NzdiMWE3MDAyY2QzMDk1Li5iMmIxNzUyNmIzYjVl
Y2VmZDlhNjg0NTEyYWFjZTIwYTk3OGYyZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuaApAQCAtNDgsNyArNDgsOSBAQCBwdWJsaWM6CiAKICAgICBIVE1MU2Vs
ZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIGNvbnN0OwogCisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cElzVmlzaWJs
ZTsgfQorI2VuZGlmCiAgICAgdm9pZCBzaG93UG9wdXAoKTsKICAgICB2b2lkIGhpZGVQb3B1cCgp
OwogCkBAIC0xNDUsOCArMTQ3LDEwIEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG1fb3B0aW9uU3R5bGU7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFJlZlB0cjxQb3B1
cE1lbnU+IG1fcG9wdXA7CiAgICAgYm9vbCBtX3BvcHVwSXNWaXNpYmxlOworI2VuZGlmCiB9Owog
CiB0ZW1wbGF0ZTw+IGlubGluZSBib29sIGlzUmVuZGVyZXJPZlR5cGU8Y29uc3QgUmVuZGVyTWVu
dUxpc3Q+KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIHsgcmV0dXJuIHJlbmRlcmVyLmlz
TWVudUxpc3QoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApp
bmRleCA0OWM5ZjdiOGQxNDkxZjM2YTdlMDZjZDI0MjM1MmI4MjdjNmQ2ZmVjLi4xZDk4MWVjNzhi
MWQ4ODQwZjkwZGVmNmY0NTM2ODg4MDhlOTY1YjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNjcsNiArNjcsMTAgQEAKICNpbmNsdWRlICJTVkdSZW5k
ZXJTdXBwb3J0LmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTZWxl
Y3Rpb25SZWN0LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwpAQCAtMTEyNyw2ICsxMTMxLDU3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpwYWludE91dGxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJlY3QmIHBh
aW50UmVjCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
IH0KIAorLy8gRklYTUU6IE1ha2UgdGhpcyByZXR1cm4gYW4gdW5zaWduZWQgaW50ZWdlcj8KK2lu
dCBSZW5kZXJPYmplY3Q6OmNvbHVtbk51bWJlckZvck9mZnNldChpbnQgb2Zmc2V0KQoreworICAg
IGludCBjb2x1bW5OdW1iZXIgPSAwOworICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sg
PSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gY29udGFp
bmluZ0Jsb2NrLT52aWV3KCk7CisgICAgY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IHZp
ZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5wYWdlKCktPnBhZ2luYXRpb24oKTsKKyAgICBpZiAocGFn
aW5hdGlvbi5tb2RlID09IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKQorICAgICAgICByZXR1cm4g
Y29sdW1uTnVtYmVyOworCisgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbyA9IHZpZXcuY29sdW1u
SW5mbygpOworICAgIGlmIChjb2x1bW5JbmZvICYmIGNvbHVtbkluZm8tPnByb2dyZXNzaW9uQXhp
cygpID09IENvbHVtbkluZm86OkJsb2NrQXhpcykgeworICAgICAgICBpZiAoIWNvbHVtbkluZm8t
PnByb2dyZXNzaW9uSXNSZXZlcnNlZCgpKQorICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gKHBh
Z2luYXRpb24ucGFnZUxlbmd0aCArIHBhZ2luYXRpb24uZ2FwIC0gb2Zmc2V0KSAvIChwYWdpbmF0
aW9uLnBhZ2VMZW5ndGggKyBwYWdpbmF0aW9uLmdhcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvbHVtbk51bWJlciA9IG9mZnNldCAvIChwYWdpbmF0aW9uLnBhZ2VMZW5ndGggKyBwYWdp
bmF0aW9uLmdhcCk7CisgICAgfQorICAgIHJldHVybiBjb2x1bW5OdW1iZXI7Cit9CisKKyNpZiBQ
TEFURk9STShJT1MpCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgaW4gc3Bpcml0IHRvIFJl
bmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZSwgYnV0IHJldHVybnMgcmVjdGFuZ2xlcwor
Ly8gd2hpY2ggYXJlIGFubm90YXRlZCB3aXRoIGFkZGl0aW9uYWwgc3RhdGUgd2hpY2ggaGVscHMg
dGhlIGlQaG9uZSBkcmF3IHNlbGVjdGlvbnMgaW4gaXRzIHVuaXF1ZSB3YXkuCisvLyBObyBhbm5v
dGF0aW9ucyBhcmUgYWRkZWQgaW4gdGhpcyBjbGFzcy4KKy8vIEZJWE1FOiBNb3ZlIHRvIFJlbmRl
clRleHQgd2l0aCBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoKT8KK3ZvaWQgUmVuZGVyT2JqZWN0Ojpj
b2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cywgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsK
KworICAgIGlmICghZmlyc3RDaGlsZFNsb3coKSkgeworICAgICAgICAvLyBGSVhNRTogV2ViS2l0
J3MgcG9zaXRpb24gZm9yIGFuIGVtcHR5IHNwYW4gYWZ0ZXIgYSBCUiBpcyBpbmNvcnJlY3QsIHNv
IHdlIGNhbid0IHRydXN0IAorICAgICAgICAvLyBxdWFkcyBmb3IgdGhlbS4gV2UgZG9uJ3QgbmVl
ZCBzZWxlY3Rpb24gcmVjdHMgZm9yIHRob3NlIGFueXdheSB0aG91Z2gsIHNpbmNlIHRoZXkgCisg
ICAgICAgIC8vIGFyZSBqdXN0IGVtcHR5IGNvbnRhaW5lcnMuIFNlZSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzU4Pi4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBw
cmV2aW91cyA9IHByZXZpb3VzU2libGluZygpOworICAgICAgICBOb2RlKiBub2RlID0gdGhpcy0+
bm9kZSgpOworICAgICAgICBpZiAoIXByZXZpb3VzIHx8ICFwcmV2aW91cy0+aXNCUigpIHx8ICFu
b2RlIHx8ICFub2RlLT5pc0NvbnRhaW5lck5vZGUoKSB8fCAhaXNJbmxpbmUoKSkgeworICAgICAg
ICAgICAgLy8gRm9yIGlubGluZSBlbGVtZW50cyB3ZSBkb24ndCB1c2UgYWJzb2x1dGVRdWFkcywg
c2luY2UgaXQgdGFrZXMgaW50byBhY2NvdW50IGNvbnRpbnVhdGlvbnMgYW5kIGxlYWRzIHRvIHdy
b25nIHJlc3VsdHMuCisgICAgICAgICAgICBhYnNvbHV0ZVF1YWRzRm9yU2VsZWN0aW9uKHF1YWRz
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0
YXJ0OworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEF0KHN0YXJ0KTsg
Y2hpbGQgJiYgb2Zmc2V0IDwgZW5kOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpLCArK29m
ZnNldCkKKyAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZlF1YWRzID0gcXVhZHMuc2l6ZSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlF1YWRzOyArK2kpCisgICAgICAgIHJlY3RzLmFwcGVu
ZChTZWxlY3Rpb25SZWN0KHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCksIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCksIGNvbHVtbk51bWJlckZvck9mZnNldChxdWFkc1tpXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpLngoKSkpKTsKK30KKyNlbmRpZgorCiBJbnRSZWN0IFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdAogewog
ICAgIGlmICh1c2VUcmFuc2Zvcm1zKSB7CkBAIC0yMDkzLDYgKzIxNDgsMTEgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbnltb3VzV3JhcHBlcnMoKQogCiB2b2lkIFJl
bmRlck9iamVjdDo6ZGVzdHJveSgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNM
YXllcigpKQorICAgICAgICB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT53
aWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgorCiAgICAgd2lsbEJlRGVzdHJveWVkKCk7CiAgICAg
ZGVsZXRlIHRoaXM7CiB9CkBAIC0yMTY3LDYgKzIyMjcsMTEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJPYmplY3Q6OmlubmVyTGlu
ZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0
KCk7Cit9CisKIFJlbmRlclN0eWxlKiBSZW5kZXJPYmplY3Q6OmdldENhY2hlZFBzZXVkb1N0eWxl
KFBzZXVkb0lkIHBzZXVkbywgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAg
IGlmIChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShwc2V1ZG8pKQpAQCAtMjM0Myw5ICsyNDA4LDE0IEBAIGJvb2wgUmVuZGVyT2JqZWN0
Ojp3aWxsUmVuZGVySW1hZ2UoQ2FjaGVkSW1hZ2UqKQogICAgIGlmIChzdHlsZSgpLnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKS0+dGltZXJzUGF1c2VkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAgLy8gV2Ugd2lsbCBub3QgcmVuZGVyIGEgbmV3IGlt
YWdlIHdoZW4gQWN0aXZlIERPTSBpcyBzdXNwZW5kZWQKICAgICBpZiAoZG9jdW1lbnQoKS5hY3Rp
dmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgogCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGEgd2luZG93IChpLmUuLCB3ZSdyZSBkb3JtYW50
IGZyb20gYmVpbmcgcHV0IGluIHRoZSBiL2YgY2FjaGUgb3IgaW4gYSBiYWNrZ3JvdW5kIHRhYikK
ICAgICAvLyB0aGVuIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIGVpdGhlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA5YmY1Y2ZiODg0ZDE3MDQ2NGVjZWY3YmYy
OTM1MjFiZmYwNGY1MDYyLi4zNWFjMWYxNWFiMjg1ZjFiMmFlYzE3M2JlNDcxNDA1OTcxYmUzOTE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02NSw2ICs2NSw5
IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKICNpZiBFTkFCTEUoU1ZHKQogY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCitjbGFzcyBT
ZWxlY3Rpb25SZWN0OworI2VuZGlmCiAKIHN0cnVjdCBQYWludEluZm87CiAKQEAgLTEwOCw3ICsx
MTEsMTEgQEAgZW51bSBNYXBDb29yZGluYXRlc01vZGUgewogfTsKIHR5cGVkZWYgdW5zaWduZWQg
TWFwQ29vcmRpbmF0ZXNGbGFnczsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NvbnN0IGludCBjYXJl
dFdpZHRoID0gMjsgLy8gVGhpcyB2YWx1ZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggVUlL
aXQuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1ODA2MDE+LgorI2Vsc2UKIGNvbnN0IGludCBjYXJl
dFdpZHRoID0gMTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKSB8fCBF
TkFCTEUoRFJBR0dBQkxFX1JFR0lPTikKIHN0cnVjdCBBbm5vdGF0ZWRSZWdpb25WYWx1ZSB7CkBA
IC02NTMsNyArNjYwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0xheWVyKGJvb2wgYiA9
IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0SGFzTGF5ZXIoYik7IH0KICAgICB2b2lkIHNldEhhc1Ry
YW5zZm9ybShib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEhhc1RyYW5zZm9ybShiKTsg
fQogICAgIHZvaWQgc2V0SGFzUmVmbGVjdGlvbihib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRz
LnNldEhhc1JlZmxlY3Rpb24oYik7IH0KLSAgICAKKworICAgIC8vIEhvb2sgc28gdGhhdCBSZW5k
ZXJUZXh0Q29udHJvbCBjYW4gcmV0dXJuIHRoZSBsaW5lIGhlaWdodCBvZiBpdHMgaW5uZXIgcmVu
ZGVyZXIuCisgICAgLy8gRm9yIG90aGVyIHJlbmRlcmVycywgdGhlIHZhbHVlIGlzIHRoZSBzYW1l
IGFzIGxpbmVIZWlnaHQoZmFsc2UpLgorICAgIHZpcnR1YWwgaW50IGlubmVyTGluZUhlaWdodCgp
IGNvbnN0OworCiAgICAgLy8gdXNlZCBmb3IgZWxlbWVudCBzdGF0ZSB1cGRhdGVzIHRoYXQgY2Fu
bm90IGJlIGZpeGVkIHdpdGggYQogICAgIC8vIHJlcGFpbnQgYW5kIGRvIG5vdCBuZWVkIGEgcmVs
YXlvdXQKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSB7IH0KQEAgLTcwNyw3
ICs3MTgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29u
dGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVw
ZW5kc09uUG9pbnQgPSAwKSBjb25zdDsKICAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIGFu
IG9iamVjdCB1cCB0aGUgY29udGFpbmVyKCkgY2hhaW4uIEFzc2VydHMgdGhhdCBub25lIG9mIHRo
ZSBpbnRlcm1lZGlhdGUgb2JqZWN0cyBoYXZlIHRyYW5zZm9ybXMuCiAgICAgTGF5b3V0U2l6ZSBv
ZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgCisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2ln
bmVkIGVuZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Cisg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHNGb3JTZWxlY3Rpb24oVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzKSBjb25zdCB7IGFic29sdXRlUXVhZHMocXVhZHMpOyB9CisjZW5kaWYKKwogICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91
dFBvaW50JikgY29uc3QgeyB9CiAKICAgICAvLyBGSVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQg
Z28gYXdheSBldmVudHVhbGx5CkBAIC05MDUsOSArOTIxLDEwIEBAIHB1YmxpYzoKIAogICAgIFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigp
IGNvbnN0OwogCi1wcm90ZWN0ZWQ6CiAgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhp
Y3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBCb3hTaWRlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLCBFQm9yZGVyU3R5bGUsIGludCBhZGpidzEs
IGludCBhZGpidzIsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UpOworcHJvdGVjdGVkOgorICAgIGlu
dCBjb2x1bW5OdW1iZXJGb3JPZmZzZXQoaW50IG9mZnNldCk7CiAKICAgICB2b2lkIHBhaW50Rm9j
dXNSaW5nKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKICAg
ICB2b2lkIHBhaW50T3V0bGluZShQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKaW5kZXggNmFmYTY1NDU0YTIx
ZjE0MjQ4NTUyYTZkY2E4N2U1M2NkYjgzMGY3Mi4uNTQ4ZDU5ZDFkOTc4MGU5NGQxYWYxMzRmMTRk
ZWM0NjRhNjBhNmFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBvcGFjaXR5KCk7CiAK
KyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3Jv
bGxiYXJQYXJ0LCBQc2V1ZG9JZCk7CisKIHByaXZhdGU6CiAgICAgUmVuZGVyU2Nyb2xsYmFyKFNj
cm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSopOwog
CkBAIC03NSw3ICs3Nyw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclBh
cnRzKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IGdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFBzZXVkb0lkKTsKICAgICB2
b2lkIHVwZGF0ZVNjcm9sbGJhclBhcnQoU2Nyb2xsYmFyUGFydCwgYm9vbCBkZXN0cm95ID0gZmFs
c2UpOwogCiAgICAgLy8gVGhpcyBTY3JvbGxiYXIoV2lkZ2V0KSBtYXkgb3V0bGl2ZSB0aGUgRE9N
IHdoaWNoIGNyZWF0ZWQgaXQgKGR1cmluZyB0ZWFyIGRvd24pLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKaW5kZXggODA0Yjc1YjhkOTg2Mzg1NjJh
YWFkZGRkN2Q4YTcyODYyZGE1NWI1Ny4uMTRiNGM2NTFkOTg0YWZjZGJkZDM4MzMzOWM1NTVhYmM1
YjlmOTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmll
bGQuY3BwCkBAIC0yMTgsNiArMjE4LDcgQEAgdm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVD
aGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogCiBTdHJpbmcgUmVu
ZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGludCBzaXplID0gbGlzdFNpemUoKTsKICAgICBpZiAoc2l6
ZSA9PSAxKSB7CiAgICAgICAgIEFTU0VSVCghbGlzdEluZGV4KTsKQEAgLTIyNSwxMCArMjI2LDEz
IEBAIFN0cmluZyBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdAogICAgIH0KICAgICBpZiAoIWxpc3RJbmRleCkKICAgICAgICAgcmV0dXJuIHNlYXJj
aE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKTsKKyNlbmRpZgogICAgIGlmIChpdGVtSXNTZXBhcmF0
b3IobGlzdEluZGV4KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAoc2l6ZSAtIDEpKQog
ICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KCk7CisjZW5k
aWYKICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlc1tsaXN0SW5kZXggLSAxXTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDE3MGUzM2QzZDc1ZTNjN2Mw
MDllZjM5NzVlNzZjNWRhY2E0ZGJlNTUuLmQxMmI3NjBmZTBiMDkyNzRjYWZmY2E5NzNkZmQzN2M3
ZmZmNTg4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ3
LDYgKzQ3LDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUg
IkxvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiU2VsZWN0aW9uUmVjdC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1
c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIApAQCAtMzAwLDYgKzMwOCw4MyBAQCBWZWN0b3I8SW50
UmVjdD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQsCiAgICAgcmV0dXJuIG1fbGluZUJveGVzLmFic29sdXRlUmVjdHNGb3JSYW5n
ZSgqdGhpcywgc3RhcnQsIGVuZCwgdXNlU2VsZWN0aW9uSGVpZ2h0LCB3YXNGaXhlZCk7CiB9CiAK
KyNpZiBQTEFURk9STShJT1MpCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgaW4gc3Bpcml0
IHRvIGFkZExpbmVCb3hSZWN0cywgYnV0IHJldHVybnMgcmVjdGFuZ2xlcworLy8gd2hpY2ggYXJl
IGFubm90YXRlZCB3aXRoIGFkZGl0aW9uYWwgc3RhdGUgd2hpY2ggaGVscHMgdGhlIGlQaG9uZSBk
cmF3IHNlbGVjdGlvbnMgaW4gaXRzIHVuaXF1ZSB3YXkuCisvLyBGdWxsIGFubm90YXRpb25zIGFy
ZSBhZGRlZCBpbiB0aGlzIGNsYXNzLgordm9pZCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
UmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCkKK3sKKyAgICAvLyBGSVhNRTogV29yayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVkIGlz
c3Vlcy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB1bnNpZ25lZHMsIGFuZCBpcyBvZnRlbiBwYXNzZWQg
VUlOVF9NQVgKKyAgICAvLyB0byBtZWFuICJhbGwgdGhlIHdheSB0byB0aGUgZW5kIi4gSW5saW5l
VGV4dEJveCBjb29yZGluYXRlcyBhcmUgdW5zaWduZWRzLCBzbyBjaGFuZ2luZyB0aGlzIAorICAg
IC8vIGZ1bmN0aW9uIHRvIHRha2UgaW50cyBjYXVzZXMgdmFyaW91cyBpbnRlcm5hbCBtaXNtYXRj
aGVzLiBCdXQgc2VsZWN0aW9uUmVjdCB0YWtlcyBpbnRzLCBhbmQgCisgICAgLy8gcGFzc2luZyBV
SU5UX01BWCB0byBpdCBjYXVzZXMgdHJvdWJsZS4gSWRlYWxseSB3ZSdkIGNoYW5nZSBzZWxlY3Rp
b25SZWN0IHRvIHRha2UgdW5zaWduZWRzLCBidXQgCisgICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBt
YW55IHJpcHBsZSBlZmZlY3RzLCBzbyBmb3Igbm93IHdlJ2xsIGp1c3QgY2xhbXAgb3VyIHVuc2ln
bmVkIHBhcmFtZXRlcnMgdG8gSU5UX01BWC4KKyAgICBBU1NFUlQoZW5kID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB8fCBlbmQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSk7CisgICAgQVNTRVJUKHN0YXJ0IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpOworICAgIHN0YXJ0ID0gc3RkOjptaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgZW5kID0gc3RkOjpt
aW4oZW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOworCisgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsg
Ym94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgTGF5b3V0UmVjdCByZWN0
OworICAgICAgICAvLyBOb3RlLCBib3gtPmVuZCgpIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBs
YXN0IGNoYXJhY3Rlciwgbm90IHRoZSBpbmRleCBwYXN0IGl0LgorICAgICAgICBpZiAoc3RhcnQg
PD0gYm94LT5zdGFydCgpICYmIGJveC0+ZW5kKCkgPCBlbmQpCisgICAgICAgICAgICByZWN0ID0g
Ym94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgdW5zaWduZWQgcmVhbEVuZCA9IHN0ZDo6bWluKGJveC0+ZW5kKCkgKyAxLCBlbmQp
OworICAgICAgICAgICAgcmVjdCA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFs
RW5kKTsKKyAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3gtPnJvb3QoKS5pc0ZpcnN0QWZ0
ZXJQYWdlQnJlYWsoKSkgeworICAgICAgICAgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpCisg
ICAgICAgICAgICAgICAgcmVjdC5zaGlmdFlFZGdlVG8oYm94LT5yb290KCkubGluZVRvcFdpdGhM
ZWFkaW5nKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlY3Quc2hpZnRY
RWRnZVRvKGJveC0+cm9vdCgpLmxpbmVUb3BXaXRoTGVhZGluZygpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxv
Y2soKTsKKyAgICAgICAgLy8gTWFwIHJlY3QsIGV4dGVuZGVkIGxlZnQgdG8gbGVmdE9mZnNldCwg
YW5kIHJpZ2h0IHRvIHJpZ2h0T2Zmc2V0LCB0aHJvdWdoIHRyYW5zZm9ybXMgdG8gZ2V0IG1pblgg
YW5kIG1heFguCisgICAgICAgIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMgY2FjaGUoKmNv
bnRhaW5pbmdCbG9jayk7CisgICAgICAgIExheW91dFVuaXQgbGVmdE9mZnNldCA9IGNvbnRhaW5p
bmdCbG9jay0+bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoKmNvbnRhaW5pbmdCbG9jaywgYm94
LT5sb2dpY2FsVG9wKCksIGNhY2hlKTsKKyAgICAgICAgTGF5b3V0VW5pdCByaWdodE9mZnNldCA9
IGNvbnRhaW5pbmdCbG9jay0+bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KCpjb250YWluaW5n
QmxvY2ssIGJveC0+bG9naWNhbFRvcCgpLCBjYWNoZSk7CisgICAgICAgIExheW91dFJlY3QgZXh0
ZW50c1JlY3QgPSByZWN0OworICAgICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgeworICAg
ICAgICAgICAgZXh0ZW50c1JlY3Quc2V0WChsZWZ0T2Zmc2V0KTsKKyAgICAgICAgICAgIGV4dGVu
dHNSZWN0LnNldFdpZHRoKHJpZ2h0T2Zmc2V0IC0gbGVmdE9mZnNldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBleHRlbnRzUmVjdC5zZXRZKGxlZnRPZmZzZXQpOworICAgICAgICAg
ICAgZXh0ZW50c1JlY3Quc2V0SGVpZ2h0KHJpZ2h0T2Zmc2V0IC0gbGVmdE9mZnNldCk7CisgICAg
ICAgIH0KKyAgICAgICAgZXh0ZW50c1JlY3QgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChleHRlbnRzUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIGlmICghYm94
LT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgICAgIGV4dGVudHNSZWN0ID0gZXh0ZW50c1JlY3Qu
dHJhbnNwb3NlZFJlY3QoKTsKKyAgICAgICAgYm9vbCBpc0ZpcnN0T25MaW5lID0gIWJveC0+cHJl
dmlvdXNPbkxpbmVFeGlzdHMoKTsKKyAgICAgICAgYm9vbCBpc0xhc3RPbkxpbmUgPSAhYm94LT5u
ZXh0T25MaW5lRXhpc3RzKCk7CisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzUnVieUJh
c2UoKSB8fCBjb250YWluaW5nQmxvY2stPmlzUnVieVRleHQoKSkKKyAgICAgICAgICAgIGlzTGFz
dE9uTGluZSA9ICFjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpLT5pbmxpbmVCb3hX
cmFwcGVyKCktPm5leHRPbkxpbmVFeGlzdHMoKTsKKworICAgICAgICBib29sIGNvbnRhaW5zU3Rh
cnQgPSBib3gtPnN0YXJ0KCkgPD0gc3RhcnQgJiYgYm94LT5lbmQoKSArIDEgPj0gc3RhcnQ7Cisg
ICAgICAgIGJvb2wgY29udGFpbnNFbmQgPSBib3gtPnN0YXJ0KCkgPD0gZW5kICYmIGJveC0+ZW5k
KCkgKyAxID49IGVuZDsKKworICAgICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKKyAgICAgICAg
SW50UmVjdCBhYnNSZWN0ID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCksIGZh
bHNlLCAmaXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgYm9vbCBib3hJ
c0hvcml6b250YWwgPSAhYm94LT5pc1NWR0lubGluZVRleHRCb3goKSA/IGJveC0+aXNIb3Jpem9u
dGFsKCkgOiAhc3R5bGUoKS5zdmdTdHlsZSgpLmlzVmVydGljYWxXcml0aW5nTW9kZSgpOworICAg
ICAgICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBhbiBpbmxpbmUgZWxlbWVudCwgd2Ug
d2FudCB0byBjaGVjayB0aGUgaW5saW5lQm94V3JhcHBlciBvcmllbnRhdGlvbgorICAgICAgICAv
LyB0byBkZXRlcm1pbmUgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBibG9jay4gSW4gdGhpcyBjYXNl
IHdlIGFsc28gdXNlIHRoZSBpbmxpbmVCb3hXcmFwcGVyIHRvCisgICAgICAgIC8vIGRldGVybWlu
ZSBpZiB0aGUgZWxlbWVudCBpcyB0aGUgbGFzdCBvbiB0aGUgbGluZS4KKyAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aW5saW5lQm94V3JhcHBlcigpKSB7CisgICAgICAgICAgICBpZiAoY29u
dGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCktPmlzSG9yaXpvbnRhbCgpICE9IGJveElz
SG9yaXpvbnRhbCkgeworICAgICAgICAgICAgICAgIGJveElzSG9yaXpvbnRhbCA9IGNvbnRhaW5p
bmdCbG9jay0+aW5saW5lQm94V3JhcHBlcigpLT5pc0hvcml6b250YWwoKTsKKyAgICAgICAgICAg
ICAgICBpc0xhc3RPbkxpbmUgPSAhY29udGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCkt
Pm5leHRPbkxpbmVFeGlzdHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJlY3RzLmFwcGVuZChTZWxlY3Rpb25SZWN0KGFic1JlY3QsIGJveC0+ZGlyZWN0aW9uKCksIGV4
dGVudHNSZWN0LngoKSwgZXh0ZW50c1JlY3QubWF4WCgpLCBleHRlbnRzUmVjdC5tYXhZKCksIDAs
IGJveC0+aXNMaW5lQnJlYWsoKSwgaXNGaXJzdE9uTGluZSwgaXNMYXN0T25MaW5lLCBjb250YWlu
c1N0YXJ0LCBjb250YWluc0VuZCwgYm94SXNIb3Jpem9udGFsLCBpc0ZpeGVkLCBjb250YWluaW5n
QmxvY2stPmlzUnVieVRleHQoKSwgY29sdW1uTnVtYmVyRm9yT2Zmc2V0KGFic1JlY3QueCgpKSkp
OworICAgIH0KK30KKyNlbmRpZgorCiBWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzQ2xpcHBlZFRvRWxsaXBzaXMoKSBjb25zdAogewogICAgIGlmIChhdXRvIGxheW91
dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkgewpAQCAtOTUzLDEzICsxMDM4LDI1IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBjYXNlIFRT
Tk9ORToKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUU0NJUkNMRToKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIHNlY3VyZVRleHQoYmxhY2tDaXJjbGUpOworI2Vsc2UKICAgICAgICAgc2Vj
dXJlVGV4dCh3aGl0ZUJ1bGxldCk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
U0RJU0M6CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBzZWN1cmVUZXh0KGJsYWNrQ2lyY2xl
KTsKKyNlbHNlCiAgICAgICAgIHNlY3VyZVRleHQoYnVsbGV0KTsKKyNlbmRpZgogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFRTU1FVQVJFOgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgc2Vj
dXJlVGV4dChibGFja0NpcmNsZSk7CisjZWxzZQogICAgICAgICBzZWN1cmVUZXh0KGJsYWNrU3F1
YXJlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIEFTU0VSVCghbV90ZXh0LmlzTnVsbCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDljYTMxNmY1YWM3YWI0OWNhM2Fm
NjVjOTgxM2UyYWVhNGYwNmVkMGYuLjBlYTJiZjExNzEyNDRjMDNjYTY0YWU5YjVjNTlhNTllM2E4
ZmE4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtNjQsNiArNjQs
OSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IE9WRVJS
SURFIEZJTkFMOwogICAgIFZlY3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UodW5z
aWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBj
b25zdDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTZWxlY3Rp
b25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAs
IHVuc2lnbmVkIGVuZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwog
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGFic29sdXRlUXVhZHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVj
dGlvbkhlaWdodCA9IGZhbHNlLCBib29sKiB3YXNGaXhlZCA9IG51bGxwdHIpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggOGZj
YmFhMjMyNjVlOGJhOGUxZDM0ZTdlNmRmMGQ5NmVlZGI0YjRmYy4uOTZjNWQyMDMyY2FmOWE3ZDJi
NzUwZTE4YjExZmFjNmNlNzAyYmRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC05Miw2ICs5MiwzMSBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSwgUmVuZAogICAgIGJvb2wgZGlzYWJsZWQgPSB1cGRhdGVVc2VyTW9kaWZ5UHJvcGVydHkodGV4
dEZvcm1Db250cm9sRWxlbWVudCgpLCB0ZXh0QmxvY2tTdHlsZSk7CiAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0Q29sb3IodGhlbWUoKS0+ZGlzYWJsZWRUZXh0
Q29sb3IodGV4dEJsb2NrU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgc3RhcnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKSkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAodGV4dEJsb2NrU3R5bGUt
PnRleHRTZWN1cml0eSgpICE9IFRTTk9ORSAmJiAhdGV4dEJsb2NrU3R5bGUtPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkgeworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgYWxpZ25tZW50IGJ1dCBm
b3JjZSB0aGUgZGlyZWN0aW9uIHRvIExUUiBzbyB0aGF0IHRoZSBsYXN0LXR5cGVkLCB1bm1hc2tl
ZCBjaGFyYWN0ZXIKKyAgICAgICAgLy8gKHdoaWNoIGNhbm5vdCBoYXZlIFJUTCBkaXJlY3Rpb25h
bGl0eSkgd2lsbCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBtYXNrZWQgY2hhcmFjdGVycy4g
U2VlIDxyZGFyOi8vcHJvYmxlbS83MDI0Mzc1Pi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
dGV4dEJsb2NrU3R5bGUtPnRleHRBbGlnbigpKSB7CisgICAgICAgIGNhc2UgVEFTVEFSVDoKKyAg
ICAgICAgY2FzZSBKVVNUSUZZOgorICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldFRleHRB
bGlnbihSSUdIVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUQUVORDoKKyAg
ICAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRUZXh0QWxpZ24oTEVGVCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICBjYXNlIFJJR0hUOgorICAgICAg
ICBjYXNlIENFTlRFUjoKKyAgICAgICAgY2FzZSBXRUJLSVRfTEVGVDoKKyAgICAgICAgY2FzZSBX
RUJLSVRfUklHSFQ6CisgICAgICAgIGNhc2UgV0VCS0lUX0NFTlRFUjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihM
VFIpOworICAgIH0KKyNlbmRpZgogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRCbG9j
a0xvZ2ljYWxIZWlnaHQoKSBjb25zdApAQCAtMzAzLDYgKzMyOCwyMiBAQCBSZW5kZXJPYmplY3Qq
IFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChib29sIHJlbGF5
b3V0Q2hpbGRyZQogICAgIHJldHVybiBwbGFjZWhvbGRlclJlbmRlcmVyOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FuU2Nyb2xsKCkgY29uc3QKK3sK
KyAgICBFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7CisgICAgcmV0dXJu
IGlubmVyVGV4dCAmJiBpbm5lclRleHQtPnJlbmRlcmVyKCkgJiYgaW5uZXJUZXh0LT5yZW5kZXJl
cigpLT5oYXNPdmVyZmxvd0NsaXAoKTsKK30KKworaW50IFJlbmRlclRleHRDb250cm9sOjppbm5l
ckxpbmVIZWlnaHQoKSBjb25zdAoreworICAgIEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4
dEVsZW1lbnQoKTsKKyAgICBpZiAoaW5uZXJUZXh0ICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmV0dXJuIGlubmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jb21wdXRlZExp
bmVIZWlnaHQoKTsKKyAgICByZXR1cm4gc3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKTsKK30K
KyNlbmRpZgorCiBib29sIFJlbmRlclRleHRDb250cm9sOjpjYW5CZVJlcGxhY2VkV2l0aElubGlu
ZVJ1bkluKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCmluZGV4IDdjMzhhMjFmODljZmU2ZTU3Nzc3ZWU0
ZmUwYmJlNjA1YjgzODc3YzcuLjkzNjNjMDE2MDgzZDhiODg0Zjk4MDUzODUyZDcxYmJjM2ZhYmNh
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCkBA
IC0zNyw2ICszNywxMyBAQCBwdWJsaWM6CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQm
IHRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWY8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0
eWxlKSBjb25zdCA9IDA7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBjYW5TY3JvbGwo
KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBpbm5lciBy
ZW5kZXJlci4KKyAgICB2aXJ0dWFsIGludCBpbm5lckxpbmVIZWlnaHQoKSBjb25zdCBPVkVSUklE
RTsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyVGV4dENvbnRyb2woSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
CmluZGV4IDBlYjU1NGE5YzQ0ZWI5NDQzMmViZmYwNDQ2Y2QyNWQ3ZjAyODMwODQuLmZhOGQ4YTgw
MWE0NTE1NzdmNjQwMjM1ZDNlOTgyYTJmYjQxOGM0NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcApAQCAtNjEs
MTEgKzYxLDEzIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUCiAKIGZsb2F0IFJlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRl
ZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIENv
dXJpZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3gg
YW5kIFNhZmFyaSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGlu
IHRoZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KICAgICBpZiAoZmFtaWx5ID09ICJMdWNp
ZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDEyMjkpOworI2VuZGlm
CiAKICAgICByZXR1cm4gUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aChmYW1pbHkp
OwogfQpAQCAtOTEsNiArOTMsMTMgQEAgUGFzc1JlZjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmQKICAgICB0ZXh0
QmxvY2tTdHlsZS5nZXQoKS5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKICAgICBhZGp1c3RJbm5l
clRleHRTdHlsZShzdGFydFN0eWxlLCAmdGV4dEJsb2NrU3R5bGUuZ2V0KCkpOwogICAgIHRleHRC
bG9ja1N0eWxlLmdldCgpLnNldERpc3BsYXkoQkxPQ0spOworCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIC8vIFdlJ3JlIGFkZGluZyB0aHJlZSBleHRyYSBwaXhlbHMgb2YgcGFkZGluZyB0byBsaW5l
IHRleHRhcmVhcyB1cCB3aXRoIHRleHQgZmllbGRzLiAgCisgICAgdGV4dEJsb2NrU3R5bGUuZ2V0
KCkuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKDMsIEZpeGVkKSk7CisgICAgdGV4dEJsb2NrU3R5bGUu
Z2V0KCkuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aCgzLCBGaXhlZCkpOworI2VuZGlmCisKICAgICBy
ZXR1cm4gdGV4dEJsb2NrU3R5bGU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggZjE1NTBjN2Iy
MzZmYTA4Y2MxZWNjNjlkZDNjOTdhMWU0ZTI3ZDczNi4uMDNkMmNlODBkYzVjNmRkMmVlNmE2NGE4
ZTM5YjQ4YTJlZWRlMmY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTQ1LDYgKzQ1LDEwIEBACiAj
aW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNr
U3RhdHMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUlPUy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKQEAgLTIxMSw2ICsyMTUsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmxheW91dCgpCiAgICAgICAgIGlmIChuZWVkZWRMYXlvdXQpCiAgICAgICAgICAgICBjb21w
dXRlT3ZlcmZsb3coY2xpZW50TG9naWNhbEJvdHRvbSgpKTsKICAgICB9CisKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgYWRqdXN0aW5nIHN0eWxlcyBk
dXJpbmcgbGF5b3V0LiA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4KKyAgICBpZiAoaW5wdXRFbGVt
ZW50KCkuaXNTZWFyY2hGaWVsZCgpKQorICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91
bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwgdGhpcyk7CisjZW5kaWYKIH0KIAogYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkBAIC0yOTgsMTIgKzMwOCwxNCBAQCBMYXlvdXRS
ZWN0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udHJvbENsaXBSZWN0KGNvbnN0IExh
eW91dFBvaW50JiBhZGRpdAogCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omdl
dEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KQogeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50
IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVm
YXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKICAgICAv
LyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29k
aW5nIHNwZWNpZmljKS4KICAgICAvLyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0
aGUgT1MvMiB0YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lk
YSBHcmFuZGUiKQogICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKKyNlbmRpZgog
CiAgICAgcmV0dXJuIFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsK
IH0KQEAgLTMxOCw2ICszMzAsOCBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aChmbG9hdCBjaGFyVwogICAgIExheW91
dFVuaXQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGVkTGF5b3V0VW5pdChj
aGFyV2lkdGggKiBmYWN0b3IpKTsKIAogICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKKwor
I2lmICFQTEFURk9STShJT1MpCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHls
ZSgpLmZvbnQoKS5maXJzdEZhbWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMg
dGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8v
IG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVm
b3gsIFNhZmFyaSBXaW4gYW5kCkBAIC0zMjcsNiArMzQxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRMb2dpY2FsV2lkdGgoZmxvYXQg
Y2hhclcKICAgICAgICAgbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7CiAgICAg
ZWxzZSBpZiAoaGFzVmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKICAgICAgICAgbWF4Q2hhcldp
ZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0aCgp
KTsKKyNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5wdXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEg
d2lkdGguCiAgICAgaWYgKG1heENoYXJXaWR0aCA+IDAuZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBiZTYyNzZhMzBlYTU5Y2Iy
MjQ5OGMzZmE4NDYzYzA4NzA4M2U4NWU1Li45NjhhMDgyOTA1ZGE5M2UyM2JkODkyYWM5OWNkNTIy
M2NkNTRkMDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwCkBAIC0yNzEsMTIgKzI3MSwxNCBAQCBzdGF0aWMgYm9vbCBsaW5lRGlyZWN0
aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURpcmVjdGlvbiwgY29uc3QgSW5saW5lVGV4
dAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSByaWdodCBlZGdl
IG9mIHRoaXMgYm94CiAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHBvc2l0aW9uIGdvZXMgaW4gdGhp
cyBib3gKICAgICBpZiAocG9pbnRMaW5lRGlyZWN0aW9uIDwgYm94LmxvZ2ljYWxSaWdodCgpKSB7
CiAgICAgICAgIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtID0gVXBzdHJlYW1JZlBvc2l0aW9u
SXNOb3RBdFN0YXJ0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisjZW5kaWYKIAogICAg
IC8vIGJveCBpcyBmaXJzdCBvbiBsaW5lCiAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMg
dG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQpAQCAtNDA2LDYgKzQw
OCwxMyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dExpbmVCb3hlczo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcgogCiAgICAgICAgICAgICBpZiAocG9pbnRC
bG9ja0RpcmVjdGlvbiA8IGJvdHRvbSB8fCAoYmxvY2tzQXJlRmxpcHBlZCAmJiBwb2ludEJsb2Nr
RGlyZWN0aW9uID09IGJvdHRvbSkpIHsKICAgICAgICAgICAgICAgICBTaG91bGRBZmZpbml0eUJl
RG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgICAgICAgICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiAhPSBib3gtPmxvZ2ljYWxM
ZWZ0KCkgJiYgcG9pbnQueCgpIDwgYm94LT54KCkgKyBib3gtPmxvZ2ljYWxXaWR0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGludCBoYWxmID0gYm94LT54KCkgKyBib3gtPmxvZ2ljYWxXaWR0
aCgpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gcG9pbnQu
eCgpIDwgaGFsZiA/IERPV05TVFJFQU0gOiBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbihib3gt
Pm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbikgKyBib3gtPnN0YXJ0KCksIGFm
ZmluaXR5KTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICBpZiAo
bGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KHBvaW50TGluZURpcmVjdGlvbiwgKmJveCwgc2hv
dWxkQWZmaW5pdHlCZURvd25zdHJlYW0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKCpib3gsIGJveC0+
b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGlyZWN0aW9uKSwgc2hvdWxkQWZmaW5pdHlCZURv
d25zdHJlYW0pOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKaW5kZXggNjQ5YzcxOGE1MTQ5ODUxODk5MDgyMzdmNmJhZjMwYzhjMzg4Njc3MS4u
N2QzYmRkYjVjMjJmMWE4OTYwYTYxMDlkMDE2ZTM5NTdmMDg4NjgzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC0zOTcsNiArMzk3LDEwIEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBV
TlVTRURfUEFSQU0ocik7CisgICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpICE9IE5v
Q29udHJvbFBhcnQ7CisjZWxzZQogICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHBhaW50IG1l
dGhvZCBiYXNlZCBvZmYgdGhlIGFwcGVhcmFuY2UgdmFsdWUuCiAgICAgc3dpdGNoIChvLT5zdHls
ZSgpLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKQEAgLTQ0MCw2ICs0
NDQsNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogICAgIH0KIAogICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgogfQogCiBib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQpAQCAtNDUyLDE1ICs0NTcsMjYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRE
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW4K
ICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNl
IFRleHRGaWVsZFBhcnQ6CisgICAgICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25z
KG8sIHBhaW50SW5mbywgcik7CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgY2FzZSBMaXN0
Ym94UGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhvLCBwYWlu
dEluZm8sIHIpOwogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAgICByZXR1cm4gcGFpbnRD
aGVja2JveERlY29yYXRpb25zKG8sIHBhaW50SW5mbywgcik7CiAgICAgY2FzZSBSYWRpb1BhcnQ6
CisgICAgICAgIHJldHVybiBwYWludFJhZGlvRGVjb3JhdGlvbnMobywgcGFpbnRJbmZvLCByKTsK
ICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICByZXR1cm4gcGFpbnRQdXNoQnV0dG9u
RGVjb3JhdGlvbnMobywgcGFpbnRJbmZvLCByKTsKICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6
Ci0gICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50U3F1YXJl
QnV0dG9uRGVjb3JhdGlvbnMobywgcGFpbnRJbmZvLCByKTsKICAgICBjYXNlIEJ1dHRvblBhcnQ6
CisgICAgICAgIHJldHVybiBwYWludEJ1dHRvbkRlY29yYXRpb25zKG8sIHBhaW50SW5mbywgcik7
CiAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgICAgIHJldHVybiBwYWludE1lbnVMaXN0RGVj
b3JhdGlvbnMobywgcGFpbnRJbmZvLCByKTsKKyAgICBjYXNlIFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQ6CisgICAgY2FzZSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydDoKKyAgICAgICAgcmV0dXJu
IHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhvLCBwYWludEluZm8sIHIpOworICAgIGNhc2Ug
U2VhcmNoRmllbGRQYXJ0OgorICAgICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZERlY29yYXRp
b25zKG8sIHBhaW50SW5mbywgcik7CiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgY2Fz
ZSBNZXRlclBhcnQ6CiAgICAgY2FzZSBSZWxldmFuY3lMZXZlbEluZGljYXRvclBhcnQ6CkBAIC00
NzMsOSArNDg5LDggQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW4KICNlbmRpZgogICAgIGNhc2Ug
U2xpZGVySG9yaXpvbnRhbFBhcnQ6CiAgICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAg
Y2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBMaXN0Ym94UGFy
dDoKKyAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25QYXJ0OgogICAgIGNhc2UgU2VhcmNoRmllbGREZWNvcmF0aW9uUGFydDoKICAgICBj
YXNlIFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0OgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuaAppbmRleCA4YTE0YTI1ODdjYjFkN2Y3OWM5NTdkODU2MTgyNWM4ODM1
MmQ3YjBmLi4zZGYxNTFlYWFhMGY4N2U0NjA5NTk4MzgwNDEyNmRlMGRmMmFjYWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtNDksNiArNDksMTAgQEAgY2xhc3Mg
UmVuZGVyUHJvZ3Jlc3M7CiAjZW5kaWYKIGNsYXNzIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOwog
CisjaWYgUExBVEZPUk0oSU9TKQorY2xhc3MgSWNvbjsKKyNlbmRpZgorCiBjbGFzcyBSZW5kZXJU
aGVtZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRlclRoZW1lPiB7CiBwcm90ZWN0ZWQ6CiAgICAg
UmVuZGVyVGhlbWUoKTsKQEAgLTI3MSwxOCArMjc1LDMxIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAgdmly
dHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3REZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgYm9v
bCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgZW51bSBGaWxl
VXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVGaWxlLCBNdWx0aXBsZUZpbGVzIH07CisgICAgdmly
dHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIC8q
aW5wdXRSZW5kZXJlciovLCBSZW5kZXJPYmplY3QqIC8qYnV0dG9uUmVuZGVyZXIqLywgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMzAzLDkgKzMyMCwx
MSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjJlNWU0MGU1NDMwMDBkMjg2YmNm
Zjk4Mjc0MDRmNzYwOWQ4MjM2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUlPU19oCisjZGVmaW5lIFJlbmRl
clRoZW1lSU9TX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFJlbmRlclN0eWxlOworY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworICAgIAorY2xhc3MgUmVuZGVyVGhlbWVJT1MgOiBwdWJsaWMg
UmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1l
PiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsKKworICAgIHN0YXRpYyB2b2lkIGFkanVzdFJv
dW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiwgUmVuZGVyQm94Kik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBPVkVS
UklERTsKKworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBjb250ZW50U2l6ZUNhdGVnb3J5KCk7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ck9iamVjdCopIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IE9WRVJS
SURFOworCisgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgorICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVj
a2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlv
bnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGJ1dHRvblJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9u
cykgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBh
aW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRl
Y29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBPVkVSUklERTsKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorICAgIC8vIFJldHVy
bnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3Mg
YmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jl
c3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBPVkVSUklERTsKKyAgICAvLyBSZXR1cm5zIHRo
ZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHZp
cnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MqKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFy
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklE
RTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgdmlydHVhbCBJ
bnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQg
c2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IE9WRVJSSURFOworI2VuZGlm
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3QgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1UYXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIDB4NEQxQTFBMUE7IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQ
bGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IHNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsK
KworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNvbnRyb2xzU3R5
bGVTaGVldCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNTY3Jp
cHQoKSBPVkVSUklERTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFJlbmRlclRoZW1lSU9TKCk7
CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVJT1MoKSB7IH0KKworICAgIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvcigpIGNvbnN0OworICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVyQ2xpcChS
ZW5kZXJPYmplY3QqIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworfTsK
KworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIFJlbmRlclRoZW1lSU9T
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lOTNhOWEzZDE5ODRjZDc0OThiYmVjYTJlNGRjZmIyMDdlYTNkNDcyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0wLDAg
KzEsMTIxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgorI2ltcG9ydCAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2ltcG9ydCAiRGF0ZUNvbXBvbmVudHMu
aCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250
Q2FjaGUuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBv
cnQgIkdyYWRpZW50LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW1wb3J0
ICJIVE1MTmFtZXMuaCIKKyNpbXBvcnQgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW1wb3J0ICJJ
Y29uLmgiCisjaW1wb3J0ICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNp
bXBvcnQgIlBsYXRmb3JtTG9jYWxlLmgiCisjaW1wb3J0ICJQYWludEluZm8uaCIKKyNpbXBvcnQg
IlJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiUmVuZGVyU3R5bGUuaCIKKyNpbXBvcnQgIlJlbmRl
clRoZW1lSU9TLmgiCisjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCisjaW1wb3J0ICJTb2Z0TGlua2lu
Zy5oIgorI2ltcG9ydCAiVXNlckFnZW50U2NyaXB0cy5oIgorI2ltcG9ydCAiVXNlckFnZW50U3R5
bGVTaGVldHMuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbXBvcnQgPENvcmVH
cmFwaGljcy9DR1BhdGhQcml2YXRlLmg+CisjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnREZXNjcmlw
dG9yUHJpdi5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorI2ltcG9ydCAiUmVuZGVy
UHJvZ3Jlc3MuaCIKKyNlbmRpZgorCitAaW50ZXJmYWNlIFVJQXBwbGljYXRpb24KKysgKFVJQXBw
bGljYXRpb24gKilzaGFyZWRBcHBsaWNhdGlvbjsKK0Bwcm9wZXJ0eShub25hdG9taWMsY29weSkg
TlNTdHJpbmcgKnByZWZlcnJlZENvbnRlbnRTaXplQ2F0ZWdvcnk7CitAZW5kCisKK1NPRlRfTElO
S19GUkFNRVdPUksoVUlLaXQpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQXBwbGljYXRpb24p
CitTT0ZUX0xJTktfQ09OU1RBTlQoVUlLaXQsIFVJQ29udGVudFNpemVDYXRlZ29yeURpZENoYW5n
ZU5vdGlmaWNhdGlvbiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIFVJQ29udGVudFNpemVDYXRlZ29y
eURpZENoYW5nZU5vdGlmaWNhdGlvbiBnZXRVSUNvbnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2VO
b3RpZmljYXRpb24oKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGZsb2F0IENvbnRy
b2xCYXNlSGVpZ2h0ID0gMjA7Citjb25zdCBmbG9hdCBDb250cm9sQmFzZUZvbnRTaXplID0gMTE7
CisKK3N0cnVjdCBJT1NHcmFkaWVudCB7CisgICAgZmxvYXQqIHN0YXJ0OyAvLyBwb2ludHMgdG8g
c3RhdGljIGZsb2F0WzRdCisgICAgZmxvYXQqIGVuZDsgLy8gcG9pbnRzIHRvIHN0YXRpYyBmbG9h
dFs0XQorICAgIElPU0dyYWRpZW50KGZsb2F0IHN0YXJ0WzRdLCBmbG9hdCBlbmRbNF0pCisgICAg
ICAgIDogc3RhcnQoc3RhcnQpCisgICAgICAgICwgZW5kKGVuZCkKKyAgICB7CisgICAgfQorfTsK
KwordHlwZWRlZiBJT1NHcmFkaWVudCogSU9TR3JhZGllbnRSZWY7CisKK2VudW0gSW50ZXJwb2xh
dGlvbgoreworICAgIExpbmVhckludGVycG9sYXRpb24sCisgICAgRXhwb25lbnRpYWxJbnRlcnBv
bGF0aW9uCit9OworCitzdGF0aWMgdm9pZCBpbnRlcnBvbGF0ZUxpbmVhckdyYWRpZW50KHZvaWQg
KmluZm8sIGNvbnN0IENHRmxvYXQgKmluRGF0YSwgQ0dGbG9hdCAqb3V0RGF0YSkKK3sKKyAgICBJ
T1NHcmFkaWVudFJlZiBncmFkaWVudCA9IHN0YXRpY19jYXN0PElPU0dyYWRpZW50UmVmPihpbmZv
KTsKKyAgICBmbG9hdCBhbHBoYSA9IGluRGF0YVswXTsKKyAgICBmbG9hdCBpbnZlcnNlID0gMS4w
ZiAtIGFscGhhOworCisgICAgb3V0RGF0YVswXSA9IGludmVyc2UgKiBncmFkaWVudC0+c3RhcnRb
MF0gKyBhbHBoYSAqIGdyYWRpZW50LT5lbmRbMF07CisgICAgb3V0RGF0YVsxXSA9IGludmVyc2Ug
KiBncmFkaWVudC0+c3RhcnRbMV0gKyBhbHBoYSAqIGdyYWRpZW50LT5lbmRbMV07CisgICAgb3V0
RGF0YVsyXSA9IGludmVyc2UgKiBncmFkaWVudC0+c3RhcnRbMl0gKyBhbHBoYSAqIGdyYWRpZW50
LT5lbmRbMl07CisgICAgb3V0RGF0YVszXSA9IGludmVyc2UgKiBncmFkaWVudC0+c3RhcnRbM10g
KyBhbHBoYSAqIGdyYWRpZW50LT5lbmRbM107Cit9CisKK3N0YXRpYyB2b2lkIGludGVycG9sYXRl
RXhwb25lbnRpYWxHcmFkaWVudCh2b2lkICppbmZvLCBjb25zdCBDR0Zsb2F0ICppbkRhdGEsIENH
RmxvYXQgKm91dERhdGEpCit7CisgICAgSU9TR3JhZGllbnRSZWYgZ3JhZGllbnQgPSBzdGF0aWNf
Y2FzdDxJT1NHcmFkaWVudFJlZj4oaW5mbyk7CisgICAgZmxvYXQgYSA9IGluRGF0YVswXTsKKyAg
ICBmb3IgKGludCBwYWludEluZm8gPSAwOyBwYWludEluZm8gPCA0OyArK3BhaW50SW5mbykgewor
ICAgICAgICBmbG9hdCBlbmQgPSBsb2dmKHN0ZDo6bWF4KGdyYWRpZW50LT5lbmRbcGFpbnRJbmZv
XSwgMC4wMWYpKTsKKyAgICAgICAgZmxvYXQgc3RhcnQgPSBsb2dmKHN0ZDo6bWF4KGdyYWRpZW50
LT5zdGFydFtwYWludEluZm9dLCAwLjAxZikpOworICAgICAgICBvdXREYXRhW3BhaW50SW5mb10g
PSBleHBmKHN0YXJ0IC0gKGVuZCArIHN0YXJ0KSAqIGEpOworICAgIH0KK30KKworc3RhdGljIENH
RnVuY3Rpb25SZWYgZ2V0U2hhcmVkRnVuY3Rpb25SZWYoSU9TR3JhZGllbnRSZWYgZ3JhZGllbnQs
IEludGVycG9sYXRpb24gaW50ZXJwb2xhdGlvbikKK3sKKyAgICBDR0Z1bmN0aW9uUmVmIGZ1bmN0
aW9uID0gbnVsbHB0cjsKKworICAgIHN0YXRpYyBIYXNoTWFwPElPU0dyYWRpZW50UmVmLCBDR0Z1
bmN0aW9uUmVmPiogbGluZWFyRnVuY3Rpb25SZWZzOworICAgIHN0YXRpYyBIYXNoTWFwPElPU0dy
YWRpZW50UmVmLCBDR0Z1bmN0aW9uUmVmPiogZXhwb25lbnRpYWxGdW5jdGlvblJlZnM7OworCisg
ICAgaWYgKGludGVycG9sYXRpb24gPT0gTGluZWFySW50ZXJwb2xhdGlvbikgeworICAgICAgICBp
ZiAoIWxpbmVhckZ1bmN0aW9uUmVmcykKKyAgICAgICAgICAgIGxpbmVhckZ1bmN0aW9uUmVmcyA9
IG5ldyBIYXNoTWFwPElPU0dyYWRpZW50UmVmLCBDR0Z1bmN0aW9uUmVmPjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnVuY3Rpb24gPSBsaW5lYXJGdW5jdGlvblJlZnMtPmdldChncmFkaWVu
dCk7CisgICAgCisgICAgICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHN0YXRpYyBz
dHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBsaW5lYXJGdW5jdGlvbkNhbGxiYWNrcyA9ICB7IDAs
IGludGVycG9sYXRlTGluZWFyR3JhZGllbnQsIDAgfTsKKyAgICAgICAgICAgIGxpbmVhckZ1bmN0
aW9uUmVmcy0+c2V0KGdyYWRpZW50LCBmdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUoZ3JhZGll
bnQsIDEsIG51bGxwdHIsIDQsIG51bGxwdHIsICZsaW5lYXJGdW5jdGlvbkNhbGxiYWNrcykpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIH0KKworICAgIGlmICgh
ZXhwb25lbnRpYWxGdW5jdGlvblJlZnMpCisgICAgICAgIGV4cG9uZW50aWFsRnVuY3Rpb25SZWZz
ID0gbmV3IEhhc2hNYXA8SU9TR3JhZGllbnRSZWYsIENHRnVuY3Rpb25SZWY+OworICAgIGVsc2UK
KyAgICAgICAgZnVuY3Rpb24gPSBleHBvbmVudGlhbEZ1bmN0aW9uUmVmcy0+Z2V0KGdyYWRpZW50
KTsKKworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgc3RhdGljIHN0cnVjdCBDR0Z1bmN0
aW9uQ2FsbGJhY2tzIGV4cG9uZW50aWFsRnVuY3Rpb25DYWxsYmFja3MgPSAgeyAwLCBpbnRlcnBv
bGF0ZUV4cG9uZW50aWFsR3JhZGllbnQsIDAgfTsKKyAgICAgICAgZXhwb25lbnRpYWxGdW5jdGlv
blJlZnMtPnNldChncmFkaWVudCwgZnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKGdyYWRpZW50
LCAxLCAwLCA0LCAwLCAmZXhwb25lbnRpYWxGdW5jdGlvbkNhbGxiYWNrcykpOworICAgIH0KKwor
ICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworc3RhdGljIHZvaWQgZHJhd0F4aWFsR3JhZGllbnQo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIElPU0dyYWRpZW50UmVmIGdyYWRpZW50LCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBzdG9wUG9pbnQsIEludGVycG9s
YXRpb24gaW50ZXJwb2xhdGlvbikKK3sKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBzaGFk
aW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChkZXZpY2VSR0JDb2xvclNwYWNlUmVm
KCksIHN0YXJ0UG9pbnQsIHN0b3BQb2ludCwgZ2V0U2hhcmVkRnVuY3Rpb25SZWYoZ3JhZGllbnQs
IGludGVycG9sYXRpb24pLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBDR0NvbnRleHREcmF3U2hhZGlu
Zyhjb250ZXh0LCBzaGFkaW5nLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgZHJhd1JhZGlhbEdy
YWRpZW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBJT1NHcmFkaWVudFJlZiBncmFkaWVudCwgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgZmxvYXQgc3RhcnRSYWRpdXMsIGNvbnN0IEZsb2F0
UG9pbnQmIHN0b3BQb2ludCwgZmxvYXQgc3RvcFJhZGl1cywgSW50ZXJwb2xhdGlvbiBpbnRlcnBv
bGF0aW9uKQoreworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHNoYWRpbmcgPSBhZG9wdENG
KENHU2hhZGluZ0NyZWF0ZVJhZGlhbChkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIHN0YXJ0UG9p
bnQsIHN0YXJ0UmFkaXVzLCBzdG9wUG9pbnQsIHN0b3BSYWRpdXMsIGdldFNoYXJlZEZ1bmN0aW9u
UmVmKGdyYWRpZW50LCBpbnRlcnBvbGF0aW9uKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgc2hhZGluZy5nZXQoKSk7Cit9CisKK2VudW0gSU9TR3Jh
ZGllbnRUeXBlIHsKKyAgICBJbnNldEdyYWRpZW50LAorICAgIFNoaW5lR3JhZGllbnQsCisgICAg
U2hhZGVHcmFkaWVudCwKKyAgICBDb252ZXhHcmFkaWVudCwKKyAgICBDb25jYXZlR3JhZGllbnQs
CisgICAgU2xpZGVyVHJhY2tHcmFkaWVudCwKKyAgICBSZWFkb25seVNsaWRlclRyYWNrR3JhZGll
bnQsCisgICAgU2xpZGVyVGh1bWJPcGFxdWVQcmVzc2VkR3JhZGllbnQsCit9OworCitzdGF0aWMg
SU9TR3JhZGllbnRSZWYgZ2V0SW5zZXRHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVu
ZFs0XSA9IHsgMCAvIDI1NS4wLCAwIC8gMjU1LjAsIDAgLyAyNTUuMCwgMCB9OworICAgIHN0YXRp
YyBmbG9hdCBzdGFydFs0XSA9IHsgMCAvIDI1NS4wLCAwIC8gMjU1LjAsIDAgLyAyNTUuMCwgMC4y
IH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBncmFkaWVudChzdGFy
dCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50LmdldCgpOworfQorCitzdGF0aWMgSU9TR3Jh
ZGllbnRSZWYgZ2V0U2hpbmVHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVuZFs0XSA9
IHsgMSwgMSwgMSwgMC44IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAxLCAxLCAx
LCAwIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBncmFkaWVudChz
dGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50LmdldCgpOworfQorCitzdGF0aWMgSU9T
R3JhZGllbnRSZWYgZ2V0U2hhZGVHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVuZFs0
XSA9IHsgMTc4IC8gMjU1LjAsIDE3OCAvIDI1NS4wLCAxNzggLyAyNTUuMCwgMC42NSB9OworICAg
IHN0YXRpYyBmbG9hdCBzdGFydFs0XSA9IHsgMjUyIC8gMjU1LjAsIDI1MiAvIDI1NS4wLCAyNTIg
LyAyNTUuMCwgMC42NSB9OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJT1NHcmFkaWVudD4g
Z3JhZGllbnQoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuICZncmFkaWVudC5nZXQoKTsKK30KKwor
c3RhdGljIElPU0dyYWRpZW50UmVmIGdldENvbnZleEdyYWRpZW50KCkKK3sKKyAgICBzdGF0aWMg
ZmxvYXQgZW5kWzRdID0geyAyNTUgLyAyNTUuMCwgMjU1IC8gMjU1LjAsIDI1NSAvIDI1NS4wLCAw
LjA1IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAyNTUgLyAyNTUuMCwgMjU1IC8g
MjU1LjAsIDI1NSAvIDI1NS4wLCAwLjQzIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElP
U0dyYWRpZW50PiBncmFkaWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50Lmdl
dCgpOworfQorCitzdGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0Q29uY2F2ZUdyYWRpZW50KCkKK3sK
KyAgICBzdGF0aWMgZmxvYXQgZW5kWzRdID0geyAyNTUgLyAyNTUuMCwgMjU1IC8gMjU1LjAsIDI1
NSAvIDI1NS4wLCAwLjQ2IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAyNTUgLyAy
NTUuMCwgMjU1IC8gMjU1LjAsIDI1NSAvIDI1NS4wLCAwIH07CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPElPU0dyYWRpZW50PiBncmFkaWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdy
YWRpZW50LmdldCgpOworfQorCitzdGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0U2xpZGVyVHJhY2tH
cmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVuZFs0XSA9IHsgMTMyIC8gMjU1LjAsIDEz
MiAvIDI1NS4wLCAxMzIgLyAyNTUuMCwgMSB9OworICAgIHN0YXRpYyBmbG9hdCBzdGFydFs0XSA9
IHsgNzQgLyAyNTUuMCwgNzcgLyAyNTUuMCwgODAgLyAyNTUuMCwgMSB9OworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxJT1NHcmFkaWVudD4gZ3JhZGllbnQoc3RhcnQsIGVuZCk7CisgICAgcmV0
dXJuICZncmFkaWVudC5nZXQoKTsKK30KKworc3RhdGljIElPU0dyYWRpZW50UmVmIGdldFJlYWRv
bmx5U2xpZGVyVHJhY2tHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVuZFs0XSA9IHsg
MTMyIC8gMjU1LjAsIDEzMiAvIDI1NS4wLCAxMzIgLyAyNTUuMCwgMC40IH07CisgICAgc3RhdGlj
IGZsb2F0IHN0YXJ0WzRdID0geyA3NCAvIDI1NS4wLCA3NyAvIDI1NS4wLCA4MCAvMjU1LjAsIDAu
NCB9OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJT1NHcmFkaWVudD4gZ3JhZGllbnQoc3Rh
cnQsIGVuZCk7CisgICAgcmV0dXJuICZncmFkaWVudC5nZXQoKTsKK30KKworc3RhdGljIElPU0dy
YWRpZW50UmVmIGdldFNsaWRlclRodW1iT3BhcXVlUHJlc3NlZEdyYWRpZW50KCkKK3sKKyAgICBz
dGF0aWMgZmxvYXQgZW5kWzRdID0geyAxNDQgLyAyNTUuMCwgMTQ0IC8gMjU1LjAsIDE0NCAvIDI1
NS4wLCAxfTsKKyAgICBzdGF0aWMgZmxvYXQgc3RhcnRbNF0gPSB7IDU1IC8gMjU1LjAsIDU1IC8g
MjU1LjAsIDU1IC8gMjU1LjAsIDEgfTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SU9TR3Jh
ZGllbnQ+IGdyYWRpZW50KHN0YXJ0LCBlbmQpOworICAgIHJldHVybiAmZ3JhZGllbnQuZ2V0KCk7
Cit9CisKK3N0YXRpYyBJT1NHcmFkaWVudFJlZiBncmFkaWVudFdpdGhOYW1lKElPU0dyYWRpZW50
VHlwZSBncmFkaWVudFR5cGUpCit7CisgICAgc3dpdGNoIChncmFkaWVudFR5cGUpIHsKKyAgICBj
YXNlIEluc2V0R3JhZGllbnQ6CisgICAgICAgIHJldHVybiBnZXRJbnNldEdyYWRpZW50KCk7Cisg
ICAgY2FzZSBTaGluZUdyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0U2hpbmVHcmFkaWVudCgp
OworICAgIGNhc2UgU2hhZGVHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdldFNoYWRlR3JhZGll
bnQoKTsKKyAgICBjYXNlIENvbnZleEdyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0Q29udmV4
R3JhZGllbnQoKTsKKyAgICBjYXNlIENvbmNhdmVHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdl
dENvbmNhdmVHcmFkaWVudCgpOworICAgIGNhc2UgU2xpZGVyVHJhY2tHcmFkaWVudDoKKyAgICAg
ICAgcmV0dXJuIGdldFNsaWRlclRyYWNrR3JhZGllbnQoKTsKKyAgICBjYXNlIFJlYWRvbmx5U2xp
ZGVyVHJhY2tHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdldFJlYWRvbmx5U2xpZGVyVHJhY2tH
cmFkaWVudCgpOworICAgIGNhc2UgU2xpZGVyVGh1bWJPcGFxdWVQcmVzc2VkR3JhZGllbnQ6Cisg
ICAgICAgIHJldHVybiBnZXRTbGlkZXJUaHVtYk9wYXF1ZVByZXNzZWRHcmFkaWVudCgpOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
c3RhdGljIHZvaWQgY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShDRk5vdGlmaWNhdGlvbkNl
bnRlclJlZiwgdm9pZCosIENGU3RyaW5nUmVmIG5hbWUsIGNvbnN0IHZvaWQqLCBDRkRpY3Rpb25h
cnlSZWYpCit7CisgICAgQVNTRVJUX1VOVVNFRChuYW1lLCBDRkVxdWFsKG5hbWUsIFVJQ29udGVu
dFNpemVDYXRlZ29yeURpZENoYW5nZU5vdGlmaWNhdGlvbikpOworICAgIFdlYlRocmVhZFJ1bihe
eworICAgICAgICBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJ
bkVudmlyb25tZW50KCk7CisgICAgfSk7Cit9CisKK1JlbmRlclRoZW1lSU9TOjpSZW5kZXJUaGVt
ZUlPUygpCit7CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlmaWNh
dGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGNvbnRlbnRTaXplQ2F0ZWdvcnlEaWRD
aGFuZ2UsIFVJQ29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZU5vdGlmaWNhdGlvbiwgMCwgQ0ZO
b3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOworfQorCitQ
YXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQor
eworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcmVuZGVyVGhlbWUgPSBSZW5kZXJUaGVtZUlPUzo6
Y3JlYXRlKCkubGVha1JlZigpOworICAgIHJldHVybiByZW5kZXJUaGVtZTsKK30KKworUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUlPUyk7Cit9CisKK0NGU3RyaW5nUmVmIFJlbmRlclRo
ZW1lSU9TOjpjb250ZW50U2l6ZUNhdGVnb3J5KCkKK3sKKyAgICByZXR1cm4gKENGU3RyaW5nUmVm
KVtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIHByZWZlcnJlZENv
bnRlbnRTaXplQ2F0ZWdvcnldOworfQorCitjb25zdCBDb2xvciYgUmVuZGVyVGhlbWVJT1M6OnNo
YWRvd0NvbG9yKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgQ29sb3IgY29sb3IoMC4wZiwgMC4wZiwg
MC4wZiwgMC43Zik7CisgICAgcmV0dXJuIGNvbG9yOworfQorCitGbG9hdFJlY3QgUmVuZGVyVGhl
bWVJT1M6OmFkZFJvdW5kZWRCb3JkZXJDbGlwKFJlbmRlck9iamVjdCogYm94LCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gVG8gZml4IGlu
bmVyIGJvcmRlciBibGVlZGluZyBpc3N1ZXMgPHJkYXI6Ly9wcm9ibGVtLzk4MTI1MDc+LCB3ZSBj
bGlwIHRvIHRoZSBvdXRlciBib3JkZXIgYW5kIGFzc2VydCB0aGF0CisgICAgLy8gdGhlIGJvcmRl
ciBpcyBvcGFxdWUgb3IgdHJhbnNwYXJlbnQsIHVubGVzcyB3ZSdyZSBjaGVja2VkIGJlY2F1c2Ug
Y2hlY2tlZCByYWRpby9jaGVja2JveGVzIHNob3cgbm8gYmxlZWRpbmcuCisgICAgUmVuZGVyU3R5
bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIFJvdW5kZWRSZWN0IGJvcmRlciA9IGlzQ2hl
Y2tlZChib3gpID8gc3R5bGUuZ2V0Um91bmRlZElubmVyQm9yZGVyRm9yKHJlY3QpIDogc3R5bGUu
Z2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKKworICAgIGlmIChib3JkZXIuaXNSb3VuZGVkKCkp
CisgICAgICAgIGNvbnRleHQtPmNsaXBSb3VuZGVkUmVjdChib3JkZXIpOworICAgIGVsc2UKKyAg
ICAgICAgY29udGV4dC0+Y2xpcChib3JkZXIucmVjdCgpKTsKKworICAgIGlmIChpc0NoZWNrZWQo
Ym94KSkgeworICAgICAgICBBU1NFUlQoc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Qm9yZGVyVG9wQ29sb3IpLmFscGhhKCkgJSAyNTUgPT0gMCk7CisgICAgICAgIEFTU0VS
VChzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9y
KS5hbHBoYSgpICUgMjU1ID09IDApOworICAgICAgICBBU1NFUlQoc3R5bGUudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpLmFscGhhKCkgJSAyNTUgPT0g
MCk7CisgICAgICAgIEFTU0VSVChzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3IpLmFscGhhKCkgJSAyNTUgPT0gMCk7CisgICAgfQorCisgICAgcmV0
dXJuIGJvcmRlci5yZWN0KCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNr
Ym94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit7CisgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExlbmd0aCBs
ZW5ndGggPSBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS0+Zm9u
dFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICAKKyAgICBzdHlsZS0+c2V0V2lkdGgobGVuZ3Ro
KTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7Cit9CisKK3N0YXRpYyBDR1BvaW50IHNo
b3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1BvaW50IGVuZCwgZmxvYXQgd2lkdGgpCit7CisgICAg
ZmxvYXQgeCA9IGVuZC54IC0gc3RhcnQueDsKKyAgICBmbG9hdCB5ID0gZW5kLnkgLSBzdGFydC55
OworICAgIGZsb2F0IHJhdGlvID0gd2lkdGggLyBzcXJ0Zih4ICogeCArIHkgKiB5KTsKKyAgICBy
ZXR1cm4gQ0dQb2ludE1ha2Uoc3RhcnQueCArIHggKiByYXRpbywgc3RhcnQueSArIHkgKiByYXRp
byk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhS
ZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpw
YWludEluZm8uY29udGV4dCk7CisgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVy
Q2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKKworICAgIGZsb2F0IHdpZHRoID0g
Y2xpcC53aWR0aCgpOworICAgIGZsb2F0IGhlaWdodCA9IGNsaXAuaGVpZ2h0KCk7CisKKyAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworICAgIGlmIChpc0NoZWNrZWQoYm94KSkgeworICAgICAgICBkcmF3QXhpYWxHcmFkaWVu
dChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoQ29uY2F2ZUdyYWRpZW50KSwgY2xpcC5sb2Nh
dGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFkoKSksIExpbmVhckludGVycG9s
YXRpb24pOworCisgICAgICAgIHN0YXRpYyBmbG9hdCB0aGlja25lc3NSYXRpbyA9IDIgLyAxNC4w
OworICAgICAgICBzdGF0aWMgQ0dTaXplIHNpemUgPSB7IDE0LjBmLCAxNC4wZiB9OworICAgICAg
ICBzdGF0aWMgQ0dQb2ludCBwYXRoUmF0aW9zWzNdID0geworICAgICAgICAgICAgeyAyLjVmIC8g
c2l6ZS53aWR0aCwgNy41ZiAvIHNpemUuaGVpZ2h0IH0sCisgICAgICAgICAgICB7IDUuNWYgLyBz
aXplLndpZHRoLCAxMC41ZiAvIHNpemUuaGVpZ2h0IH0sCisgICAgICAgICAgICB7IDExLjVmIC8g
c2l6ZS53aWR0aCwgMi41ZiAvIHNpemUuaGVpZ2h0IH0KKyAgICAgICAgfTsKKworICAgICAgICBm
bG9hdCBsaW5lV2lkdGggPSBzdGQ6Om1pbih3aWR0aCwgaGVpZ2h0KSAqIDIuMGYgKiB0aGlja25l
c3NSYXRpbzsKKworICAgICAgICBDR1BvaW50IGxpbmVbM10gPSB7CisgICAgICAgICAgICBDR1Bv
aW50TWFrZShjbGlwLngoKSArIHdpZHRoICogcGF0aFJhdGlvc1swXS54LCBjbGlwLnkoKSArIGhl
aWdodCAqIHBhdGhSYXRpb3NbMF0ueSksCisgICAgICAgICAgICBDR1BvaW50TWFrZShjbGlwLngo
KSArIHdpZHRoICogcGF0aFJhdGlvc1sxXS54LCBjbGlwLnkoKSArIGhlaWdodCAqIHBhdGhSYXRp
b3NbMV0ueSksCisgICAgICAgICAgICBDR1BvaW50TWFrZShjbGlwLngoKSArIHdpZHRoICogcGF0
aFJhdGlvc1syXS54LCBjbGlwLnkoKSArIGhlaWdodCAqIHBhdGhSYXRpb3NbMl0ueSkKKyAgICAg
ICAgfTsKKyAgICAgICAgQ0dQb2ludCBzaGFkb3dbM10gPSB7CisgICAgICAgICAgICBzaG9ydGVu
ZWQobGluZVswXSwgbGluZVsxXSwgbGluZVdpZHRoIC8gNC4wZiksCisgICAgICAgICAgICBsaW5l
WzFdLAorICAgICAgICAgICAgc2hvcnRlbmVkKGxpbmVbMl0sIGxpbmVbMV0sIGxpbmVXaWR0aCAv
IDQuMGYpCisgICAgICAgIH07CisKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9r
ZVRoaWNrbmVzcyhsaW5lV2lkdGgpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43ZiksIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Sm9pbmVkTGluZXMoc2hhZG93
LCAzLCB0cnVlLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKworICAgICAgICBwYWludEluZm8uY29udGV4
dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0ZDo6bWluKGNsaXAud2lkdGgoKSwgY2xpcC5oZWlnaHQo
KSkgKiB0aGlja25lc3NSYXRpbyk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJv
a2VDb2xvcihDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAyNDAgLyAyNTUuMGYpLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0pvaW5lZExpbmVz
KGxpbmUsIDMsIHRydWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZsb2F0UG9pbnQgYm90dG9t
Q2VudGVyKGNsaXAueCgpICsgY2xpcC53aWR0aCgpIC8gMi4wZiwgY2xpcC5tYXhZKCkpOworICAg
ICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoU2hhZGVH
cmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZ
KCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZHJhd1JhZGlhbEdyYWRpZW50KGNn
Q29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgYm90dG9tQ2VudGVyLCAw
LCBib3R0b21DZW50ZXIsIHNxcnRmKCh3aWR0aCAqIHdpZHRoKSAvIDQuMGYgKyBoZWlnaHQgKiBo
ZWlnaHQpLCBFeHBvbmVudGlhbEludGVycG9sYXRpb24pOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworaW50IFJlbmRlclRoZW1lSU9TOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCFyZW5kZXJlci0+aXNCb3go
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVu
ZGVyQm94KHJlbmRlcmVyKTsKKworICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IENoZWNrYm94UGFydCB8fCBib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkK
KyAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdodCgpIC0gMjsgLy8g
VGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNoZWNrYm94L3Jh
ZGlvIGluIEFwcEtpdC4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQo
KSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBwS2l0LiBUaGVyZSBtaWdodCBiZSBhIGJldHRl
ciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdoLgorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6
YmFzZWxpbmVQb3NpdGlvbihib3gpOworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjppc0NvbnRy
b2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3Jk
ZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3QKK3sKKyAgICAvLyBCdXR0b25zIGFuZCBNZW51bGlzdEJ1dHRvbnMgYXJlIHN0
eWxlZCBpZiB0aGV5IGNvbnRhaW4gYSBiYWNrZ3JvdW5kIGltYWdlLgorICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gIXN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgfHwgc3R5bGUtPmJh
Y2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKTsKKworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBh
cnQpCisgICAgICAgIHJldHVybiAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3Jv
dW5kOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJv
cmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6
bWF4KHN0eWxlLT5mb250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOworICAgIHN0eWxlLT5zZXRXaWR0
aChsZW5ndGgpOworICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKKyAgICBzdHlsZS0+c2V0
Qm9yZGVyUmFkaXVzKEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUo
KSAvIDIuMGYpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRp
b25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRC
b3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworCisgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICBpZiAoaXNDaGVja2VkKGJveCkpIHsKKyAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250
ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbmNhdmVHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwg
RmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsK
KworICAgICAgICAvLyBUaGUgaW5uZXIgY2lyY2xlIGlzIDYgLyAxNCB0aGUgc2l6ZSBvZiB0aGUg
c3Vycm91bmRpbmcgY2lyY2xlLCAKKyAgICAgICAgLy8gbGVhdmluZyA4IC8gMTQgYXJvdW5kIGl0
LiAoOCAvIDE0KSAvIDIgPSAyIC8gNy4KKworICAgICAgICBzdGF0aWMgZmxvYXQgSW5uZXJJbnZl
cnNlUmF0aW8gPSAyIC8gNy4wOworCisgICAgICAgIGNsaXAuaW5mbGF0ZVgoLWNsaXAud2lkdGgo
KSAqIElubmVySW52ZXJzZVJhdGlvKTsKKyAgICAgICAgY2xpcC5pbmZsYXRlWSgtY2xpcC5oZWln
aHQoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKKworICAgICAgICBwYWludEluZm8uY29udGV4dC0+
ZHJhd1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICBGbG9hdFNp
emUgcmFkaXVzKGNsaXAud2lkdGgoKSAvIDIuMGYsIGNsaXAuaGVpZ2h0KCkgLyAyLjBmKTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXBSb3VuZGVkUmVjdChjbGlwLCByYWRpdXMsIHJh
ZGl1cywgcmFkaXVzLCByYWRpdXMpOworICAgIH0KKyAgICBGbG9hdFBvaW50IGJvdHRvbUNlbnRl
cihjbGlwLngoKSArIGNsaXAud2lkdGgoKSAvIDIuMCwgY2xpcC5tYXhZKCkpOworICAgIGRyYXdB
eGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGFkZUdyYWRpZW50KSwg
Y2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFkoKSksIExpbmVh
ckludGVycG9sYXRpb24pOworICAgIGRyYXdSYWRpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRp
ZW50V2l0aE5hbWUoU2hpbmVHcmFkaWVudCksIGJvdHRvbUNlbnRlciwgMCwgYm90dG9tQ2VudGVy
LCBzdGQ6Om1heChjbGlwLndpZHRoKCksIGNsaXAuaGVpZ2h0KCkpLCBFeHBvbmVudGlhbEludGVy
cG9sYXRpb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIEludFBvaW50IHBvaW50KHJlY3QueCgpICsgc3R5
bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5j
b250ZXh0KTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJlY3Qoc3R5bGUu
Z2V0Um91bmRlZEJvcmRlckZvcihyKSk7CisKKyAgICAvLyBUaGlzIGdyYWRpZW50IGdldHMgZHJh
d24gYmxhY2sgd2hlbiBwcmludGluZy4KKyAgICAvLyBEbyBub3QgZHJhdyB0aGUgZ3JhZGllbnQg
aWYgdGhlcmUgaXMgbm8gdmlzaWJsZSB0b3AgYm9yZGVyLgorICAgIGJvb2wgdG9wQm9yZGVySXNJ
bnZpc2libGUgPSAhc3R5bGUuaGFzQm9yZGVyKCkgfHwgIXN0eWxlLmJvcmRlclRvcFdpZHRoKCkg
fHwgc3R5bGUuYm9yZGVyVG9wSXNUcmFuc3BhcmVudCgpOworICAgIGlmICghYm94LT52aWV3KCku
cHJpbnRpbmcoKSAmJiAhdG9wQm9yZGVySXNJbnZpc2libGUpCisgICAgICAgIGRyYXdBeGlhbEdy
YWRpZW50KHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZ3JhZGllbnRXaXRo
TmFtZShJbnNldEdyYWRpZW50KSwgcG9pbnQsIEZsb2F0UG9pbnQoQ0dQb2ludE1ha2UocG9pbnQu
eCgpLCBwb2ludC55KCkgKyAzLjBmKSksIExpbmVhckludGVycG9sYXRpb24pOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0QXJlYURlY29yYXRp
b25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRp
b25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOworfQorCitjb25zdCBpbnQgTWVudUxpc3RN
aW5IZWlnaHQgPSAxNTsKKworY29uc3QgZmxvYXQgTWVudUxpc3RCYXNlSGVpZ2h0ID0gMjA7Citj
b25zdCBmbG9hdCBNZW51TGlzdEJhc2VGb250U2l6ZSA9IDExOworCitjb25zdCBmbG9hdCBNZW51
TGlzdEFycm93V2lkdGggPSA3OworY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hlaWdodCA9IDY7
Citjb25zdCBmbG9hdCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5OworCitpbnQgUmVu
ZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoreworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9u
UGFydCkKKyAgICAgICAgcmV0dXJuIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsgc3R5bGUt
PmJvcmRlclRvcFdpZHRoKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVJ
T1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyQm94
KiBib3gpCit7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0IHx8
IHN0eWxlLmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIgcmFkaXVz
IGZvciB0aGUgYXBwZWFyYW5jZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVtLzc2NzU0
OTM+CisgICAgTGVuZ3RoIHJhZGl1c1dpZHRoKHN0YXRpY19jYXN0PGludD4oc3RkOjptaW4oYm94
LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKSAvIDIuMCksIEZpeGVkKTsKKyAgICBMZW5ndGggcmFk
aXVzSGVpZ2h0KHN0YXRpY19jYXN0PGludD4oYm94LT5oZWlnaHQoKSAvIDIuMCksIEZpeGVkKTsK
KyAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVz
SGVpZ2h0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5Q29tbW9uQnV0dG9uUGFkZGluZ1RvU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIERvY3VtZW50
JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBlbVNpemUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuNSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19FTVMpOworICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5n
dGg8aW50PihzdHlsZSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgZG9jdW1lbnQuZnJhbWUoKS0+
cGFnZVpvb21GYWN0b3IoKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAs
IHBpeGVscywgMCwgcGl4ZWxzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdFNlbGVjdExpc3RC
dXR0b25TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
Ly8gRW5mb3JjZSAicGFkZGluZzogMCAwLjVlbSIuCisgICAgYXBwbHlDb21tb25CdXR0b25QYWRk
aW5nVG9TdHlsZShzdHlsZSwgZWxlbWVudCk7CisKKyAgICAvLyBFbmZvcmNlICJsaW5lLWhlaWdo
dDogbm9ybWFsIi4KKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgoLTEwMC4wLCBQZXJj
ZW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSwgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KQoreworICAg
IC8vIEFsd2F5cyBFbmZvcmNlICJwYWRkaW5nOiAwIDAuNWVtIi4KKyAgICBhcHBseUNvbW1vbkJ1
dHRvblBhZGRpbmdUb1N0eWxlKHN0eWxlLCBpbnB1dEVsZW1lbnQpOworCisgICAgLy8gRG9uJ3Qg
YWRqdXN0IHRoZSBzdHlsZSBpZiB0aGUgd2lkdGggaXMgc3BlY2lmaWVkLgorICAgIGlmIChzdHls
ZS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUtPndpZHRoKCkudmFsdWUoKSA+IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGFkanVzdCBmb3IgdW5zdXBwb3J0ZWQgZGF0ZSBp
bnB1dCB0eXBlcy4KKyAgICBEYXRlQ29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSA9IGlucHV0RWxl
bWVudC0+ZGF0ZVR5cGUoKTsKKyAgICBpZiAoZGF0ZVR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6Oklu
dmFsaWQgfHwgZGF0ZVR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OldlZWspCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEVuZm9yY2UgdGhlIHdpZHRoIGFuZCBzZXQgdGhlIGJveC1zaXppbmcgdG8g
Y29udGVudC1ib3ggdG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIHBhZGRpbmcuCisgICAgRm9udCBm
b250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmbG9hdCBtYXhpbXVtV2lkdGggPSBpbnB1dEVsZW1l
bnQtPmxvY2FsZSgpLm1heGltdW1XaWR0aEZvckRhdGVUeXBlKGRhdGVUeXBlLCBmb250KTsKKyAg
ICBpZiAobWF4aW11bVdpZHRoID4gMCkgeyAgICAKKyAgICAgICAgaW50IHdpZHRoID0gc3RhdGlj
X2Nhc3Q8aW50PihtYXhpbXVtV2lkdGggKyBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCk7Cisg
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0
eWxlLT5zZXRCb3hTaXppbmcoQ09OVEVOVF9CT1gpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJU
aGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIC8vIFNldCB0aGUg
bWluLWhlaWdodCB0byBiZSBhdCBsZWFzdCBNZW51TGlzdE1pbkhlaWdodC4KKyAgICBpZiAoc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0
aChzdGQ6Om1heChNZW51TGlzdE1pbkhlaWdodCwgc3RhdGljX2Nhc3Q8aW50PihNZW51TGlzdEJh
c2VIZWlnaHQgLyBNZW51TGlzdEJhc2VGb250U2l6ZSAqIHN0eWxlLT5mb250RGVzY3JpcHRpb24o
KS5jb21wdXRlZFNpemUoKSkpLCBGaXhlZCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUtPnNl
dE1pbkhlaWdodChMZW5ndGgoTWVudUxpc3RNaW5IZWlnaHQsIEZpeGVkKSk7CisKKyAgICAvLyBF
bmZvcmNlIHNvbWUgZGVmYXVsdCBzdHlsZXMgaW4gdGhlIGNhc2UgdGhhdCB0aGlzIGlzIGEgbm9u
LW11bHRpcGxlIDxzZWxlY3Q+IGVsZW1lbnQsCisgICAgLy8gb3IgYSBkYXRlIGlucHV0LiBXZSBk
b24ndCBmb3JjZSB0aGVzZSBpZiB0aGlzIGlzIGp1c3QgYW4gZWxlbWVudCB3aXRoCisgICAgLy8g
Ii13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3QtYnV0dG9uIi4KKyAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykgJiYgIWVsZW1lbnQtPmhhc0F0dHJpYnV0
ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCisgICAgICAgIGFkanVzdFNlbGVjdExpc3RCdXR0
b25TdHlsZShzdHlsZSwgZWxlbWVudCk7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAg
ICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCBpbnB1dEVsZW1lbnQpOwor
ICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29y
YXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxl
KCk7CisgICAgZmxvYXQgYm9yZGVyVG9wV2lkdGggPSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwor
ICAgIEZsb2F0UmVjdCBjbGlwKHJlY3QueCgpICsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJl
Y3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwgcmVjdC53aWR0aCgpIC0gc3R5bGUuYm9y
ZGVyTGVmdFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHJlY3QuaGVpZ2h0KCkg
LSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSk7Cisg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKworICAgIGZsb2F0IGFkanVzdExlZnQgPSAwLjU7CisgICAgZmxvYXQgYWRqdXN0
UmlnaHQgPSAwLjU7CisgICAgZmxvYXQgYWRqdXN0VG9wID0gMC41OworICAgIGZsb2F0IGFkanVz
dEJvdHRvbSA9IDAuNTsKKworICAgIC8vIFBhaW50IGxlZnQtaGFuZCB0aXRsZSBwb3J0aW9uLgor
ICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHRpdGxlQ2xpcChjbGlwLngoKSAtIGFkanVzdExlZnQs
IGNsaXAueSgpIC0gYWRqdXN0VG9wLCBjbGlwLndpZHRoKCkgLSBNZW51TGlzdEJ1dHRvblBhZGRp
bmdSaWdodCArIGFkanVzdExlZnQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBhZGp1c3RC
b3R0b20pOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
cGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91
bmRlZFJlY3QodGl0bGVDbGlwLCAKKyAgICAgICAgICAgIEZsb2F0U2l6ZSh2YWx1ZUZvckxlbmd0
aChzdHlsZS5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKSwgcmVjdC53aWR0aCgpKSAtIHN0
eWxlLmJvcmRlckxlZnRXaWR0aCgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJUb3BMZWZ0
UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0gc3R5bGUuYm9yZGVyVG9wV2lkdGgo
KSksIEZsb2F0U2l6ZSgwLCAwKSwKKyAgICAgICAgICAgIEZsb2F0U2l6ZSh2YWx1ZUZvckxlbmd0
aChzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKSwgcmVjdC53aWR0aCgpKSAt
IHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJCb3R0
b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0gc3R5bGUuYm9yZGVyQm90
dG9tV2lkdGgoKSksIEZsb2F0U2l6ZSgwLCAwKSk7CisKKyAgICAgICAgZHJhd0F4aWFsR3JhZGll
bnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCB0aXRsZUNsaXAu
bG9jYXRpb24oKSwgRmxvYXRQb2ludCh0aXRsZUNsaXAueCgpLCB0aXRsZUNsaXAubWF4WSgpKSwg
TGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4
dCwgZ3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgRmxvYXRQb2ludCh0aXRsZUNsaXAu
eCgpLCB0aXRsZUNsaXAubWF4WSgpKSwgdGl0bGVDbGlwLmxvY2F0aW9uKCksIEV4cG9uZW50aWFs
SW50ZXJwb2xhdGlvbik7CisgICAgfQorCisgICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIGFmdGVy
IHRoZSBpbml0aWFsIHBhZGRpbmcuCisKKyAgICBmbG9hdCBzZXBhcmF0b3IgPSBjbGlwLm1heFgo
KSAtIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0OworCisgICAgYm94LT5kcmF3TGluZUZvckJv
eFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRoLCBjbGlw
LnkoKSwgc2VwYXJhdG9yLCBjbGlwLm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BTdHls
ZSgpLCAwLCAwKTsKKworICAgIEZsb2F0UmVjdCBidXR0b25DbGlwKHNlcGFyYXRvciAtIGFkanVz
dFRvcCwgY2xpcC55KCkgLSBhZGp1c3RUb3AsIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsg
YWRqdXN0VG9wICsgYWRqdXN0UmlnaHQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBhZGp1
c3RCb3R0b20pOworCisgICAgLy8gTm93IHBhaW50IHRoZSBidXR0b24gcG9ydGlvbi4KKyAgICB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZv
LmNvbnRleHQpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJlY3Qo
YnV0dG9uQ2xpcCwgCisgICAgICAgICAgICBGbG9hdFNpemUoMCwgMCksIEZsb2F0U2l6ZSh2YWx1
ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCksIHJlY3Qud2lk
dGgoKSkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlLmJv
cmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0gc3R5bGUuYm9y
ZGVyVG9wV2lkdGgoKSksCisgICAgICAgICAgICBGbG9hdFNpemUoMCwgMCksIEZsb2F0U2l6ZSh2
YWx1ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCksIHJl
Y3Qud2lkdGgoKSkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHZhbHVlRm9yTGVuZ3RoKHN0
eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0g
c3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSkpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5maWxsUmVjdChidXR0b25DbGlwLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCb3JkZXJUb3BDb2xvciksIHN0eWxlLmNvbG9yU3BhY2UoKSk7CisKKyAgICAgICAgZHJh
d0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKGlzRm9jdXNlZChib3gp
ICYmICFpc1JlYWRPbmx5Q29udHJvbChib3gpID8gQ29uY2F2ZUdyYWRpZW50IDogQ29udmV4R3Jh
ZGllbnQpLCBidXR0b25DbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoYnV0dG9uQ2xpcC54KCks
IGJ1dHRvbkNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgfQorCisgICAg
Ly8gUGFpbnQgSW5kaWNhdG9ycy4KKworICAgIGlmIChib3gtPmlzTWVudUxpc3QoKSAmJiB0b0hU
TUxTZWxlY3RFbGVtZW50KGJveC0+bm9kZSgpKS0+bXVsdGlwbGUoKSkgeworICAgICAgICBpbnQg
c2l6ZSA9IDI7CisgICAgICAgIGludCBjb3VudCA9IDM7CisgICAgICAgIGludCBwYWRkaW5nID0g
MzsKKworICAgICAgICBJbnRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54KCkgKyAoYnV0dG9uQ2xp
cC53aWR0aCgpIC0gY291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFkZGluZykgLyAyLjAsIGJ1
dHRvbkNsaXAubWF4WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+
ZHJhd1JhaXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgICAgICAgICBlbGxpcHNlLm1vdmUoc2l6ZSArIHBhZGRpbmcsIDApOworICAgICAgICB9
CisgICAgfSAgZWxzZSB7CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9vcmYoYnV0dG9uQ2xp
cC54KCkgKyBidXR0b25DbGlwLndpZHRoKCkgLyAyLjApIC0gMC41OworICAgICAgICBmbG9hdCBj
ZW50ZXJZID0gZmxvb3JmKGJ1dHRvbkNsaXAueSgpICsgYnV0dG9uQ2xpcC5oZWlnaHQoKSAqIDMu
MCAvIDguMCk7CisKKyAgICAgICAgRmxvYXRQb2ludCBhcnJvd1szXTsKKyAgICAgICAgRmxvYXRQ
b2ludCBzaGFkb3dbM107CisKKyAgICAgICAgYXJyb3dbMF0gPSBGbG9hdFBvaW50KGNlbnRlclgg
LSBNZW51TGlzdEFycm93V2lkdGggLyAyLjAsIGNlbnRlclkpOworICAgICAgICBhcnJvd1sxXSA9
IEZsb2F0UG9pbnQoY2VudGVyWCArIE1lbnVMaXN0QXJyb3dXaWR0aCAvIDIuMCwgY2VudGVyWSk7
CisgICAgICAgIGFycm93WzJdID0gRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZICsgTWVudUxp
c3RBcnJvd0hlaWdodCk7CisKKyAgICAgICAgc2hhZG93WzBdID0gRmxvYXRQb2ludChhcnJvd1sw
XS54KCksIGFycm93WzBdLnkoKSArIDEuMGYpOworICAgICAgICBzaGFkb3dbMV0gPSBGbG9hdFBv
aW50KGFycm93WzFdLngoKSwgYXJyb3dbMV0ueSgpICsgMS4wZik7CisgICAgICAgIHNoYWRvd1sy
XSA9IEZsb2F0UG9pbnQoYXJyb3dbMl0ueCgpLCBhcnJvd1syXS55KCkgKyAxLjBmKTsKKworICAg
ICAgICBmbG9hdCBvcGFjaXR5ID0gaXNSZWFkT25seUNvbnRyb2woYm94KSA/IDAuMiA6IDAuNTsK
KyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAuMGYsIDAu
MGYsIDAuMGYsIG9wYWNpdHkpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5
KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
Q29udmV4UG9seWdvbigzLCBzaGFkb3csIHRydWUpOworCisgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp3aGl0ZSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4
UG9seWdvbigzLCBhcnJvdywgdHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citjb25zdCBDR0Zsb2F0IGtUcmFja1RoaWNrbmVzcyA9IDQuMDsKK2NvbnN0IENHRmxvYXQga1Ry
YWNrUmFkaXVzID0ga1RyYWNrVGhpY2tuZXNzIC8gMi4wOworY29uc3QgaW50IGtEZWZhdWx0U2xp
ZGVyVGh1bWJTaXplID0gMTY7CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJh
Y2tTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIgcmFkaXVzIGZvciB0aGUgYXBwZWFyYW5jZSBv
ZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVtLzc2NzU0OTM+CisgICAgTGVuZ3RoIHJhZGl1
c1dpZHRoKHN0YXRpY19jYXN0PGludD4oa1RyYWNrUmFkaXVzKSwgRml4ZWQpOworICAgIExlbmd0
aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihrVHJhY2tSYWRpdXMpLCBGaXhlZCk7Cisg
ICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCByYWRpdXNI
ZWlnaHQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhSZW5k
ZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgSW50UmVjdCB0cmFja0NsaXAgPSByZWN0OworICAgIFJlbmRlclN0eWxl
JiBzdHlsZSA9IGJveC0+c3R5bGUoKTsKKworICAgIGJvb2wgaXNIb3Jpem9udGFsID0gdHJ1ZTsK
KyAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgU2xpZGVySG9yaXpv
bnRhbFBhcnQ6CisgICAgICAgIGlzSG9yaXpvbnRhbCA9IHRydWU7CisgICAgICAgIC8vIEluc2V0
IHNsaWdodGx5IHNvIHRoZSB0aHVtYiBjb3ZlcnMgdGhlIGVkZ2UuCisgICAgICAgIGlmICh0cmFj
a0NsaXAud2lkdGgoKSA+IDIpIHsKKyAgICAgICAgICAgIHRyYWNrQ2xpcC5zZXRXaWR0aCh0cmFj
a0NsaXAud2lkdGgoKSAtIDIpOworICAgICAgICAgICAgdHJhY2tDbGlwLnNldFgodHJhY2tDbGlw
LngoKSArIDEpOworICAgICAgICB9CisgICAgICAgIHRyYWNrQ2xpcC5zZXRIZWlnaHQoc3RhdGlj
X2Nhc3Q8aW50PihrVHJhY2tUaGlja25lc3MpKTsKKyAgICAgICAgdHJhY2tDbGlwLnNldFkocmVj
dC55KCkgKyByZWN0LmhlaWdodCgpIC8gMiAtIGtUcmFja1RoaWNrbmVzcyAvIDIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKKyAgICAgICAgaXNIb3Jpem9u
dGFsID0gZmFsc2U7CisgICAgICAgIC8vIEluc2V0IHNsaWdodGx5IHNvIHRoZSB0aHVtYiBjb3Zl
cnMgdGhlIGVkZ2UuCisgICAgICAgIGlmICh0cmFja0NsaXAuaGVpZ2h0KCkgPiAyKSB7CisgICAg
ICAgICAgICB0cmFja0NsaXAuc2V0SGVpZ2h0KHRyYWNrQ2xpcC5oZWlnaHQoKSAtIDIpOworICAg
ICAgICAgICAgdHJhY2tDbGlwLnNldFkodHJhY2tDbGlwLnkoKSArIDEpOworICAgICAgICB9Cisg
ICAgICAgIHRyYWNrQ2xpcC5zZXRXaWR0aChrVHJhY2tUaGlja25lc3MpOworICAgICAgICB0cmFj
a0NsaXAuc2V0WChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDIgLSBrVHJhY2tUaGlja25lc3Mg
LyAyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgQVNTRVJUKHRyYWNrQ2xpcC53aWR0aCgpID49IDApOwor
ICAgIEFTU0VSVCh0cmFja0NsaXAuaGVpZ2h0KCkgPj0gMCk7CisgICAgQ0dGbG9hdCBjb3JuZXJX
aWR0aCA9IHRyYWNrQ2xpcC53aWR0aCgpIDwga1RyYWNrVGhpY2tuZXNzID8gdHJhY2tDbGlwLndp
ZHRoKCkgLyAyLjBmIDoga1RyYWNrUmFkaXVzOworICAgIENHRmxvYXQgY29ybmVySGVpZ2h0ID0g
dHJhY2tDbGlwLmhlaWdodCgpIDwga1RyYWNrVGhpY2tuZXNzID8gdHJhY2tDbGlwLmhlaWdodCgp
IC8gMi4wZiA6IGtUcmFja1JhZGl1czsKKworICAgIGJvb2wgcmVhZG9ubHkgPSBpc1JlYWRPbmx5
Q29udHJvbChib3gpOworCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgcGFpbnRT
bGlkZXJUaWNrcyhib3gsIHBhaW50SW5mbywgdHJhY2tDbGlwKTsKKyNlbmRpZgorCisgICAgLy8g
RHJhdyB0aGUgdHJhY2sgZ3JhZGllbnQuCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICBJbnRT
aXplIGNvcm5lclNpemUoY29ybmVyV2lkdGgsIGNvcm5lckhlaWdodCk7CisgICAgICAgIFJvdW5k
ZWRSZWN0IGlubmVyQm9yZGVyKHRyYWNrQ2xpcCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29y
bmVyU2l6ZSwgY29ybmVyU2l6ZSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91
bmRlZFJlY3QoaW5uZXJCb3JkZXIpOworCisgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIElPU0dyYWRp
ZW50UmVmIGdyYWRpZW50ID0gcmVhZG9ubHkgPyBncmFkaWVudFdpdGhOYW1lKFJlYWRvbmx5U2xp
ZGVyVHJhY2tHcmFkaWVudCkgOiBncmFkaWVudFdpdGhOYW1lKFNsaWRlclRyYWNrR3JhZGllbnQp
OworICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgZHJhd0F4aWFsR3JhZGll
bnQoY2dDb250ZXh0LCBncmFkaWVudCwgdHJhY2tDbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQo
dHJhY2tDbGlwLngoKSwgdHJhY2tDbGlwLm1heFkoKSksIExpbmVhckludGVycG9sYXRpb24pOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdy
YWRpZW50LCB0cmFja0NsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludCh0cmFja0NsaXAubWF4WCgp
LCB0cmFja0NsaXAueSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgfQorCisgICAgLy8g
RHJhdyB0aGUgdHJhY2sgYm9yZGVyLgorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICAgICAgaWYgKHJlYWRvbmx5KQorICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKENvbG9yKDE3OCwgMTc4LCAxNzgpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKENvbG9yKDc2LCA3NiwgNzYpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICBS
ZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcm91bmRlZFJlY3RQYXRoID0gYWRvcHRDRihDR1Bh
dGhDcmVhdGVNdXRhYmxlKCkpOworICAgICAgICBDR1BhdGhBZGRSb3VuZGVkUmVjdChyb3VuZGVk
UmVjdFBhdGguZ2V0KCksIDAsIHRyYWNrQ2xpcCwgY29ybmVyV2lkdGgsIGNvcm5lckhlaWdodCk7
CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY2dDb250ZXh0LCByb3VuZGVkUmVjdFBhdGguZ2V0
KCkpOworICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY2dDb250ZXh0LCAxKTsKKyAgICAg
ICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjZ0NvbnRleHQpOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlLT5hcHBl
YXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5j
ZSgpICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBFbmZvcmNlICJib3JkZXItcmFkaXVzOiA1MCUiLgorICAgIExlbmd0aCBsZW5ndGgoNTAuMGYs
IFBlcmNlbnQpOworICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShsZW5ndGgs
IGxlbmd0aCkpOworCisgICAgLy8gRW5mb3JjZSBhIDE2eDE2IHNpemUgaWYgbm8gc2l6ZSBpcyBw
cm92aWRlZC4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0
aChrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSwgRml4ZWQpOworICAgICAgICBzdHlsZS0+c2V0V2lk
dGgobGVuZ3RoKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOworICAgIH0KK30K
KworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKFJlbmRl
ck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50
SW5mby5jb250ZXh0KTsKKyAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlw
KGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworCisgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBGbG9hdFBv
aW50IGJvdHRvbUNlbnRlcihjbGlwLngoKSArIGNsaXAud2lkdGgoKSAvIDIuMGYsIGNsaXAubWF4
WSgpKTsKKyAgICBpZiAoaXNQcmVzc2VkKGJveCkpCisgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50
KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTbGlkZXJUaHVtYk9wYXF1ZVByZXNzZWRHcmFk
aWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkp
LCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZHJhd0F4aWFsR3Jh
ZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCBjbGlwLmxv
Y2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJw
b2xhdGlvbik7CisgICAgICAgIGRyYXdSYWRpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50
V2l0aE5hbWUoU2hpbmVHcmFkaWVudCksIGJvdHRvbUNlbnRlciwgMC4wZiwgYm90dG9tQ2VudGVy
LCBzdGQ6Om1heChjbGlwLndpZHRoKCksIGNsaXAuaGVpZ2h0KCkpLCBFeHBvbmVudGlhbEludGVy
cG9sYXRpb24pOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShQ
Uk9HUkVTU19FTEVNRU5UKQorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJ
bnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1
cm4gMDsKK30KKworZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIXJlbmRlcmVyLT5pc1Byb2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgY29uc3QgaW50IHByb2dyZXNzQmFySGVpZ2h0ID0gOTsKKyAgICBjb25zdCBmbG9hdCB2
ZXJ0aWNhbE9mZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NCYXJIZWlnaHQpIC8gMi4w
OworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8u
Y29udGV4dCk7CisgICAgaWYgKHJlY3Qud2lkdGgoKSA8IDEwIHx8IHJlY3QuaGVpZ2h0KCkgPCA5
KSB7CisgICAgICAgIC8vIFRoZSByZWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUgc3RhbmRhcmQgcHJv
Z3Jlc3MgYmFyLiBXZSBjbGlwIHRvIHRoZSBlbGVtZW50J3MgcmVjdCB0byBhdm9pZAorICAgICAg
ICAvLyBsZWFraW5nIHBpeGVscyBvdXRzaWRlIHRoZSByZXBhaW50IHJlY3QuCisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5jbGlwKHJlY3QpOworICAgIH0KKworICAgIC8vIDEpIERyYXcgdGhl
IHByb2dyZXNzIGJhciB0cmFjay4KKyAgICAvLyAxLjEpIERyYXcgdGhlIHdoaXRlIGJhY2tncm91
bmQgd2l0aCBncmV5IGdyYWRpZW50IGJvcmRlci4KKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQgPSBwYWludEluZm8uY29udGV4dDsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mo
MC42OCk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworCisgICAg
Y29uc3QgZmxvYXQgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiA9IHJlY3QueSgpICsgdmVydGlj
YWxPZmZzZXQ7CisgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50
OjpjcmVhdGUoRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiks
IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVz
c0JhckhlaWdodCAtIDEpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwg
Q29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC40NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMC41NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdy
YWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CisgICAg
Y29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoc3Ryb2tlR3JhZGllbnQucmVsZWFzZSgpKTsKKwor
ICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yU3BhY2Uo
KTsKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUsIDI1NSksIGNvbG9y
U3BhY2UpOworCisgICAgUGF0aCB0cmFja1BhdGg7CisgICAgRmxvYXRSZWN0IHRyYWNrUmVjdChy
ZWN0LngoKSArIDAuMjUsIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1LCByZWN0Lndp
ZHRoKCkgLSAwLjUsIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41KTsKKyAgICBGbG9hdFNpemUgcm91
bmRlZENvcm5lclJhZGl1cyg1LCA0KTsKKyAgICB0cmFja1BhdGguYWRkUm91bmRlZFJlY3QodHJh
Y2tSZWN0LCByb3VuZGVkQ29ybmVyUmFkaXVzKTsKKyAgICBjb250ZXh0LT5kcmF3UGF0aCh0cmFj
a1BhdGgpOworCisgICAgLy8gMS4yKSBEcmF3IHRvcCBncmFkaWVudCBvbiB0aGUgdXBwZXIgaGFs
Zi4gSXQgaXMgc3VwcG9zZWQgdG8gb3ZlcmxheSB0aGUgZmlsbCBmcm9tIHRoZSBiYWNrZ3JvdW5k
IGFuZCBkYXJrZXIgdGhlIHN0cm9rZWQgcGF0aC4KKyAgICBGbG9hdFJlY3QgYm9yZGVyKHJlY3Qu
eCgpLCByZWN0LnkoKSArIHZlcnRpY2FsT2Zmc2V0LCByZWN0LndpZHRoKCksIHByb2dyZXNzQmFy
SGVpZ2h0KTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KGJvcmRlciwg
cm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJh
ZGl1cywgcm91bmRlZENvcm5lclJhZGl1cyk7CisKKyAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVp
Z2h0ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKKyAgICBSZWZQdHI8R3JhZGllbnQ+IHVwcGVy
R3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2Fs
UmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJl
bmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkpOworICAgIHVwcGVy
R3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDEzMywgMTMzLCAxMzMsIDE4OCkpOwor
ICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDE4LCAxOCwgMTgsIDUx
KSk7CisgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KHVwcGVyR3JhZGllbnQucmVsZWFzZSgp
KTsKKworICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxS
ZW5kZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CisK
KyAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJl
bmRlcmVyKTsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgeworICAg
ICAgICAvLyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAgIGRvdWJsZSBwb3NpdGlv
biA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKKyAgICAg
ICAgZG91YmxlIGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0LndpZHRoKCk7CisgICAgICAgIFJl
ZlB0cjxHcmFkaWVudD4gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAx
KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigxOTUsIDIx
NywgMjQ3KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgQ29sb3Io
MTE4LCAxNjQsIDIyOCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDks
IENvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjUxLCBDb2xvcigzNiwgMTE0LCAyMTApKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjU1LCBDb2xvcigzNiwgMTE0LCAyMTApKTsKKyAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDU3LCAxNDIsIDI0NCkpOworICAgICAgICBjb250ZXh0
LT5zZXRGaWxsR3JhZGllbnQoYmFyR3JhZGllbnQucmVsZWFzZSgpKTsKKworICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBv
aW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0
LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkp
OworICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoOTUs
IDEwNywgMTgzKSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41
LCBDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOworICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMzgsIDEwNCwgMTY2KSk7CisgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUdyYWRpZW50KGJhclN0cm9rZUdyYWRpZW50LnJlbGVhc2UoKSk7CisKKyAgICAg
ICAgUGF0aCBiYXJQYXRoOworICAgICAgICBpbnQgbGVmdCA9IHJlY3QueCgpOworICAgICAgICBp
ZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAg
ICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAtIGJhcldpZHRoOworICAgICAgICBGbG9hdFJl
Y3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjUs
IHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjApLCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNSk7
CisgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFyUmVjdCwgcm91bmRlZENvcm5lclJh
ZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmRyYXdQYXRoKGJhclBhdGgpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKKwor
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorSW50U2l6ZSBSZW5kZXJUaGVtZUlPUzo6c2xp
ZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMTIy
NzE3OTE+IE1FUkdFQk9UOiBDb3JyZWN0IHZhbHVlcyBmb3Igc2xpZGVyIHRpY2sgb2YgPGlucHV0
IHR5cGU9InJhbmdlIj4gZWxlbWVudHMgKHJlcXVpcmVzIEVOQUJMRV9EQVRBTElTVF9FTEVNRU5U
KQorICAgIHJldHVybiBJbnRTaXplKDEsIDMpOworfQorCitpbnQgUmVuZGVyVGhlbWVJT1M6OnNs
aWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vMTIyNzE3OTE+IE1FUkdFQk9UOiBDb3JyZWN0IHZhbHVlcyBmb3Igc2xp
ZGVyIHRpY2sgb2YgPGlucHV0IHR5cGU9InJhbmdlIj4gZWxlbWVudHMgKHJlcXVpcmVzIEVOQUJM
RV9EQVRBTElTVF9FTEVNRU5UKQorICAgIHJldHVybiAtOTsKK30KKyNlbmRpZgorCit2b2lkIFJl
bmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAg
UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVt
ZW50KTsKKworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFz
dHlsZS0+aGFzQm9yZGVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJveCogYm94
ID0gZWxlbWVudC0+cmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsK
KworICAgIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKCpzdHlsZSwgYm94KTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCog
Ym94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVj
dCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0Cit7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHls
ZSwgZWxlbWVudCk7CisKKyAgICAvLyBTZXQgcGFkZGluZzogMCAxLjBlbTsgb24gYnV0dG9ucy4K
KyAgICAvLyBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludCBvbmx5IG5lZWRzIHRo
ZSBlbGVtZW50J3Mgc3R5bGUgdG8gY2FsY3VsYXRlIGVtIGxlbmd0aHMuCisgICAgLy8gU2luY2Ug
dGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGluIGEgZG9jdW1lbnQsIGp1c3QgcGFzcyBudWxscHRy
IGZvciB0aGUgcm9vdCBlbGVtZW50IHN0eWxlLgorICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gZW1TaXplID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfRU1TKTsKKyAgICBpbnQgcGl4ZWxzID0gZW1TaXplLT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3R5bGUsIG51bGxwdHIpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm94KExlbmd0aEJveCgw
LCBwaXhlbHMsIDAsIHBpeGVscykpOworCisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IGVsZW1lbnQtPnJlbmRlckJveCgpOworICAgIGlm
ICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygq
c3R5bGUsIGJveCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9u
cyhib3gsIHBhaW50SW5mbywgcmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
UHVzaEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBGbG9hdFJlY3Qg
Y2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qp
OworCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoYm94LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJrKCkpCisgICAgICAgIGRyYXdBeGlh
bEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb252ZXhHcmFkaWVudCksIGNs
aXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJ
bnRlcnBvbGF0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dD
b250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCks
IEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7
CisgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShT
aGluZUdyYWRpZW50KSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBjbGlwLmxv
Y2F0aW9uKCksIEV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJv
dGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJt
aW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCisgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihDb250cm9sQmFzZUhlaWdodCAvIENvbnRyb2xC
YXNlRm9udFNpemUgKiBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBG
aXhlZCkpOworfQorCitjb25zdCBpbnQga1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRoID0gMTsK
K2NvbnN0IGludCBrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzID0gMTsKK2NvbnN0IGludCBr
VmlzaWJsZUJhY2tncm91bmRJbWFnZVdpZHRoID0gMTsKK2NvbnN0IGludCBrTXVsdGlwbGVUaHVt
Ym5haWxTaHJpbmtTaXplID0gMjsKKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRGaWxlVXBs
b2FkSWNvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCogYnV0dG9uUmVu
ZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBJ
Y29uKiBpY29uLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgZmlsZVVwbG9hZERlY29yYXRpb25zKQor
eworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplKGtUaHVtYm5haWxCb3JkZXJDb3JuZXJS
YWRpdXMsIGtUaHVtYm5haWxCb3JkZXJDb3JuZXJSYWRpdXMpOworICAgIENvbG9yIHBpY3R1cmVG
cmFtZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIgPyBidXR0b25SZW5kZXJlci0+c3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcikgOiBDb2xvcig3Ni4w
ZiwgNzYuMGYsIDc2LjBmKTsKKworICAgIEludFJlY3QgdGh1bWJuYWlsUGljdHVyZUZyYW1lUmVj
dCA9IHJlY3Q7CisgICAgSW50UmVjdCB0aHVtYm5haWxSZWN0ID0gcmVjdDsKKyAgICB0aHVtYm5h
aWxSZWN0LmNvbnRyYWN0KDIgKiBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGgsIDIgKiBrVGh1
bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGgpOworICAgIHRodW1ibmFpbFJlY3QubW92ZShrVGh1bWJu
YWlsQm9yZGVyU3Ryb2tlV2lkdGgsIGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aCk7CisKKyAg
ICBpZiAoZmlsZVVwbG9hZERlY29yYXRpb25zID09IE11bHRpcGxlRmlsZXMpIHsKKyAgICAgICAg
Ly8gU21hbGxlciB0aHVtYm5haWxzIGZvciBtdWx0aXBsZSBzZWxlY3Rpb24gYXBwZWFyYW5jZS4K
KyAgICAgICAgdGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdC5jb250cmFjdChrTXVsdGlwbGVUaHVt
Ym5haWxTaHJpbmtTaXplLCBrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXplKTsKKyAgICAgICAg
dGh1bWJuYWlsUmVjdC5jb250cmFjdChrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXplLCBrTXVs
dGlwbGVUaHVtYm5haWxTaHJpbmtTaXplKTsKKworICAgICAgICAvLyBCYWNrZ3JvdW5kIHBpY3R1
cmUgZnJhbWUgYW5kIHNpbXBsZSBiYWNrZ3JvdW5kIGljb24gd2l0aCBhIGdyYWRpZW50IG1hdGNo
aW5nIHRoZSBidXR0b24uCisgICAgICAgIENvbG9yIGJhY2tncm91bmRJbWFnZUNvbG9yID0gYnV0
dG9uUmVuZGVyZXIgPyBDb2xvcihidXR0b25SZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpKSA6IENvbG9yKDIwNi4w
ZiwgMjA2LjBmLCAyMDYuMGYpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5k
ZWRSZWN0KHRodW1ibmFpbFBpY3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUs
IGNvcm5lclNpemUsIGNvcm5lclNpemUsIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHRodW1ibmFpbFJl
Y3QsIGJhY2tncm91bmRJbWFnZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAg
eworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyMigqcGFp
bnRJbmZvLmNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5jbGlwKHRodW1ibmFpbFJlY3QpOworICAgICAgICAgICAgaWYgKGJhY2tncm91
bmRJbWFnZUNvbG9yLmlzRGFyaygpKQorICAgICAgICAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50
KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb252ZXhHcmFkaWVudCksIHRodW1ibmFpbFJl
Y3QubG9jYXRpb24oKSwgRmxvYXRQb2ludCh0aHVtYm5haWxSZWN0LngoKSwgdGh1bWJuYWlsUmVj
dC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFt
ZShTaGFkZUdyYWRpZW50KSwgdGh1bWJuYWlsUmVjdC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KHRo
dW1ibmFpbFJlY3QueCgpLCB0aHVtYm5haWxSZWN0Lm1heFkoKSksIExpbmVhckludGVycG9sYXRp
b24pOworICAgICAgICAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGll
bnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgRmxvYXRQb2ludCh0aHVtYm5haWxSZWN0LngoKSwg
dGh1bWJuYWlsUmVjdC5tYXhZKCkpLCB0aHVtYm5haWxSZWN0LmxvY2F0aW9uKCksIEV4cG9uZW50
aWFsSW50ZXJwb2xhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBNb3ZlIHRoZSByZWN0cyBmb3IgdGhlIEZvcmVncm91bmQgcGljdHVyZSBmcmFtZSBhbmQgaWNv
bi4KKyAgICAgICAgaW50IGluc2V0ID0ga1Zpc2libGVCYWNrZ3JvdW5kSW1hZ2VXaWR0aCArIGtU
aHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aDsKKyAgICAgICAgdGh1bWJuYWlsUGljdHVyZUZyYW1l
UmVjdC5tb3ZlKGluc2V0LCBpbnNldCk7CisgICAgICAgIHRodW1ibmFpbFJlY3QubW92ZShpbnNl
dCwgaW5zZXQpOworICAgIH0KKworICAgIC8vIEZvcmVncm91bmQgcGljdHVyZSBmcmFtZSBhbmQg
aWNvbi4KKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KHRodW1ibmFpbFBp
Y3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5l
clNpemUsIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBpY29u
LT5wYWludChwYWludEluZm8uY29udGV4dCwgdGh1bWJuYWlsUmVjdCk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisgICAgCitDb2xvciBSZW5kZXJUaGVtZUlPUzo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcjo6dHJhbnNw
YXJlbnQ7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lSU9TOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFy
ZW50OworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVu
Rm9jdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVJT1M6OnNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEZvbnRXZWlnaHQgZnJvbUNURm9udFdlaWdo
dChmbG9hdCBmb250V2VpZ2h0KQoreworICAgIGlmIChmb250V2VpZ2h0IDw9IC0wLjgpCisgICAg
ICAgIHJldHVybiBGb250V2VpZ2h0MTAwOworICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gLTAu
NCkKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQyMDA7CisgICAgZWxzZSBpZiAoZm9udFdlaWdo
dCA8PSAtMC4yKQorICAgICAgICByZXR1cm4gRm9udFdlaWdodDMwMDsKKyAgICBlbHNlIGlmIChm
b250V2VpZ2h0IDw9IDAuMCkKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7CisgICAgZWxz
ZSBpZiAoZm9udFdlaWdodCA8PSAwLjIpCisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NTAwOwor
ICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gMC4zKQorICAgICAgICByZXR1cm4gRm9udFdlaWdo
dDYwMDsKKyAgICBlbHNlIGlmIChmb250V2VpZ2h0IDw9IDAuNCkKKyAgICAgICAgcmV0dXJuIEZv
bnRXZWlnaHQ3MDA7CisgICAgZWxzZSBpZiAoZm9udFdlaWdodCA8PSAwLjYpCisgICAgICAgIHJl
dHVybiBGb250V2VpZ2h0ODAwOworICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gMC44KQorICAg
ICAgICByZXR1cm4gRm9udFdlaWdodDkwMDsKKworICAgIHJldHVybiBGb250V2VpZ2h0Tm9ybWFs
OworfQorCit2b2lkIFJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQgdmFsdWVJ
RCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3lzdGVtRm9udDsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBoZWFkbGluZUZvbnQ7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gYm9keUZvbnQ7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3ViaGVhZGxpbmVGb250OworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGZvb3Rub3RlRm9udDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uMUZvbnQ7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gY2FwdGlvbjJGb250OworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0SGVhZGxpbmVGb250Owor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0Qm9keUZvbnQ7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRTdWJoZWFk
bGluZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hv
cnRGb290bm90ZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlv
bj4gc2hvcnRDYXB0aW9uMUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNj
cmlwdGlvbj4gdGFsbEJvZHlGb250OworCisgICAgc3RhdGljIENGU3RyaW5nUmVmIHVzZXJUZXh0
U2l6ZSA9IGNvbnRlbnRTaXplQ2F0ZWdvcnkoKTsKKworICAgIGlmICh1c2VyVGV4dFNpemUgIT0g
Y29udGVudFNpemVDYXRlZ29yeSgpKSB7CisgICAgICAgIHVzZXJUZXh0U2l6ZSA9IGNvbnRlbnRT
aXplQ2F0ZWdvcnkoKTsKKworICAgICAgICBoZWFkbGluZUZvbnQuc2V0SXNBYnNvbHV0ZVNpemUo
ZmFsc2UpOworICAgICAgICBib2R5Rm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAg
ICAgIHN1YmhlYWRsaW5lRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIGZv
b3Rub3RlRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIGNhcHRpb24xRm9u
dC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIGNhcHRpb24yRm9udC5zZXRJc0Fi
c29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIHNob3J0SGVhZGxpbmVGb250LnNldElzQWJzb2x1
dGVTaXplKGZhbHNlKTsKKyAgICAgICAgc2hvcnRCb2R5Rm9udC5zZXRJc0Fic29sdXRlU2l6ZShm
YWxzZSk7CisgICAgICAgIHNob3J0U3ViaGVhZGxpbmVGb250LnNldElzQWJzb2x1dGVTaXplKGZh
bHNlKTsKKyAgICAgICAgc2hvcnRGb290bm90ZUZvbnQuc2V0SXNBYnNvbHV0ZVNpemUoZmFsc2Up
OworICAgICAgICBzaG9ydENhcHRpb24xRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7Cisg
ICAgICAgIHRhbGxCb2R5Rm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgfQorCisg
ICAgRm9udERlc2NyaXB0aW9uKiBjYWNoZWREZXNjOworICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBmb250RGVzY3JpcHRvcjsKKyAgICBDRlN0cmluZ1JlZiB0ZXh0U3R5bGU7Cisg
ICAgc3dpdGNoICh2YWx1ZUlEKSB7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtSGVhZGxp
bmU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmaGVhZGxpbmVGb250OworICAgICAgICB0ZXh0U3R5
bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVIZWFkbGluZTsKKyAgICAgICAgaWYgKCFoZWFkbGluZUZv
bnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVzZXJUZXh0
U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1C
b2R5OgorICAgICAgICBjYWNoZWREZXNjID0gJmJvZHlGb250OworICAgICAgICB0ZXh0U3R5bGUg
PSBrQ1RVSUZvbnRUZXh0U3R5bGVCb2R5OworICAgICAgICBpZiAoIWJvZHlGb250LmlzQWJzb2x1
dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtU3ViaGVhZGxpbmU6
CisgICAgICAgIGNhY2hlZERlc2MgPSAmc3ViaGVhZGxpbmVGb250OworICAgICAgICB0ZXh0U3R5
bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVTdWJoZWFkOworICAgICAgICBpZiAoIXN1YmhlYWRsaW5l
Rm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0b3IgPSBhZG9w
dENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHRleHRTdHlsZSwgdXNlclRl
eHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBcHBsZVN5c3Rl
bUZvb3Rub3RlOgorICAgICAgICBjYWNoZWREZXNjID0gJmZvb3Rub3RlRm9udDsKKyAgICAgICAg
dGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlRm9vdG5vdGU7CisgICAgICAgIGlmICghZm9v
dG5vdGVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0eWxlLCB1
c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxl
U3lzdGVtQ2FwdGlvbjE6CisgICAgICAgIGNhY2hlZERlc2MgPSAmY2FwdGlvbjFGb250OworICAg
ICAgICB0ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVDYXB0aW9uMTsKKyAgICAgICAgaWYg
KCFjYXB0aW9uMUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlw
dG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5
bGUsIHVzZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVl
QXBwbGVTeXN0ZW1DYXB0aW9uMjoKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZjYXB0aW9uMkZvbnQ7
CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZUNhcHRpb24yOworICAgICAg
ICBpZiAoIWNhcHRpb24yRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERl
c2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHRl
eHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworCisgICAgLy8gU2hv
cnQgdmVyc2lvbi4KKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1TaG9ydEhlYWRsaW5lOgor
ICAgICAgICBjYWNoZWREZXNjID0gJnNob3J0SGVhZGxpbmVGb250OworICAgICAgICB0ZXh0U3R5
bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVTaG9ydEhlYWRsaW5lOworICAgICAgICBpZiAoIXNob3J0
SGVhZGxpbmVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRv
ciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0eWxl
LCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFw
cGxlU3lzdGVtU2hvcnRCb2R5OgorICAgICAgICBjYWNoZWREZXNjID0gJnNob3J0Qm9keUZvbnQ7
CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZVNob3J0Qm9keTsKKyAgICAg
ICAgaWYgKCFzaG9ydEJvZHlGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUo
dGV4dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NWYWx1ZUFwcGxlU3lzdGVtU2hvcnRTdWJoZWFkbGluZToKKyAgICAgICAgY2FjaGVkRGVzYyA9
ICZzaG9ydFN1YmhlYWRsaW5lRm9udDsKKyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4
dFN0eWxlU2hvcnRTdWJoZWFkOworICAgICAgICBpZiAoIXNob3J0U3ViaGVhZGxpbmVGb250Lmlz
QWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUs
IDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtU2hvcnRG
b290bm90ZToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZzaG9ydEZvb3Rub3RlRm9udDsKKyAgICAg
ICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlU2hvcnRGb290bm90ZTsKKyAgICAgICAg
aWYgKCFzaG9ydEZvb3Rub3RlRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9u
dERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxl
KHRleHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q1NTVmFsdWVBcHBsZVN5c3RlbVNob3J0Q2FwdGlvbjE6CisgICAgICAgIGNhY2hlZERlc2MgPSAm
c2hvcnRDYXB0aW9uMUZvbnQ7CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHls
ZVNob3J0Q2FwdGlvbjE7CisgICAgICAgIGlmICghc2hvcnRDYXB0aW9uMUZvbnQuaXNBYnNvbHV0
ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNj
cmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVzZXJUZXh0U2l6ZSwgMCkpOwor
ICAgICAgICBicmVhazsKKworICAgIC8vIFRhbGwgdmVyc2lvbi4KKyAgICBjYXNlIENTU1ZhbHVl
QXBwbGVTeXN0ZW1UYWxsQm9keToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZ0YWxsQm9keUZvbnQ7
CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZVRhbGxCb2R5OworICAgICAg
ICBpZiAoIXRhbGxCb2R5Rm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERl
c2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHRl
eHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgdGV4dFN0eWxlID0ga0NURm9udERlc2NyaXB0b3JUZXh0U3R5bGVFbXBoYXNp
emVkOworICAgICAgICBjYWNoZWREZXNjID0gJnN5c3RlbUZvbnQ7CisgICAgICAgIGlmICghc3lz
dGVtRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVGb3JVSVR5cGUoa0NURm9udFN5c3RlbUZvbnRU
eXBlLCAwLCBudWxscHRyKSk7CisgICAgfQorCisgICAgaWYgKGZvbnREZXNjcmlwdG9yKSB7Cisg
ICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdp
dGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgMCwgbnVsbHB0cikpOworICAg
ICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICAgICAgY2FjaGVk
RGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICAg
ICAgY2FjaGVkRGVzYy0+c2V0T25lRmFtaWx5KHRleHRTdHlsZSk7CisgICAgICAgIGNhY2hlZERl
c2MtPnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmdldCgpKSk7CisgICAgICAg
IGNhY2hlZERlc2MtPnNldFdlaWdodChmcm9tQ1RGb250V2VpZ2h0KEZvbnRDYWNoZTo6d2VpZ2h0
T2ZDVEZvbnQoZm9udC5nZXQoKSkpKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRhbGljKDAp
OworICAgIH0KKyAgICBmb250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKK30KKworI2lmIEVO
QUJMRShWSURFTykKK1N0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKQoreworI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCisgICAgcmV0dXJuIFN0
cmluZyhtZWRpYUNvbnRyb2xzaU9TVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29u
dHJvbHNpT1NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisjZWxzZQorICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworI2VuZGlmCit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9s
c1NjcmlwdCgpCit7CisjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKKyAgICByZXR1
cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNBcHBsZUphdmFTY3JpcHQsIHNpemVvZihtZWRpYUNvbnRy
b2xzQXBwbGVKYXZhU2NyaXB0KSk7CisjZWxzZQorICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
I2VuZGlmCit9CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit9CisKKyNlbmRpZiAvL1BMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXgg
NGI2Y2ZlYmFlNjJhYTE2ZmQ1ODQ1MjhkMmZjMmY2ZjIxZjhkOTdlNy4uNTYyYWRhMjZkZDQzNGIz
YWEwOTY4MGQ1ZWM5MGFkNzhlZDJmOGZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLmgKQEAgLTE5LDYgKzE5LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICoKICAqLworI2lmICFQTEFURk9STShJT1MpCiAKICNpZm5kZWYgUmVuZGVyVGhl
bWVNYWNfaAogI2RlZmluZSBSZW5kZXJUaGVtZU1hY19oCkBAIC0yMzUsMyArMjM2LDUgQEAgcHJp
dmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclRoZW1lTWFj
X2gKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMmRkMmRmOTk1NjU3MTg2YmI4YWQ1NTlmZGRiMWE1MGM5
MTI3OTk1NC4uYmI1NGNmMTZiMjMxYmY4Y2M3NjZkMzIwODdjMzI3MDhiNjZiNWFhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMTYsNiArMTYsNyBA
QAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisj
aWYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJSZW5kZXJU
aGVtZU1hYy5oIgpAQCAtMTkzMywzICsxOTM0LDUgQEAgU3RyaW5nIFJlbmRlclRoZW1lTWFjOjpm
aWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnQK
IAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKaW5kZXggZTMxYzQ2ZjExMWJi
YTI0M2U4YjgyNzAyMDlhOGFiNTMxMGJkYmM4Mi4uZmU3ZDNlYTQyNmNlMjdhYmIzODcyMjJjMjUw
MGY0OGVkY2MzMmEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZGVvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3Bw
CkBAIC0xMTYsMTEgKzExNiwxMyBAQCBMYXlvdXRTaXplIFJlbmRlclZpZGVvOjpjYWxjdWxhdGVJ
bnRyaW5zaWNTaXplKCkKICAgICBpZiAodmlkZW9FbGVtZW50KCkuc2hvdWxkRGlzcGxheVBvc3Rl
ckltYWdlKCkgJiYgIW1fY2FjaGVkSW1hZ2VTaXplLmlzRW1wdHkoKSAmJiAhaW1hZ2VSZXNvdXJj
ZSgpLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBtX2NhY2hlZEltYWdlU2l6ZTsK
IAorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gV2hlbiB0aGUgbmF0dXJhbCBzaXplIG9mIHRo
ZSB2aWRlbyBpcyB1bmF2YWlsYWJsZSwgd2UgdXNlIHRoZSBwcm92aWRlZAogICAgIC8vIHdpZHRo
IGFuZCBoZWlnaHQgYXR0cmlidXRlcyBvZiB0aGUgdmlkZW8gZWxlbWVudCBhcyB0aGUgaW50cmlu
c2ljIHNpemUgdW50aWwKICAgICAvLyBiZXR0ZXIgdmFsdWVzIGJlY29tZSBhdmFpbGFibGUuCiAg
ICAgaWYgKHZpZGVvRWxlbWVudCgpLmhhc0F0dHJpYnV0ZSh3aWR0aEF0dHIpICYmIHZpZGVvRWxl
bWVudCgpLmhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkKICAgICAgICAgcmV0dXJuIExheW91dFNp
emUodmlkZW9FbGVtZW50KCkud2lkdGgoKSwgdmlkZW9FbGVtZW50KCkuaGVpZ2h0KCkpOworI2Vu
ZGlmCiAKICAgICAvLyA8dmlkZW8+IGluIHN0YW5kYWxvbmUgbWVkaWEgZG9jdW1lbnRzIHNob3Vs
ZCBub3QgdXNlIHRoZSBkZWZhdWx0IDMwMHgxNTAKICAgICAvLyBzaXplIHNpbmNlIHRoZXkgYWxz
byBoYXZlIGF1ZGlvLW9ubHkgZmlsZXMuIEJ5IHNldHRpbmcgdGhlIGludHJpbnNpYwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDdiOTNmMDNiODExYzYyNzk2YWQx
MGYwNWVmM2Y0YTJmMDBmZDg0NTAuLjdlNTZmYzI1YjBiYTZmNTZkZGY3NmRlMDRhNDJlODU3ZWI2
MzY2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTEzNyw2
ICsxMzcsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJWaWV3OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0
KEF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRUeXBlKSBjb25zdAogICAgIC8vIElmIHdlIGhhdmUgY29s
dW1ucywgdGhlbiB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgaGVpZ2h0IGlzIHJlZHVjZWQgdG8gdGhl
IGNvbHVtbiBoZWlnaHQuCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkKICAgICAgICAgcmV0dXJuIGNv
bHVtbkluZm8oKS0+Y29sdW1uSGVpZ2h0KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS83MTY2ODA4Pi4KKyAgICBpZiAoZG9jdW1lbnQo
KS5pc1BsdWdpbkRvY3VtZW50KCkgJiYgZnJhbWVWaWV3KCkudXNlRml4ZWRMYXlvdXQoKSkKKyAg
ICAgICAgcmV0dXJuIGZyYW1lVmlldygpLmZpeGVkTGF5b3V0U2l6ZSgpLmhlaWdodCgpOworI2Vu
ZGlmCiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVZpZXcoKS52
aXNpYmxlSGVpZ2h0KCkgOiBmcmFtZVZpZXcoKS52aXNpYmxlV2lkdGgoKTsKIH0KIApAQCAtMzYz
LDYgKzM2OCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlclZpZXc6OnBhZ2VPclZpZXdMb2dpY2FsSGVp
Z2h0KCkgY29uc3QKICAgICByZXR1cm4gdmlld0xvZ2ljYWxIZWlnaHQoKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK3N0YXRpYyBpbmxpbmUgTGF5b3V0U2l6ZSBmaXhlZFBvc2l0aW9uT2Zmc2V0
KGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3KQoreworICAgIHJldHVybiBmcmFtZVZpZXcudXNl
Q3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKSA/IChmcmFtZVZpZXcuY3VzdG9tRml4ZWRQ
b3NpdGlvbkxheW91dFJlY3QoKS5sb2NhdGlvbigpIC0gTGF5b3V0UG9pbnQoKSkgOiBmcmFtZVZp
ZXctPnNjcm9sbE9mZnNldCgpOworfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyVmlldzo6bWFwTG9j
YWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUsIE1hcENvb3JkaW5hdGVzRmxhZ3Mg
bW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0CiB7CiAgICAgLy8gSWYgYSBjb250YWluZXIgd2Fz
IHNwZWNpZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVuZGVyVmlldywKQEAgLTM3Nyw3ICsz
ODksMTEgQEAgdm9pZCBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWkKICAgICB9CiAgICAgCiAgICAgaWYgKG1v
ZGUgJiBJc0ZpeGVkKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUu
bW92ZShmaXhlZFBvc2l0aW9uT2Zmc2V0KG1fZnJhbWVWaWV3KSk7CisjZWxzZQogICAgICAgICB0
cmFuc2Zvcm1TdGF0ZS5tb3ZlKGZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRp
b24oKSk7CisjZW5kaWYKIH0KIAogY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJWaWV3OjpwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9y
VG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKQEAgLTM4Niw3
ICs0MDIsMTEgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJWaWV3OjpwdXNoTWFwcGluZ1Rv
Q29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmoKICAgICAvLyB0aGVuIHdlIHNob3Vs
ZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KICAgICBBU1NFUlRfQVJHKGFuY2VzdG9yVG9TdG9wQXQs
ICFhbmNlc3RvclRvU3RvcEF0IHx8IGFuY2VzdG9yVG9TdG9wQXQgPT0gdGhpcyk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQgPSBmaXhlZFBvc2l0aW9u
T2Zmc2V0KGZyYW1lVmlldygpKTsKKyNlbHNlCiAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQg
PSBmcmFtZVZpZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCk7CisjZW5kaWYKIAog
ICAgIGlmICghYW5jZXN0b3JUb1N0b3BBdCAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFp
bmVyKDApKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CkBAIC00MDEsNyArNDIx
LDExIEBAIGNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyVmlldzo6cHVzaE1hcHBpbmdUb0NvbnRh
aW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqCiB2b2lkIFJlbmRlclZpZXc6Om1hcEFic29s
dXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwgVHJhbnNmb3JtU3RhdGUm
IHRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIGlmIChtb2RlICYgSXNGaXhlZCkKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoZml4ZWRQb3NpdGlvbk9m
ZnNldChmcmFtZVZpZXcoKSkpOworI2Vsc2UKICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShm
cmFtZVZpZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkpOworI2VuZGlmCiAKICAg
ICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRh
aW5lcigwKSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OwpAQCAtNTcyLDcgKzU5
NiwxMiBAQCB2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0IExheW91
dFJlY3QmIHVyLCBib29sIGltbWVkaWF0ZSkgY29ucwogICAgICAgICBmcmFtZVZpZXcoKS5yZXBh
aW50Q29udGVudFJlY3RhbmdsZShwaXhlbFNuYXBwZWRJbnRSZWN0KHVyKSwgaW1tZWRpYXRlKTsK
ICAgICBlbHNlIGlmIChSZW5kZXJCb3gqIG9iaiA9IGVsdC0+cmVuZGVyQm94KCkpIHsKICAgICAg
ICAgTGF5b3V0UmVjdCB2ciA9IHZpZXdSZWN0KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICAvLyBEb24ndCBjbGlwIHVzaW5nIHRoZSB2aXNpYmxlIHJlY3Qgc2luY2UgY2xpcHBpbmcgaXMg
aGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCBvbiBpUGhvbmUuCisgICAgICAgIExheW91dFJlY3Qg
ciA9IHVyOworI2Vsc2UKICAgICAgICAgTGF5b3V0UmVjdCByID0gaW50ZXJzZWN0aW9uKHVyLCB2
cik7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRyYWN0IG91dCB0aGUgY29udGVu
dHNYIGFuZCBjb250ZW50c1kgb2Zmc2V0cyB0byBnZXQgb3VyIGNvb3JkcyB3aXRoaW4gdGhlIHZp
ZXdpbmcKICAgICAgICAgLy8gcmVjdGFuZ2xlLgpAQCAtNjM2LDggKzY2NSwxMyBAQCB2b2lkIFJl
bmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udAogICAgICAgICAgICAgcmVjdC5zZXRYKHZpZXdXaWR0aCgpIC0gcmVj
dC5tYXhYKCkpOwogICAgIH0KIAotICAgIGlmIChmaXhlZCkKKyAgICBpZiAoZml4ZWQpIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgIHJlY3QubW92ZShmaXhlZFBvc2l0aW9uT2Zmc2V0KGZy
YW1lVmlldygpKSk7CisjZWxzZQogICAgICAgICByZWN0Lm1vdmUoZnJhbWVWaWV3KCkuc2Nyb2xs
T2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpKTsKKyNlbmRpZgorICAgIH0KICAgICAgICAgCiAgICAg
Ly8gQXBwbHkgb3VyIHRyYW5zZm9ybSBpZiB3ZSBoYXZlIG9uZSAoYmVjYXVzZSBvZiBmdWxsIHBh
Z2Ugem9vbWluZykuCiAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyICYmIGxheWVyKCkgJiYgbGF5
ZXIoKS0+dHJhbnNmb3JtKCkpCkBAIC0xMTU2LDYgKzExOTAsMjQgQEAgRmxvd1RocmVhZENvbnRy
b2xsZXImIFJlbmRlclZpZXc6OmZsb3dUaHJlYWRDb250cm9sbGVyKCkKICAgICByZXR1cm4gKm1f
Zmxvd1RocmVhZENvbnRyb2xsZXI7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgYm9v
bCBpc0ZpeGVkUG9zaXRpb25JblZpZXdwb3J0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIs
IGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyKQoreworICAgIHJldHVybiAocmVuZGVyZXIu
c3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pICYmIHJlbmRlcmVyLmNvbnRhaW5l
cigpID09IGNvbnRhaW5lcjsKK30KKworYm9vbCBSZW5kZXJWaWV3OjpoYXNDdXN0b21GaXhlZFBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENvbnRhaW5pbmdCbG9ja0NoZWNr
IGNoZWNrQ29udGFpbmVyKSBjb25zdAoreworICAgIGlmICghZnJhbWVWaWV3KCkudXNlQ3VzdG9t
Rml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGNoZWNrQ29udGFpbmVyID09IENoZWNrQ29udGFpbmluZ0Jsb2NrKQorICAgICAgICByZXR1
cm4gaXNGaXhlZFBvc2l0aW9uSW5WaWV3cG9ydChyZW5kZXJlciwgdGhpcyk7CisKKyAgICByZXR1
cm4gcmVuZGVyZXIuc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247Cit9CisjZW5k
aWYKKwogdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVh
ZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKIHsKICAgICBpZiAoIW1fZmxvd1RocmVhZENv
bnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBlMmIyODQy
N2Y3YTEwODY3MjZmMjY4NjE2OThlNGNiYTFlMDE2YTRiLi42ZjNiYjdkZDRlMDc1MTQ4YWI1NmZi
ZGY1NWUxYjQ2MGU3MjA5YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgK
QEAgLTIwNCw2ICsyMDQsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBPVkVS
UklERTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbnVtIENvbnRhaW5pbmdCbG9ja0NoZWNr
IHsgQ2hlY2tDb250YWluaW5nQmxvY2ssIERvbnRDaGVja0NvbnRhaW5pbmdCbG9jayB9OworICAg
IGJvb2wgaGFzQ3VzdG9tRml4ZWRQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmLCBDb250YWlu
aW5nQmxvY2tDaGVjayA9IENoZWNrQ29udGFpbmluZ0Jsb2NrKSBjb25zdDsKKyNlbmRpZgorCiAg
ICAgSW50ZXJ2YWxBcmVuYSogaW50ZXJ2YWxBcmVuYSgpOwogCiAgICAgSW50U2l6ZSB2aWV3cG9y
dFNpemUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAK
aW5kZXggZmMyMDk1ZDA4ZmIxODhiNWY2MDI0ODc1NDJjNTA4OGMzNzE2OGEwOC4uMWFmZDkxNmJj
NTg1OGYxZTNhMGVlYzM2MWUyY2I0ZmYzNGRmYWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTkxLDYgKzkxLDExIEBAIFJlbmRlcldpZGdldDo6UmVu
ZGVyV2lkZ2V0KEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJT
dHlsZT4KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OndpbGxCZURlc3Ryb3llZCgpCiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGlmIChoYXNMYXllcigpKQorICAgICAgICBsYXllcigpLT53aWxsQmVE
ZXN0cm95ZWQoKTsKKyNlbmRpZgorCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9j
dW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBjYWNoZS0+Y2hpbGRy
ZW5DaGFuZ2VkKHRoaXMtPnBhcmVudCgpKTsKICAgICAgICAgY2FjaGUtPnJlbW92ZSh0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCAxOGQ3Mzg5
MWQ5MmQwZTVhNjZhZGMyZTBkZTE4MWQxNjlmNjFlOGY4Li40ZjllOTJiOWQwZmU1ZjM0MGUxYmYz
ZWQ1NzU0ZjVmOTI2ODY1OTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCkBAIC04NDYsNyArODQ2LDExIEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50
QW5kRGVzY2VudEZvckJveChJbmxpbmVCb3gqIGJveCwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiCiAg
ICAgYm9vbCBzZXRVc2VkRm9udFdpdGhMZWFkaW5nID0gZmFsc2U7CiAKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LT5saW5lU3R5bGUoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgaWYgKHVzZWRGb250cyAmJiAhdXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1
ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNs
dWRlTGVhZGluZykpICYmICFib3gtPnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5ncygpLT5h
bHdheXNVc2VCYXNlbGluZU9mUHJpbWFyeUZvbnQoKSkgeworI2Vsc2UKICAgICBpZiAodXNlZEZv
bnRzICYmICF1c2VkRm9udHMtPmlzRW1wdHkoKSAmJiAoaW5jbHVkZUZvbnQgfHwgKGJveExpbmVT
dHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkpIHsKKyNl
bmRpZgogICAgICAgICB1c2VkRm9udHMtPmFwcGVuZChib3hMaW5lU3R5bGUuZm9udCgpLnByaW1h
cnlGb250KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVzZWRGb250cy0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9
IHVzZWRGb250cy0+YXQoaSktPmZvbnRNZXRyaWNzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2JyZWFrX2xpbmVzLmNwcAppbmRleCA1OTNmZWVmMWFiYzhkM2EyY2YyMWM1ZWE5NGNlMjA3Mjky
MTUyMGExLi43MDRkZmZlYmNlNzdjZDEyYjc4YmNiZWZmZjM4MzI1ZDE2ZGJjMjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQ
TEFURk9STShJT1MpCiAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgogI2Vu
ZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218458</attachid>
            <date>2013-12-04 14:53:08 -0800</date>
            <delta_ts>2013-12-06 10:07:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125239-20131204145307.patch</filename>
            <type>text/plain</type>
            <size>226644</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIzMmI3NzVlN2ZjYWZl
ZGZkZmViNDhkYTA1YWY1YzQ4NjIzNzc4Yi4uZjg1MzM4YTM3Mzk1NmNiYzZjNzY1NmJjYzE1ODBk
NDYxMmNiYTIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1MiBAQAorMjAxMy0xMi0wNCAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0g
V2ViQ29yZS9yZW5kZXJpbmcgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVCb3g6OnByZXZpb3VzT25MaW5lRXhpc3RzKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KTogTW9kaWZpZWQgdG8gcXVlcnkgUmVuZGVyU3R5bGUKKyAgICAgICAgb24gaU9TIGZvciB0aGUg
Y29tcG9zaXRpb24gZmlsbCBjb2xvci4gQWRkZWQgRklYTUUgdG8gbWFrZSB0aGlzIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREZWNv
cmF0aW9uKTogQWRkZWQgaU9TLXNwZWNpZmljIGRlY29yYXRpb24gY29kZS4KKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVTdHlsZUZvck1hcmtlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4g
QWxzbywgYWRkZWQKKyAgICAgICAgRklYTUUgdG8gbWFrZSB0aGlzIGNvZGUgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOiBDaGFuZ2Vk
IGFjY2VzcyBjb250cm9sIG9mIGxvZ2ljYWx7TGVmdCwgUmlnaHR9U2VsZWN0aW9uT2Zmc2V0KCkK
KyAgICAgICAgZnJvbSBwcml2YXRlIHRvIHByb3RlY3RlZCBzbyB0aGF0IHRoZXNlIG1ldGhvZHMg
Y2FuIGJlIHVzZWQgZnJvbSBSZW5kZXJJbWFnZTo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKCkuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmJvcmRlclJhZGlpKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZC4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS82MjA5NzYzPgorICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4gCisgICAgICAgIChXZWJDb3JlOjpjdXN0b21Db250YWluaW5nQmxv
Y2tXaWR0aCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJD
b3JlOjpjdXN0b21Db250YWluaW5nQmxvY2tIZWlnaHQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFU
Rk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNv
cmU6OmN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3VzdG9tQ29udGFpbmluZ0Jsb2Nr
QXZhaWxhYmxlTG9naWNhbEhlaWdodCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUyku
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2lu
Zyk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlOyBjYWxscyBjdXN0b21Db250YWluaW5nQmxvY2tB
dmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgY29kZTsgY2FsbHMgY3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoKCkuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQ
b3NpdGlvbmVkKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGU7IGNhbGxzIGN1c3RvbUNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxIZWlnaHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpzdGlja3lQb3NpdGlvbk9mZnNldCk6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZpeGVk
UG9zaXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZpZXdw
b3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6bGF5b3V0
KTogQWRkZWQ7IGlPUy1zcGVjaWZpYy4gSW5jbHVkZXMgRklYTUUgY29tbWVudC4KKyAgICAgICAg
U2VlIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVEaWRDaGFuZ2UpOiBNb2RpZmllZCB0byBv
bmx5IGNhbGwgYXJlQ3Vyc29yc0VxdWFsKCkgYW5kCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2No
ZWR1bGVDdXJzb3JVcGRhdGUoKSBvbiBhIG5vbi1pT1MgcG9ydC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOiBBZGRlZCBpT1Mtc3Bl
Y2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbik6IFRoaXMgbWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBs
ZW1lbnRhdGlvbiBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uV2l0aERlc2NyaXB0aW9uKTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5vZGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVU
ZXh0VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKTogRGl0
dG87IEFsc28gYWRkZWQgRklYTUUgY29tbWVudCBhcyB0aGlzIGNvZGUgbWF5IG5vdAorICAgICAg
ICBiZSBzcGVjaWZpYyB0byBpT1MuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5o
OiBBZGRlZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZCB0byBSZW5kZXJPYmplY3Q6OnJlbmRlck5h
bWUoKS4gQWRkZWQKKyAgICAgICAgRklYTUUgY29tbWVudCB0byBkZXRlcm1pbmUgd2hldGhlciB0
aGlzIHdvcmthcm91bmQgaXMgc3RpbGwgYXBwbGljYWJsZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNvbGxlY3RT
ZWxlY3Rpb25SZWN0cyk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRBcmVhRWxlbWVudEZvY3VzUmluZyk6IFRoaXMg
bWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzRm9yU2Vs
ZWN0aW9uKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6IEFkZGVkIGlP
Uy1zcGVjaWZpYyBtZW1iZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6flJlbmRlckxheWVyKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6d2lsbEJlRGVzdHJveWVkKTogQWRkZWQ7IGlPUy1zcGVj
aWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNBY2NlbGVyYXRlZFRvdWNo
U2Nyb2xsaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFuZGxl
VG91Y2hFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVOZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmcpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSBhcyB3ZSB1c2Ug
VUlLaXQKKyAgICAgICAgdG8gY29tcG9zaXRlIG91ciBzY3JvbGwgYmFycy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOiBNb2RpZmll
ZCB0byBtYWtlIHVzZSBvZiB0aGUgcGFzc2VkIFN0eWxlRGlmZmVyZW5jZSBvbiBpT1MuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0KTogQWRkZWQ7IGlP
Uy1zcGVjaWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9s
bCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KTogQWRkIGlPUy1zcGVjaWZpYyB3b3JrYXJvdW5kIHdpdGggRklYTUUu
IFNlZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKTog
QWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFwaGljc0xh
eWVyKTogTW9kaWZpZWQgdG8gbm90IGFwcGx5IHBhZ2Ugc2NhbGUgb24gaU9TCisgICAgICAgIGFz
IHdlIGFwcGx5IGEgcGFnZSBzY2FsZSBhdCBhIGRpZmZlcmVudCB0aW1lIGluIHRoZSBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpsYXllcldpbGxCZURlc3Ryb3ll
ZCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJDb3JlOjps
YXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgdmFyaWFudCB3aXRoIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNob3VsZENsaXBDb21wb3NpdGVkQm91bmRzKTogQWRkZWQgaU9TLXNwZWNp
ZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZWdpc3RlclNjcm9sbGluZ0xheWVy
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVT
Y3JvbGxpbmdMYXllcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCk6IENhbGwgUmVuZGVyTGF5ZXI6Omhhc0JveERl
Y29yYXRpb25zT3JCYWNrZ3JvdW5kKCkKKyAgICAgICAgd2hlbiBidWlsZGluZyBvbiBpT1MgU2lt
dWxhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYXJlbnRGb3JT
dWJsYXllcnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSBhbmQgRklYTUUgY29tbWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRzSW50b1dpbmRvdyk6IE9w
dC1pbnRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGNvZGUgcGF0aC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdCk6IEFkZGVk
IGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludEludG9MYXllcik6IENvbXBpbGUtb3V0IEFTU0VSVF9OT1RfUkVBQ0hFRCBmb3IgaU9T
IGFuZCBhZGRlZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjptaW5pbXVtRG9jdW1lbnRTY2FsZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JN
KElPUykuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFsbG93Q29tcG9z
aXRpbmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0o
SU9TKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
aHJvbWVDbGllbnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMp
OiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhh
c0Rpc3BsYXlOb25lKTogQWRkZWQ7IGlPUy1zcGVjaWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDdXN0b21MYXllcnNBZnRlckZsdXNoKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNoQ2hh
bmdlc0ZvckxheWVyKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZENoYW5nZVZpc2libGVSZWN0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCk6
IERvbid0IGFwcGx5IHBhZ2Ugc2NhbGUgZmFjdG9yIG9uIGlPUy4gV2UgYXBwbHkKKyAgICAgICAg
dGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGF0IGEgZGlmZmVyZW50IHRpbWUgaW4gdGhlIGNvZGUuIEFs
c28sIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6IEFkZGVkIGlPUy1zcGVj
aWZpYyB3b3JrYXJvdW5kLgorICAgICAgICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzgzNDgzMzc+IGZv
ciBtb3JlIGRldGFpbHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNldElzSW5XaW5kb3cpOiBVc2Ugbm9uLU1hYyBjb2RlIHBhdGggZm9yIGlPUy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWxsb3dzSW5kZXBlbmRlbnRseUNvbXBv
c2l0ZWRGcmFtZXMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzT3duQmFj
a2luZ1N0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlYXNvbnNGb3JDb21wb3NpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKTogT3B0
LWludG8gY2FsbGluZworICAgICAgICBBbmltYXRpb25Db250cm9sbGVyOjppc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKCkgb24gaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsaW5nKTogQWRkZWQ7IGd1YXJk
ZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OmlzU3RpY2t5SW5BY2NlbGVy
YXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbik6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZpeGVkUG9z
aXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZpZXdwb3J0
Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6bWluaW11bURvY3VtZW50U2NhbGUpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjphbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6IEFk
ZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpwYWdlU2NhbGVGYWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29udGVudHNTY2FsZU11bHRpcGxpZXJGb3JOZXdUaWxlcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290
TGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUZpeGVkVmlld3BvcnRDb25zdHJhaW50cyk6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZp
eGVkUG9zaXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZp
ZXdwb3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0
ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcik6IFRoaXMgbWV0aG9kIGhhcyBhbiBl
bXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TCisgICAgICAgIGFzIHdlIGJhdGNoIHVwZGF0ZSB2
aWV3cG9ydC1jb25zdHJhaW5lZCBsYXllcnMgaW4gdGhlIGlPUy1zcGVjaWZpYyBtZXRob2QsIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgpLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycyk6IEFkZGVkOyBn
dWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVucmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsU2Ny
b2xsaW5nTGF5ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3Jv
bGxpbmdMYXllclJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c3RhcnRJbml0aWFsTGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oOiBBZGRlZCBpT1Mtc3BlY2lmaWMgQ2xh
bmcgd29ya2Fyb3VuZCB0byBpZ25vcmUKKyAgICAgICAgYW4gdW51c2VkIHByaXZhdGUgZmllbGQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNlbGVjdGVkT3B0aW9uQ291bnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1Mp
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KTogT24g
aU9TIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwSXNWaXNpYmxl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6On5SZW5kZXJNZW51TGlzdCk6IE9u
IGlPUyB3ZSBkb24ndCBtYWtlIHVzZSBvZiBSZW5kZXJNZW51TGlzdDo6bV9wb3B1cC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKTogQWRkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21FbGVtZW50
KTogT24gaU9TIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwLgor
ICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tT3B0aW9uKTogQWRkIGlPUy1zcGVj
aWZpYyBjb2RlLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCk6IERlZmluZSBS
ZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkgdG8gQVNTRVJUX05PVF9SRUFDSEVEKCkgb24gaU9T
IGFzCisgICAgICAgIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVw
LgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmhpZGVQb3B1cCk6IFRoaXMgbWV0aG9kIGhhcyBh
biBlbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TIGFzIHdlIGRvbid0IG1ha2UgdXNlCisgICAg
ICAgIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6
OnBvcHVwRGlkSGlkZSk6IFRoaXMgbWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBm
b3IgaU9TIGFzIHdlIGRvbid0IG1ha2UgdXNlCisgICAgICAgIG9mIFJlbmRlck1lbnVMaXN0Ojpt
X3BvcHVwSXNWaXNpYmxlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojpjb2x1bW5OdW1iZXJGb3JPZmZzZXQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLiBBbHNvLCBhZGRlZCBhIEZJWE1FIGNvbW1lbnQgdG8KKyAgICAgICAgbWFr
ZSB0aGlzIGZ1bmN0aW9uIHJldHVybiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGluc3RlYWQgb2YgYSBz
aWduZWQgaW50ZWdlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNl
bGVjdGlvblJlY3RzKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZGVzdHJveSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppbm5lckxpbmVIZWlnaHQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKTogQWRk
ZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
OiBDaGFuZ2UgdGhlIGFjY2VzcyBjb250cm9sIG9mIFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JC
b3hTaWRlKCkgZnJvbSBwcm90ZWN0ZWQgdG8KKyAgICAgICAgcHVibGljIHNvIHRoYXQgaXQgY2Fu
IGJlIHVzZWQgZnJvbSBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSgp
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVF1YWRzRm9yU2VsZWN0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmg6IENoYW5nZSB0aGUg
YWNjZXNzIGNvbnRyb2wgb2YgUmVuZGVyU2Nyb2xsYmFyOjpnZXRTY3JvbGxiYXJQc2V1ZG9TdHls
ZSgpIGZyb20KKyAgICAgICAgcHJpdmF0ZSB0byBwdWJsaWMgc28gdGhhdCBpdCBjYW4gYmUgdXNl
ZCBmcm9tIHRoZSBpT1Mtc3BlY2lmaWMgc3RhdGljIGZ1bmN0aW9uLCBzY3JvbGxiYXJIYXNEaXNw
bGF5Tm9uZSwKKyAgICAgICAgZGVmaW5lZCBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVRleHQpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29k
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c2V0VGV4dEludGVy
bmFsKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y2FuU2Nyb2xsKTog
QWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjppbm5lckxpbmVIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmU6OmdldEF2Z0NoYXJXaWR0aCk6IENvbXBpbGUtb3V0IGNvZGUgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OmNyZWF0ZUlubmVyVGV4dFN0eWxlKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lk
dGgpOiBDb21waWxlLW91dCBjb2RlIHdoZW4gYnVpbGRpbmcgZm9yIGlPUy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2lj
YWxXaWR0aCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6cG9zaXRpb25Gb3JQ
b2ludCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJP
bmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0
aW9ucyk6IE1vZGlmaWVkIHRvIGNhbGwgdGhlIGNvbnRyb2wtc3BlY2lmaWMgcGFpbnQqRGVjb3Jh
dGlvbnMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25z
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGRE
ZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
VGV4dEFyZWFEZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBhaW50TWVudUxpc3REZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50RmlsZVVwbG9hZEljb25E
ZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oOiBEb24ndCBjb21waWxlIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKTogQ29tcGlsZS1vdXQgY29kZSB3
aGVuIGJ1aWxkaW5nIGZvciBpT1MuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXZhaWxhYmxlTG9naWNhbEhlaWdodCk6
IEFkZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZC4gU2VlIDxyZGFyOi8vcHJvYmxlbS83MTY2ODA4
Pi4KKyAgICAgICAgKFdlYkNvcmU6OmZpeGVkUG9zaXRpb25PZmZzZXQpOiBBZGRlZDsgdXNlZCBp
biBpT1Mtc3BlY2lmaWMgY29kZSAoZS5nLiBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29udGFpbmVy
KCkpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bWFwTG9jYWxUb0NvbnRhaW5lcik6
IFVzZSBXZWJDb3JlOjpmaXhlZFBvc2l0aW9uT2Zmc2V0KCkgaW5zdGVhZCBvZiAKKyAgICAgICAg
RnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGaXhlZFBvc2l0aW9uSW5WaWV3cG9ydCk6IEFk
ZGVkOyB1c2VkIGluIFJlbmRlclZpZXc6Omhhc0N1c3RvbUZpeGVkUG9zaXRpb24oKS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6Omhhc0N1c3RvbUZpeGVkUG9zaXRpb24pOiBBZGRlZDsg
Z3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJXaWRnZXQ6OndpbGxCZURlc3Ryb3llZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBj
b2RlLgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3gpOiBEaXR0by4KKyAg
ICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwOiBPbmx5IGluY2x1ZGUgaGVhZGVyIDxD
b3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+IHdoZW4gYnVpbGRpbmcgZm9yIE1hYy4KKwogMjAx
My0xMi0wNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFsbG93IEltYWdlQnVmZmVyIHRvIHVzZSBhbiBJT1N1cmZhY2UgdGhhdCBpcyBsYXJnZXIg
dGhhbiBuZWNlc3NhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjZGM3N2I4NjFiNWNiMWMyNTIyMjdlODI5ZGE2Mzc1NDM5YThj
YjVhLi5iY2VmOTkxOGE1ZjkzZmY5MDRjYWVlMTkyNjliYjc5NzE5MTAzODcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDQw
LDYgKzU0NDAsOCBAQAogCQlDRTdCMkRCNTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRTdCMkRCMTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0U3
QjJEQjYxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIyMTU4NkFC
QUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi87IH07CiAJCUNFOTUy
MDhBMTgxMUI0NzUwMDdBNTM5MiAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2VlcGVySU9TLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM0Q0IxRDE2MUEx
MzEyMDBEMjE0REEgLyogV2ViU2FmZUluY3JlbWVudGFsU3dlZXBlcklPUy5oICovOyB9OworCQlG
RUQxM0Q1MjBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDUwMENFQTk0OTcwMEQ4OTQ2
NiAvKiBSZW5kZXJUaGVtZUlPUy5oICovOyB9OworCQlDNTVDN0JBMTE3MThBRkJBMDAxMzI3RTQg
LyogUmVuZGVyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTVDN0JBMDE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0g
Ki87IH07CiAJCUNFQ0FERkM2MTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUNB
REZDMjE1Mzc3OEZGMDBFMzcwNjggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmUuY3BwICovOyB9Owog
CQlDRUNBREZDNzE1Mzc3OEZGMDBFMzcwNjggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0FERkMzMTUzNzc4
RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFQ0FERkM4MTUzNzc4RkYwMEUzNzA2OCAv
KiBEaWN0YXRpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFQ0FERkM0MTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25Db21tYW5k
LmNwcCAqLzsgfTsKQEAgLTEyNTU4LDYgKzEyNTYwLDggQEAKIAkJQ0U3QjJEQjAxNTg2QUJBRDAw
OThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbTsg
cGF0aCA9IG1hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNFN0IyREIxMTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlLmg7IHBhdGggPSBtYWMvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFN0IyREIyMTU4NkFCQUQwMDk4QjNGQSAv
KiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UubW07IHBhdGggPSBtYWMvVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RUQxM0Q1MDBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGhlbWVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzU1QzdCQTAxNzE4QUZCQTAwMTMyN0U0IC8qIFJlbmRlclRoZW1lSU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGhlbWVJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFQ0FERkMyMTUzNzc4RkYwMEUzNzA2
OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNFQ0FERkMzMTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUNBREZDNDE1Mzc3OEZGMDBFMzcw
NjggLyogRGljdGF0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaWN0YXRpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxMjM5LDYgKzIxMjQzLDggQEAKIAkJCQk4NkZGODg1RjE1REUzQjgyMDBCRDZCMjggLyog
UmVuZGVyVGV4dFRyYWNrQ3VlLmggKi8sCiAJCQkJQkNFQTQ4NEEwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlclRoZW1lLmNwcCAqLywKIAkJCQlCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVyVGhlbWUuaCAqLywKKwkJCQlGRUQxM0Q1MDBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhl
bWVJT1MuaCAqLywKKwkJCQlDNTVDN0JBMDE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJ
T1MubW0gKi8sCiAJCQkJQkNFQTQ4NDgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
LmggKi8sCiAJCQkJQkNFQTQ4NDkwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLm1t
ICovLAogCQkJCTkzOTU1QTQyMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVlQXNUZXh0LmNw
cCAqLywKQEAgLTI0MzU4LDYgKzI0MzY0LDcgQEAKIAkJCQk0MzkwNDZERTEyREEyNUU4MDBBRjgw
QTIgLyogUmVuZGVyTWF0aE1MTWF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RTAxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzkwNDZFMjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MUm9vdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkVEMTNENTIwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJlbmRlclRoZW1lSU9TLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFNDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MUm93LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFNjEyREEyNUU4MDBBRjgwQTIgLyog
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4MzIyODUxODAx
M0VEODAwOTk5RTBDIC8qIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovLApA
QCAtMjgyOTksNiArMjgzMDYsNyBAQAogCQkJCTk3NkQ2QzdCMTIyQjhBM0QwMDFGRDFGNyAvKiBX
ZWJLaXRCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTBCOTIzOTE1RjA4REM0
MDBFMTA5ODYgLyogV2ViS2l0Q1NTQXJyYXlGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyRThBRTMwMTZBNDhFMUMwMDZCQjNBQSAvKiBXZWJLaXRDU1NGaWx0ZXJSdWxlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUM1NUM3QkExMTcxOEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJU
aGVtZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMDYwMzZGMTQzMjdEMkUwMEFCRjRCQSAv
KiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTI4OEU3MjBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMjg4RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcApp
bmRleCA1MTFjNjk1ZTdkODk1ZDNkYjc4N2NhZDU5NTMxOWI5ODljZjA3NjY2Li4zNWQxN2RmM2Rm
OGM2Y2NmZGNjODE1ZTE4MjA5MjRhNDBmMWY0ZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmNwcApAQCAtMTkzLDYgKzE5MywxNSBAQCBib29sIElubGluZUJveDo6bmV4dE9u
TGluZUV4aXN0cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5leHRPbkxpbmVFeGlz
dHMoKTsKIH0KIAorYm9vbCBJbmxpbmVCb3g6OnByZXZpb3VzT25MaW5lRXhpc3RzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBy
ZXZPbkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHBhcmVudCgpLT5w
cmV2aW91c09uTGluZUV4aXN0cygpOworfQorCiBJbmxpbmVCb3gqIElubGluZUJveDo6bmV4dExl
YWZDaGlsZCgpIGNvbnN0CiB7CiAgICAgSW5saW5lQm94KiBsZWFmID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guaAppbmRleCBmNjUyNDE5ZGIwYjdlNjNkNDc4ZGFiNTZiMDNmNWQ0
YzRlMGY5MjQ1Li5hNmNlNWRlY2YwNjkwZjkxZDBlMjlmN2FlNjA1OWU2NzRmMzg2NDQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCkBAIC0xMzEsNiArMTMxLDcgQEAgcHVibGlj
OgogICAgICAgICBtX3ByZXYgPSBwcmV2OwogICAgIH0KICAgICBib29sIG5leHRPbkxpbmVFeGlz
dHMoKSBjb25zdDsKKyAgICBib29sIHByZXZpb3VzT25MaW5lRXhpc3RzKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNMZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGEwOThmMzVhMWRh
NmEwNDY5ODE3NmU1OTkxZThlNjRlMTRiOTA5MDcuLjJjMzgxZTdkOWVhMjJlNGNiYmI5YzZhOThj
ODQ0MjJlNGIxZDM1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKQEAgLTcxNiw3ICs3MTYsMTMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBv
c2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEYKIAogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNvbG9yIHN0aWxsIGFwcGxpY2Fi
bGUgYXMgb2YgTWF2ZXJpY2tzPyBmb3Igbm9uLU1hYyBwb3J0cz8gV2Ugc2hvdWxkCisgICAgLy8g
YmUgYWJsZSB0byBtb3ZlIHRoaXMgY29sb3IgaW5mb3JtYXRpb24gdG8gUmVuZGVyU3R5bGUuCiAg
ICAgQ29sb3IgYyA9IENvbG9yKDIyNSwgMjIxLCA4NSk7CisjZWxzZQorICAgIENvbG9yIGMgPSBz
dHlsZS5jb21wb3NpdGlvbkZpbGxDb2xvcigpOworI2VuZGlmCiAgICAgCiAgICAgdXBkYXRlR3Jh
cGhpY3NDb250ZXh0KCpjb250ZXh0LCBUZXh0UGFpbnRTdHlsZShjLCBzdHlsZS5jb2xvclNwYWNl
KCkpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKIApAQCAtMTAwMSw3ICsxMDA3LDIwIEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAKICAgICAvLyBVc2UgYSBzcGVjaWFsIGZ1bmN0
aW9uIGZvciB1bmRlcmxpbmVzIHRvIGdldCB0aGUgcG9zaXRpb25pbmcgZXhhY3RseSByaWdodC4K
ICAgICBib29sIGlzUHJpbnRpbmcgPSByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKTsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHRleHRE
ZWNvcmF0aW9uVGhpY2tuZXNzKTsKKyNlbHNlCisgICAgLy8gT24gaU9TIHdlIHdhbnQgdG8gZHJh
dyBjcmlzcCBkZWNvcmF0aW9ucy4gVGhlIGZ1bmN0aW9uIGRyYXdMaW5lRm9yVGV4dCB0YWtlcyB0
aGUgY29udGV4dCdzCisgICAgLy8gc3Ryb2tlVGhpY2tuZXNzIGFuZCByZW5kZXJzIHRoYXQgYXQg
ZGV2aWNlIHBpeGVsIHNjYWxlIChpLmUuIGEgc3Ryb2tlVGhpY2tuZXNzIG9mIDEgd2lsbAorICAg
IC8vIHByb2R1Y2UgYSAxIGRldmljZSBwaXhlbCBsaW5lLCBzbyB0aGlubmVyIG9uIHJldGluYSB0
aGFuIG5vbi1yZXRpbmEpLiBXZSB3aWxsIGFsc28gc2NhbGUKKyAgICAvLyBvdXIgdGhpY2tuZXNz
IGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBmb250LiBTaW5jZSBvdXIgZGVmYXVsdCBzaXplIGlz
IDE2cHggd2UnbGwgdXNlIHRoYXQKKyAgICAvLyBhcyBhIHNjYWxlIHJlZmVyZW5jZS4KKyAgICBm
bG9hdCBkb2N1bWVudFNjYWxlID0gcmVuZGVyZXIoKS5mcmFtZSgpLmRvY3VtZW50U2NhbGUoKTsK
KyAgICBjb25zdCBmbG9hdCB0ZXh0RGVjb3JhdGlvbkJhc2VGb250U2l6ZSA9IDE2OworICAgIGZs
b2F0IGZvbnRTaXplU2NhbGluZyA9IHJlbmRlcmVyKCkuc3R5bGUoKS5mb250U2l6ZSgpIC8gdGV4
dERlY29yYXRpb25CYXNlRm9udFNpemU7CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gcm91
bmRmKHRleHREZWNvcmF0aW9uVGhpY2tuZXNzICogZm9udFNpemVTY2FsaW5nICogZG9jdW1lbnRT
Y2FsZSk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsK
KyNlbmRpZgogCiAgICAgYm9vbCBsaW5lc0FyZU9wYXF1ZSA9ICFpc1ByaW50aW5nICYmICghKGRl
Y29yYXRpb24gJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSkgfHwgdW5kZXJsaW5lLmFscGhhKCkg
PT0gMjU1KSAmJiAoIShkZWNvcmF0aW9uICYgVGV4dERlY29yYXRpb25PdmVybGluZSkgfHwgb3Zl
cmxpbmUuYWxwaGEoKSA9PSAyNTUpICYmICghKGRlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbkxp
bmVUaHJvdWdoKSB8fCBsaW5ldGhyb3VnaC5hbHBoYSgpID09IDI1NSk7CiAKQEAgLTExNjQsNiAr
MTE4MywxMSBAQCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKERvY3VtZW50TQogICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5
bGU7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgogICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckRpY3RhdGlvbkFsdGVy
bmF0aXZlc0xpbmVTdHlsZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKKyAgICAgICAgLy8gRklYTUU6
IFJlbmFtZSBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0
eWxlIGFuZCByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXNMaW5lU3R5bGU7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJT
cGVsbGluZ0xpbmVTdHlsZTsKQEAgLTEzMDQsNiArMTMyOCwxMCBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0
UG9pbnQmCiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNh
dG9yOgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAg
ICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgUExBVEZPUk0o
SU9TKS1ndWFyZC4KKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBo
cmFzZVdpdGhBbHRlcm5hdGl2ZXM6CisjZW5kaWYKICAgICAgICAgICAgICAgICBpZiAoYmFja2dy
b3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzM0LDYgKzEzNjIsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3Vt
ZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAg
ICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKICAgICAgICAgICAgICAgICBwYWlu
dERvY3VtZW50TWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwgc3R5bGUsIGZvbnQsIHRydWUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5MzMzNTI+LiBBbHNvLCByZW1vdmUgdGhl
IFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOgorICAgICAgICAgICAgICAgIHBhaW50RG9j
dW1lbnRNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRN
YXJrZXI6OlRleHRNYXRjaDoKICAgICAgICAgICAgICAgICBwYWludFRleHRNYXRjaE1hcmtlcihw
dCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250KTsKICAgICAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDI5MWE0Nzc2
Y2YyMWI0MGU1ZGE3NGIwMDllOGU0ZmZjM2RhYjlmM2YuLmM2Y2MyMWMyNThhNWZkOTk4NTQxMGNh
Nzc3OTZlYTZlNzIxODBmMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcApAQCAtMjIxMCw3ICsyMjEwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAg
IGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lmlu
ZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogICAgICAgICBvdmVy
Zmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZs
b3dCb3guaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCisgICAgICAgIGlmICghb3ZlcmZsb3dC
b3guaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBtYXkgYmUgYXBwbGljYWJsZSB0byBub24taU9TIHBvcnRzLgor
ICAgICAgICAgICAgJiYgKCFoYXNMYXllcigpIHx8ICFsYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkK
KyNlbmRpZgorICAgICAgICApCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTU5
LDYgKzM1NjQsMTUgQEAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5n
RWRpdGluZ0JvdW5kYXJpZXMoUmVuZGVyQmxvY2smIHBhcmVudCwKICAgICAvLyBJZiB3ZSBjYW4n
dCBmaW5kIGFuIGFuY2VzdG9yIHRvIGNoZWNrIGVkaXRhYmlsaXR5IG9uLCBvciBlZGl0YWJpbGl0
eSBpcyB1bmNoYW5nZWQsIHdlIHJlY3VyIGxpa2Ugbm9ybWFsCiAgICAgaWYgKGlzRWRpdGluZ0Jv
dW5kYXJ5KGFuY2VzdG9yLCBjaGlsZCkpCiAgICAgICAgIHJldHVybiBjaGlsZC5wb3NpdGlvbkZv
clBvaW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKKyAgICAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gT24gdGhlIHBob25lIHdlIHdhbnQgdG8gY29uc3RyYWluIFZpc2libGVQb3NpdGlv
bnMgdG8gdGhlIGVkaXRhYmxlIHJlZ2lvbiBjbG9zZXN0IHRvIHRoZSBpbnB1dCBwb3NpdGlvbiwg
c28KKyAgICAvLyB3ZSB3aWxsIGFsbG93IGRlc2NlbnQgZnJvbSBub24tZWR0aWFibGUgdG8gZWRp
dGFibGUgY29udGVudC4KKyAgICAvLyBGSVhNRTogVGhpcyBjb25zdHJhaW5pbmcgbXVzdCBiZSBk
b25lIGF0IGEgaGlnaGVyIGxldmVsIG9uY2Ugd2UgaW1wbGVtZW50IGNvbnRlbnRFZGl0YWJsZS4g
Rm9yIG5vdywgaWYgc29tZXRoaW5nCisgICAgLy8gaXMgZWRpdGFibGUsIHRoZSB3aG9sZSBkb2N1
bWVudCB3aWxsIGJlLgorICAgIGlmIChjaGlsZEVsZW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCkg
JiYgIWFuY2VzdG9yLT5lbGVtZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJl
dHVybiBjaGlsZC5wb3NpdGlvbkZvclBvaW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKKyNl
bmRpZgogCiAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaWxk
LCBkZXBlbmRpbmcgb24gaWYgdGhlIGNsaWNrIHdhcyB0byB0aGUgbG9naWNhbCBsZWZ0IG9yIGxv
Z2ljYWwgcmlnaHQgb2YgdGhlIGNoaWxkCiAgICAgTGF5b3V0VW5pdCBjaGlsZE1pZGRsZSA9IHBh
cmVudC5sb2dpY2FsV2lkdGhGb3JDaGlsZChjaGlsZCkgLyAyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAppbmRleCA4ZjYzODA2MGNlZGE3MGYyZjM5MjA5N2NmODJkODk4MjA1
Mjg3MDE5Li4wMmM4YWQxZTE0OGI1NDM5NjkzMmI0NGM2ZWMzY2I0MWMxMDM2MmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNDU4LDYgKzQ1OCw5IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZvaWQgc2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoaW50LCBMYXlv
dXRVbml0KTsKIAorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVu
ZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29uc3QgTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcyYpOworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExheW91dFVuaXQgcG9zaXRpb24sIGNv
bnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmKTsKKwogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UsIGJv
b2wgcmVjb21wdXRlRmxvYXRzID0gZmFsc2UpOwogICAgIHZvaWQgY2xlYXJMYXlvdXRPdmVyZmxv
dygpOwpAQCAtNTc4LDkgKzU4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFVuaXQmIGxh
c3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxh
c3RMb2dpY2FsUmlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25z
dCBQYWludEluZm8qKTsKICAgICBMYXlvdXRSZWN0IGJsb2NrU2VsZWN0aW9uR2FwKFJlbmRlckJs
b2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0
aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgICAgICBMYXlv
dXRVbml0IGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCBsYXN0TG9naWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIGNvbnN0IExv
Z2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQYWludEluZm8qKTsKLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ss
IExheW91dFVuaXQgcG9zaXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMm
KTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2VsZWN0aW9u
T2Zmc2V0Q2FjaGVzJik7Ci0gICAgCisKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2
aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zs
b3cKICAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dEZsb2F0aW5nT2JqZWN0cyhSZW5kZXJCbG9jayYs
IGNvbnN0IFBhaW50SW5mbyosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0U2l6ZSYp
IHsgfTsKICAgICBmcmllbmQgY2xhc3MgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNTZhMGQzYTliOGUzNTU0Mjcy
NGI5YjUwNDA0M2I2ZjcyNjE4MjhlNi4uYjE4YmUzNzIyYTFjNTEwZmI2ZGViZDlhNDA0NTA2NDk1
NDU2MTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTYyLDYg
KzYyLDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTU5Niw2ICs2
MDAsMTggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2Fs
SGVpZ2h0QnlNaW5NYXgoTGF5b3V0VW5pdCBsb2dpY2EKICAgICByZXR1cm4gc3RkOjptYXgobG9n
aWNhbEhlaWdodCwgY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KHN0eWxlVG9Vc2UubG9naWNh
bE1pbkhlaWdodCgpKSk7CiB9CiAKK1JvdW5kZWRSZWN0OjpSYWRpaSBSZW5kZXJCb3g6OmJvcmRl
clJhZGlpKCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OworICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVSZWN0KCk7CisKKyAgICB1bnNpZ25lZCBi
b3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCk7CisgICAgdW5zaWduZWQgYm9yZGVy
VG9wID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKKyAgICBib3VuZHMubW92ZUJ5KExheW91dFBv
aW50KGJvcmRlckxlZnQsIGJvcmRlclRvcCkpOworICAgIGJvdW5kcy5jb250cmFjdChib3JkZXJM
ZWZ0ICsgc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCBib3JkZXJUb3AgKyBzdHlsZS5ib3JkZXJC
b3R0b21XaWR0aCgpKTsKKyAgICByZXR1cm4gc3R5bGUuZ2V0Um91bmRlZEJvcmRlckZvcihib3Vu
ZHMpLnJhZGlpKCk7Cit9CisKIEludFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3go
KSBjb25zdAogewogICAgIC8vIFRoaXMgaXMgd3Jvbmcgd2l0aCB0cmFuc2Zvcm1zIGFuZCBmbGlw
cGVkIHdyaXRpbmcgbW9kZXMuCkBAIC0xMTU5LDYgKzExNzUsMTQgQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWkKICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lv
bihwYWludEluZm8ucmVuZGVyUmVnaW9uKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zm
c2V0KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjov
L3Byb2JsZW0vNjIwOTc2Mz4uIEZvcmNlIHRoZSBwYWludGluZyBib3VuZHMgb2YgY2hlY2tib3hl
cyBhbmQgcmFkaW8gY29udHJvbHMgdG8gYmUgc3F1YXJlLgorICAgIGlmIChzdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9Q
YXJ0KSB7CisgICAgICAgIGludCB3aWR0aCA9IHN0ZDo6bWluKHBhaW50UmVjdC53aWR0aCgpLCBw
YWludFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBpbnQgaGVpZ2h0ID0gd2lkdGg7CisgICAgICAg
IHBhaW50UmVjdCA9IEludFJlY3QocGFpbnRSZWN0LngoKSwgcGFpbnRSZWN0LnkoKSArICh0aGlz
LT5oZWlnaHQoKSAtIGhlaWdodCkgLyAyLCB3aWR0aCwgaGVpZ2h0KTsgLy8gVmVydGljYWxseSBj
ZW50ZXIgdGhlIGNoZWNrYm94LCBsaWtlIG9uIGRlc2t0b3AKKyAgICB9CisjZW5kaWYKICAgICBC
YWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UgPSBkZXRlcm1pbmVCYWNrZ3Jv
dW5kQmxlZWRBdm9pZGFuY2UocGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgLy8gRklYTUU6IFNo
b3VsZCBldmVudHVhbGx5IGdpdmUgdGhlIHRoZW1lIGNvbnRyb2wgb3ZlciB3aGV0aGVyIHRoZSBi
b3ggc2hhZG93IHNob3VsZCBwYWludCwgc2luY2UgY29udHJvbHMgY291bGQgaGF2ZQpAQCAtMjEw
OSw5ICsyMTMzLDE1IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhCiAgICAgcmVjdC5zZXRMb2Nh
dGlvbih0b3BMZWZ0KTsKICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAg
UmVuZGVyQm94KiBjb250YWluZXJCb3ggPSB0b1JlbmRlckJveChvKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIGlmICghY29udGFpbmVyQm94LT5sYXllcigpIHx8ICFjb250YWluZXJCb3gt
PmxheWVyKCktPmhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkgeworI2VuZGlmCiAgICAg
ICAgIGNvbnRhaW5lckJveC0+YXBwbHlDYWNoZWRDbGlwQW5kU2Nyb2xsT2Zmc2V0Rm9yUmVwYWlu
dChyZWN0KTsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgfSAKKyNlbmRpZgogICAgIH0KIAogICAgIGlm
IChjb250YWluZXJTa2lwcGVkKSB7CkBAIC0yODkxLDYgKzI5MjEsMzMgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoQXZhaWxhYmxlTG9naWNhbEhlaWdodFR5
cGUgaGVpZ2h0VHkKICAgICByZXR1cm4gY29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KGF2
YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKSwgaGVpZ2h0
VHlwZSkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGlubGluZSBpbnQgY3VzdG9t
Q29udGFpbmluZ0Jsb2NrV2lkdGgoY29uc3QgUmVuZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVy
Qm94JiBjb250YWluaW5nQmxvY2tCb3gpCit7CisgICAgcmV0dXJuIHZpZXcuZnJhbWVWaWV3KCku
Y3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS53aWR0aCgpIC0gY29udGFpbmluZ0Jsb2Nr
Qm94LmJvcmRlckxlZnQoKSAtIGNvbnRhaW5pbmdCbG9ja0JveC5ib3JkZXJSaWdodCgpIC0gY29u
dGFpbmluZ0Jsb2NrQm94LnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKK30KKworc3RhdGljIGlu
bGluZSBpbnQgY3VzdG9tQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KGNvbnN0IFJlbmRlclZpZXcmIHZp
ZXcsIGNvbnN0IFJlbmRlckJveCYgY29udGFpbmluZ0Jsb2NrQm94KQoreworICAgIHJldHVybiB2
aWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCkuaGVpZ2h0KCkg
LSBjb250YWluaW5nQmxvY2tCb3guYm9yZGVyVG9wKCkgLSBjb250YWluaW5nQmxvY2tCb3guYm9y
ZGVyQm90dG9tKCkgLSBjb250YWluaW5nQmxvY2tCb3guaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpOworfQorCitzdGF0aWMgaW50IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclZpZXcmIHZpZXcsIGNvbnN0IFJl
bmRlckJveCYgY29udGFpbmluZ0Jsb2NrQm94KQoreworICAgIHJldHVybiBzdHlsZS5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gY3VzdG9tQ29udGFpbmluZ0Jsb2NrV2lkdGgodmlldywgY29u
dGFpbmluZ0Jsb2NrQm94KSA6IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0hlaWdodCh2aWV3LCBjb250
YWluaW5nQmxvY2tCb3gpOworfQorCitzdGF0aWMgaW50IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJWaWV3JiB2
aWV3LCBjb25zdCBSZW5kZXJCb3gmIGNvbnRhaW5pbmdCbG9ja0JveCkKK3sKKyAgICByZXR1cm4g
c3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGN1c3RvbUNvbnRhaW5pbmdCbG9ja0hl
aWdodCh2aWV3LCBjb250YWluaW5nQmxvY2tCb3gpIDogY3VzdG9tQ29udGFpbmluZ0Jsb2NrV2lk
dGgodmlldywgY29udGFpbmluZ0Jsb2NrQm94KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3Vz
dG9tQ29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTG9naWNhbEhlaWdodChjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFJlbmRlclZpZXcmIHZpZXcpCit7CisgICAgcmV0dXJuIHN0eWxlLmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB2aWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9z
aXRpb25MYXlvdXRSZWN0KCkuaGVpZ2h0KCkgOiB2aWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVk
UG9zaXRpb25MYXlvdXRSZWN0KCkud2lkdGgoKTsKK30KKyNlbmRpZgorCiBMYXlvdXRVbml0IFJl
bmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaCwgQXZh
aWxhYmxlTG9naWNhbEhlaWdodFR5cGUgaGVpZ2h0VHlwZSkgY29uc3QKIHsKICAgICAvLyBXZSBu
ZWVkIHRvIHN0b3AgaGVyZSwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBpbmNyZWFzZSB0aGUgaGVp
Z2h0IG9mIHRoZSB0YWJsZQpAQCAtMjkwMyw5ICsyOTYwLDIxIEBAIExheW91dFVuaXQgUmVuZGVy
Qm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoLCBBdmFpbGFi
bGVMb2dpCiAgICAgfQogCiAgICAgaWYgKGguaXNQZXJjZW50KCkgJiYgaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Js
b2NrKCk7CisgICAgICAgIC8vIElmIHdlJ3JlIGZpeGVkLCBhbmQgb3VyIGNvbnRhaW5lciBpcyB0
aGUgUmVuZGVyVmlldywgdXNlIHRoZSBjdXN0b20gZml4ZWQgcG9zaXRpb24gcmVjdCBmb3Igc2l6
aW5nLgorICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlclZpZXcoKSkgeworICAg
ICAgICAgICAgUmVuZGVyVmlldyYgdmlldyA9IHRvUmVuZGVyVmlldygqY29udGFpbmluZ0Jsb2Nr
KTsKKyAgICAgICAgICAgIGlmICh2aWV3Lmhhc0N1c3RvbUZpeGVkUG9zaXRpb24oKnRoaXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJv
eFNpemluZyh2YWx1ZUZvckxlbmd0aChoLCBjdXN0b21Db250YWluaW5nQmxvY2tBdmFpbGFibGVM
b2dpY2FsSGVpZ2h0KGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKSwgdmlldykpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJveFNp
emluZyh2YWx1ZUZvckxlbmd0aChoLCBjb250YWluaW5nQmxvY2stPmF2YWlsYWJsZUxvZ2ljYWxI
ZWlnaHQoaGVpZ2h0VHlwZSkpKTsKKyNlbHNlCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdy
b25nIGlmIHRoZSBjb250YWluaW5nQmxvY2sgaGFzIGEgcGVycGVuZGljdWxhciB3cml0aW5nIG1v
ZGUuCiAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrKCkpOwogICAgICAgICBy
ZXR1cm4gYWRqdXN0Q29udGVudEJveExvZ2ljYWxIZWlnaHRGb3JCb3hTaXppbmcodmFsdWVGb3JM
ZW5ndGgoaCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisjZW5kaWYKICAgICB9CiAKICAgICBMYXlvdXRV
bml0IGhlaWdodEluY2x1ZGluZ1Njcm9sbGJhciA9IGNvbXB1dGVDb250ZW50QW5kU2Nyb2xsYmFy
TG9naWNhbEhlaWdodFVzaW5nKGgpOwpAQCAtMjk3MCw4ICszMDM5LDE1IEBAIExheW91dFVuaXQg
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0
IFJlbmRlckJveE1vCiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAg
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgICAgIGlmICghZmxvd1RocmVhZCkKKyAgICAgICAgaWYgKCFmbG93VGhyZWFk
KSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKHZpZXcoKS5oYXNDdXN0b21G
aXhlZFBvc2l0aW9uKCp0aGlzKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJveCYg
Y29udGFpbmluZ0Jsb2NrQm94ID0gdG9SZW5kZXJCb3goKmNvbnRhaW5pbmdCbG9jayk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aChjb250
YWluaW5nQmxvY2tCb3guc3R5bGUoKSwgJnZpZXcoKSwgY29udGFpbmluZ0Jsb2NrQm94KTsKKyAg
ICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94KGNvbnRh
aW5pbmdCbG9jayktPmNsaWVudExvZ2ljYWxXaWR0aCgpOworICAgICAgICB9CiAKICAgICAgICAg
aWYgKGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBzdHlsZSgp
LnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBjb250YWlu
aW5nQmxvY2stPnZpZXcoKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKQEAgLTMwMjcsNiArMzEwMywx
MCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZv
clBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TQogICAgICAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIDAsIGZhbHNlKTsK
IAogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzQm94KCkpIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIGlmICh2aWV3KCkuaGFzQ3VzdG9tRml4ZWRQb3NpdGlvbigqdGhpcykpCisgICAg
ICAgICAgICByZXR1cm4gY3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodChzdHlsZSgp
LCB2aWV3KCksIHRvUmVuZGVyQm94KCpjb250YWluaW5nQmxvY2spKTsKKyNlbmRpZgogICAgICAg
ICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGNvbnRhaW5pbmdCbG9jayk7
CiAgICAgICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2ItPmNsaWVudExvZ2ljYWxIZWlnaHQoKTsK
ICAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKTsKQEAgLTQ0NDksNyArNDUyOSwxMSBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6
bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQogICAgICAgICByZWN0LnVuaXRlKGxheW91dE92ZXJmbG93UmVjdCgpKTsKIAogICAgIGJvb2wg
aGFzVHJhbnNmb3JtID0gaGFzTGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgaWYgKGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IChoYXNUcmFuc2Zv
cm0gJiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLT5zaG91bGRUcmFuc2Zvcm1zQWZmZWN0T3ZlcmZs
b3coKSkpIHsKKyNlbHNlCiAgICAgaWYgKGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IGhhc1RyYW5z
Zm9ybSkgeworI2VuZGlmCiAgICAgICAgIC8vIElmIHdlIGFyZSByZWxhdGl2ZWx5IHBvc2l0aW9u
ZWQgb3IgaWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSwgdGhlbiB3ZSBoYXZlIHRvIGNvbnZlcnQKICAg
ICAgICAgLy8gdGhpcyByZWN0YW5nbGUgaW50byBwaHlzaWNhbCBjb29yZGluYXRlcywgYXBwbHkg
cmVsYXRpdmUgcG9zaXRpb25pbmcgYW5kIHRyYW5zZm9ybXMKICAgICAgICAgLy8gdG8gaXQsIGFu
ZCB0aGVuIGNvbnZlcnQgaXQgYmFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApp
bmRleCA1MDIwOWFjMjM3NGQxYjVhN2RkNmYwZjUzMWRjMWFiODZhMWM2YjBhLi4zNGE0OTQxZTJh
NGIyNzlmOGRjNTRlZjhhYmM0MjkwYTVjMWQ4ZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGljOgogICAgIEludFJlY3QgcGl4ZWxT
bmFwcGVkQm9yZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwg
bV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkU2l6ZSgpKTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBi
b3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHBpeGVsU25h
cHBlZEJvcmRlckJveFJlY3QoKTsgfQogCisgICAgUm91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJh
ZGlpKCkgY29uc3Q7CisKICAgICAvLyBUaGUgY29udGVudCBhcmVhIG9mIHRoZSBib3ggKGV4Y2x1
ZGVzIHBhZGRpbmcgLSBhbmQgaW50cmluc2ljIHBhZGRpbmcgZm9yIHRhYmxlIGNlbGxzLCBldGMu
Li4gLSBhbmQgYm9yZGVyKS4KICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkgY29uc3Qg
eyByZXR1cm4gTGF5b3V0UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJU
b3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQoKSk7IH0K
ICAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5z
Zm9ybXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAppbmRleCBjZWY3NDNmYTdhM2MzZWNlMDVkMjllMzcwMTNlMDVjYTJmYWU1YTJjLi5l
ZDNkZmZkMDcwNjQwZWIzMzNlNDI5NzRkNzYwN2ExMTM0NWJlNDQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQzMiw3ICs0
MzIsMTEgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c3RpY2t5UG9zaXRpb25P
ZmZzZXQoKSBjb25zdAogICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9p
bnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBj
b25zdHJhaW5pbmdSZWN0LnNldExvY2F0aW9uKHNjcm9sbE9mZnNldCk7CiAgICAgfSBlbHNlIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gdmll
dygpLmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCk7CisjZWxzZQog
ICAgICAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IHZpZXcoKS5mcmFtZVZpZXcoKS52aWV3
cG9ydENvbnN0cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKICAgICAgICAgZmxv
YXQgc2NhbGUgPSB2aWV3KCkuZnJhbWVWaWV3KCkuZnJhbWUoKS5mcmFtZVNjYWxlRmFjdG9yKCk7
CiAgICAgICAgIHZpZXdwb3J0UmVjdC5zY2FsZSgxIC8gc2NhbGUpOwogICAgICAgICBjb25zdHJh
aW5pbmdSZWN0ID0gdmlld3BvcnRSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QnV0dG9uLmNwcAppbmRleCA1NzIyZjFjY2I3ODliN2I2N2JhNzJkYTRhYTg0YjE3MDE5ZGY5YjE4
Li5kZjMxYzI2YzUwNWMxY2E2ZDM0NGRiYTQ2YmQ0OGI2ZmE4ODFmMmRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMjksNiArMjksMTAgQEAKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJlbmRlclRoZW1lSU9TLmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMTky
LDQgKzE5NiwxNCBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6dGltZXJGaXJlZChUaW1lcjxSZW5kZXJC
dXR0b24+KikKICAgICByZXBhaW50KCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJl
bmRlckJ1dHRvbjo6bGF5b3V0KCkKK3sKKyAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmlu
ZyBsYXlvdXQuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4uCisgICAgUmVuZGVyVGhlbWVJ
T1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxlKCksIHRoaXMpOworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcAppbmRleCBjOWVjYjlmMDY0ZmU4OTA5YzJmZWEyM2E3ODlmM2Q3M2E5Mzg5ZjVi
Li41ZTU2OTU4YjI5YzdiZTQ1ZjM0MjhkZGMwZTU4ODgwMGVmYWU5Y2Y0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC04NDYsNiArODQ2LDEwIEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbmV3CiAgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKICAg
ICAgICAgICAgIGRvY3VtZW50KCkuc2V0QW5ub3RhdGVkUmVnaW9uc0RpcnR5KHRydWUpOwogI2Vu
ZGlmCisjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgICAgICBp
ZiAodmlzaWJpbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBkb2N1bWVudCgpLmRpcnR5VG91Y2hF
dmVudFJlY3RzKCk7CisjZW5kaWYKICAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkKSB7CiAg
ICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQo
cGFyZW50KCkpOwpAQCAtOTIzLDYgKzkyNyw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6c3R5bGVX
aWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3CiAg
ICAgfQogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBib29sIGFyZU5vbklkZW50aWNh
bEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKQogewogICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKQEAgLTkz
Myw2ICs5MzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKIHsKICAgICByZXR1cm4gYS0+Y3Vy
c29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwg
YXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7CiB9CisjZW5kaWYKIAogdm9p
ZCBSZW5kZXJFbGVtZW50OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewpAQCAtOTcyLDggKzk3OCwxMCBAQCB2b2lkIFJl
bmRlckVsZW1lbnQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkUwogICAgIC8vIERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdl
IG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgbGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5
IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtub3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRT
dHlsZSgpKS4KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG9sZFN0eWxlICYmICFhcmVD
dXJzb3JzRXF1YWwob2xkU3R5bGUsICZzdHlsZSgpKSkKICAgICAgICAgZnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5zY2hlZHVsZUN1cnNvclVwZGF0ZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVy
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBiMjc0NjgzODYwZWIzYTU4NGE5ZDMy
YjZiM2U3MDFiYTU5NGEwOGQxLi4yYTlkYmU1ODhkOTFiZjNjNjIyMWI3NWMwOWJjYTk5ZWFjM2Uw
NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKQEAgLTEzNCwxMCArMTM0LDE2IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OnJlcXVpcmVzTGF5ZXIoKSBjb25zdAogCiBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjphbGxv
d3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gVGhlIHRpbWluZyBvZiBsYXllciBjcmVhdGlvbiBpcyBkaWZmZXJlbnQgb24gdGhlIHBo
b25lLCBzaW5jZSB0aGUgcGx1Z2luIGNhbiBvbmx5IGJlIG1hbmlwdWxhdGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgorICAgIHJldHVybiB3aWRnZXQoKSAmJiB3aWRnZXQoKS0+aXNQbHVnaW5WaWV3
QmFzZSgpICYmIHRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0KCkpLT53aWxsUHJvdmlkZVBsdWdpbkxh
eWVyKCk7CisjZWxzZQogICAgIHJldHVybiB3aWRnZXQoKSAmJiB3aWRnZXQoKS0+aXNQbHVnaW5W
aWV3QmFzZSgpICYmIHRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0KCkpLT5wbGF0Zm9ybUxheWVyKCk7
CisjZW5kaWYKIH0KICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBTdHJpbmcg
dW5hdmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQoUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBs
dWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKQogewog
ICAgIHN3aXRjaCAocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIHsKQEAgLTE1NCw2ICsxNjAs
NyBAQCBzdGF0aWMgU3RyaW5nIHVuYXZhaWxhYmxlUGx1Z2luUmVwbGFjZW1lbnRUZXh0KFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgYm9vbCBzaG91bGRVbmF2
YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlckVt
YmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbikKIHsKQEAgLTE2MywxMSArMTcwLDE5IEBAIHN0YXRpYyBib29sIHNob3VsZFVu
YXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVy
RW1iCiAKIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFBsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uKFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVh
c29uKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0ocGx1Z2luVW5hdmFp
bGFiaWxpdHlSZWFzb24pOworI2Vsc2UKICAgICBzZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bldpdGhEZXNjcmlwdGlvbihwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgdW5hdmFpbGFibGVQ
bHVnaW5SZXBsYWNlbWVudFRleHQocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKTsKKyNlbmRp
ZgogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRQbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbldpdGhEZXNjcmlwdGlvbihQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5V
bmF2YWlsYWJpbGl0eVJlYXNvbiwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29u
KTsKKyAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRpb24pOworI2Vsc2UKICAgICBBU1NFUlQoIW1f
aXNQbHVnaW5VbmF2YWlsYWJsZSk7CiAgICAgbV9pc1BsdWdpblVuYXZhaWxhYmxlID0gdHJ1ZTsK
ICAgICBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID0gcGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb247CkBAIC0xNzYsNiArMTkxLDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2V0
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25XaXRoRGVzY3JpcHRpb24oUGx1Z2luVW4KICAgICAg
ICAgbV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCA9IHVuYXZhaWxhYmxlUGx1Z2lu
UmVwbGFjZW1lbnRUZXh0KHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fdW5hdmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQgPSBkZXNjcmlwdGlvbjsK
KyNlbmRpZgogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRVbmF2YWlsYWJsZVBs
dWdpbkluZGljYXRvcklzUHJlc3NlZChib29sIHByZXNzZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAppbmRleCAxOWU5ZWEz
ZWQ1YmRmN2M1NzkwMjJiYWVlOWJjYzU3MmJiMWYwOGMxLi4yMDdkZjI1N2YyZGVjYTU5ZWQ5MmY4
MDcyZmMxMGVlNTMxNzA2NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKQEAgLTM3LDE1ICszNywyNSBAQAogI2luY2x1
ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgPG1hdGguaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGNvbnN0IGludCBhZnRl
ckJ1dHRvblNwYWNpbmcgPSA0OworI2lmICFQTEFURk9STShJT1MpCiBjb25zdCBpbnQgaWNvbkhl
aWdodCA9IDE2OwogY29uc3QgaW50IGljb25XaWR0aCA9IDE2OwogY29uc3QgaW50IGljb25GaWxl
bmFtZVNwYWNpbmcgPSAyOwogY29uc3QgaW50IGRlZmF1bHRXaWR0aE51bUNoYXJzID0gMzQ7Cisj
ZWxzZQorLy8gT24gaU9TIHRoZSBpY29uIGhlaWdodCBtYXRjaGVzIHRoZSBidXR0b24gaGVpZ2h0
LCB0byBtYXhpbWl6ZSB0aGUgaWNvbiBzaXplLgorY29uc3QgaW50IGljb25GaWxlbmFtZVNwYWNp
bmcgPSBhZnRlckJ1dHRvblNwYWNpbmc7Citjb25zdCBpbnQgZGVmYXVsdFdpZHRoTnVtQ2hhcnMg
PSAzODsKKyNlbmRpZgogY29uc3QgaW50IGJ1dHRvblNoYWRvd0hlaWdodCA9IDI7CiAKIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbChIVE1MSW5wdXRFbGVt
ZW50JiBpbnB1dCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCkBAIC05Myw4ICsxMDMsMTgg
QEAgc3RhdGljIGludCBub2RlV2lkdGgoTm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUgJiYg
bm9kZS0+cmVuZGVyQm94KCkpID8gbm9kZS0+cmVuZGVyQm94KCktPnBpeGVsU25hcHBlZFdpZHRo
KCkgOiAwOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGludCBub2RlSGVpZ2h0KE5v
ZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIChub2RlICYmIG5vZGUtPnJlbmRlckJveCgpKSA/IG5v
ZGUtPnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRIZWlnaHQoKSA6IDA7Cit9CisjZW5kaWYKKwog
aW50IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFtZVdpZHRoKCkgY29uc3QKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgaW50IGljb25XaWR0aCA9IG5vZGVIZWlnaHQodXBsb2Fk
QnV0dG9uKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIGNvbnRlbnRCb3hSZWN0
KCkucGl4ZWxTbmFwcGVkV2lkdGgoKSAtIG5vZGVXaWR0aCh1cGxvYWRCdXR0b24oKSkgLSBhZnRl
ckJ1dHRvblNwYWNpbmcKICAgICAgICAgLSAoaW5wdXRFbGVtZW50KCkuaWNvbigpID8gaWNvbldp
ZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDApKTsKIH0KQEAgLTEyMSw2ICsxNDEsMTAgQEAg
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCBkaXNwbGF5ZWRGaWxlbmFtZSwgc3R5bGUoKSwgVGV4dFJ1
bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJl
Y3Rpb25PdmVycmlkZSk7CiAgICAgICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaW50IGljb25IZWlnaHQgPSBub2RlSGVpZ2h0
KHVwbG9hZEJ1dHRvbigpKTsKKyAgICAgICAgaW50IGljb25XaWR0aCA9IGljb25IZWlnaHQ7Cisj
ZW5kaWYKICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUg
cGxhY2VkCiAgICAgICAgIExheW91dFVuaXQgY29udGVudExlZnQgPSBwYWludE9mZnNldC54KCkg
KyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBidXR0b24gPSB1cGxvYWRCdXR0b24oKTsKQEAgLTE1OCw4ICsxODIsMTcgQEAgdm9pZCBSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW4KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpY29uWCA9
IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBidXR0b25XaWR0aCAtIGFmdGVyQnV0dG9u
U3BhY2luZyAtIGljb25XaWR0aDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIGlm
IChSZW5kZXJCdXR0b24qIGJ1dHRvblJlbmRlcmVyID0gdG9SZW5kZXJCdXR0b24oYnV0dG9uLT5y
ZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbiBhbmQg
ZGVjb3JhdGlvbnMuCisgICAgICAgICAgICAgICAgSW50UmVjdCBpY29uUmVjdChpY29uWCwgaWNv
blksIGljb25XaWR0aCwgaWNvbkhlaWdodCk7CisgICAgICAgICAgICAgICAgUmVuZGVyVGhlbWU6
OkZpbGVVcGxvYWREZWNvcmF0aW9ucyBkZWNvcmF0aW9uc1R5cGUgPSBpbnB1dEVsZW1lbnQoKS5m
aWxlcygpLT5sZW5ndGgoKSA9PSAxID8gUmVuZGVyVGhlbWU6OlNpbmdsZUZpbGUgOiBSZW5kZXJU
aGVtZTo6TXVsdGlwbGVGaWxlczsKKyAgICAgICAgICAgICAgICB0aGVtZSgpLT5wYWludEZpbGVV
cGxvYWRJY29uRGVjb3JhdGlvbnModGhpcywgYnV0dG9uUmVuZGVyZXIsIHBhaW50SW5mbywgaWNv
blJlY3QsIGlucHV0RWxlbWVudCgpLmljb24oKSwgZGVjb3JhdGlvbnNUeXBlKTsKKyAgICAgICAg
ICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24KICAgICAgICAg
ICAgIGlucHV0RWxlbWVudCgpLmljb24oKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJl
Y3Qocm91bmRUb0ludChpY29uWCksIHJvdW5kVG9JbnQoaWNvblkpLCBpY29uV2lkdGgsIGljb25I
ZWlnaHQpKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogCkBAIC0yNDEsNiArMjc0LDEwIEBA
IFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0dG9uVmFsdWUoKQogU3RyaW5nIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4dFZhbHVlKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChp
bnB1dEVsZW1lbnQoKS5maWxlcygpLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZ1Ry
dW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShpbnB1dEVsZW1lbnQoKS5kaXNwbGF5U3RyaW5nKCksIG1h
eEZpbGVuYW1lV2lkdGgoKSwgc3R5bGUoKS5mb250KCksIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxl
Um91bmRpbmdIYWNrcyk7CisjZW5kaWYKICAgICByZXR1cm4gdGhlbWUoKS0+ZmlsZUxpc3ROYW1l
Rm9yV2lkdGgoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSwgc3R5bGUoKS5mb250KCksIG1heEZpbGVu
YW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCkubXVsdGlwbGUoKSk7CiB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAppbmRleCAxY2YwNzE5NTc3NDM5
MDY4M2ViNjU4MzRjNjFmYWY5ZTcxNDUzMTNlLi40MTYzOTJmNTkxNzI1NWM0N2I0OTM3MzgwY2Iw
MTE0NWY0MjIwMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAKQEAgLTUxNCw3ICs1MTQsMTIgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25G
cmFtZXMoKQogICAgICAgICAgICAgaWYgKHdpZHRoICE9IGNoaWxkLT53aWR0aCgpIHx8IGhlaWdo
dCAhPSBjaGlsZC0+aGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0V2lkdGgo
d2lkdGgpOwogICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRIZWlnaHQoaGVpZ2h0KTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgaU9TLXNwZWNp
ZmljPworICAgICAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OworI2Vsc2UKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoKTsKKyNlbmRp
ZgogICAgICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKICAgICAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5oCmluZGV4IGVhODU5NjRiMzBiMTRkNmMw
NmQxYjEwOTFjZDM3MTIxNzQzZTYwNjQuLmFlMTQzNjgwOTAwZjE5NTQ3MGM5ZmQ4NjE3ZjcwYjVj
NDExOWZlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJh
bWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmgKQEAgLTU0
LDcgKzU0LDEyIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJJRnJhbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gRklYTUU6IERvIHdlIHN0aWxsIG5lZWQgdGhpcyB3b3JrYXJvdW5kIHRvIGF2b2lkIGJy
ZWFraW5nIGxheW91dCB0ZXN0cz8KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyUGFydE9iamVjdCI7IH0KKyNlbHNlCiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gIlJlbmRlcklGcmFtZSI7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVz
TGF5ZXIoKSBjb25zdCBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKaW5kZXggYjJlZTMxN2E1ODk4OWJkNTkwNjVmYzU2Njg4YmJiMmUyMDZjOTVmMy4u
NzliNTY4N2MyMmVkZThkMGYwOGQ0N2NhNzQwYTAwN2JlYTA5NDMxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC00Nyw4ICs0Nyw3MSBAQAogI2luY2x1ZGUg
IlNWR0ltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgiCisjaW5jbHVk
ZSAiU2VsZWN0aW9uUmVjdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgYmVoYXZlIGNvcnJlY3RseSBm
b3IgZmxvYXRpbmcgb3IgcG9zaXRpb25lZCBpbWFnZXMsIGJ1dCBXZWJDb3JlIGRvZXNuJ3QgaGFu
ZGxlIHRob3NlIHdlbGwKKy8vIGR1cmluZyBzZWxlY3Rpb24gY3JlYXRpb24geWV0IGFueXdheS4K
Ky8vIEZJWE1FOiBXZSBjYW4ndCB0ZWxsIHdoZXRoZXIgb3Igbm90IHdlIGNvbnRhaW4gdGhlIHN0
YXJ0IG9yIGVuZCBvZiB0aGUgc2VsZWN0ZWQgUmFuZ2UgdXNpbmcgb25seSB0aGUgb2Zmc2V0cwor
Ly8gb2YgdGhlIHN0YXJ0IGFuZCBlbmQsIHdlIG5lZWQgdG8ga25vdyB0aGUgd2hvbGUgUG9zaXRp
b24uCit2b2lkIFJlbmRlckltYWdlOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVj
dGlvblJlY3Q+JiByZWN0cywgdW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFJlbmRlckJsb2Nr
KiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKworICAgIEludFJl
Y3QgaW1hZ2VSZWN0OworICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcGFj
a2FnZSBsaW5lIGJvdW5kcyBpbnRvIFNlbGVjdGlvblJlY3RzLiBXZSBzaG91bGQgZmluZAorICAg
IC8vIHRoZSByaWdodCBhbmQgbGVmdCBleHRlbnQgb2YgdGhlIHNlbGVjdGlvbiBvbmNlIGZvciB0
aGUgZW50aXJlIHNlbGVjdGVkIFJhbmdlLCBwZXJoYXBzCisgICAgLy8gdXNpbmcgdGhlIFJhbmdl
J3MgY29tbW9uIGFuY2VzdG9yLgorICAgIEludFJlY3QgbGluZUV4dGVudFJlY3Q7CisgICAgYm9v
bCBpc0ZpcnN0T25MaW5lID0gZmFsc2U7CisgICAgYm9vbCBpc0xhc3RPbkxpbmUgPSBmYWxzZTsK
KworICAgIElubGluZUJveCogaW5saW5lQm94ID0gaW5saW5lQm94V3JhcHBlcigpOworICAgIGlm
ICghaW5saW5lQm94KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBibG9jayBpbWFnZS4KKyAgICAg
ICAgaW1hZ2VSZWN0ID0gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAg
IGlzRmlyc3RPbkxpbmUgPSB0cnVlOworICAgICAgICBpc0xhc3RPbkxpbmUgPSB0cnVlOworICAg
ICAgICBsaW5lRXh0ZW50UmVjdCA9IGltYWdlUmVjdDsKKyAgICAgICAgaWYgKGNvbnRhaW5pbmdC
bG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICAgICAgbGluZUV4dGVu
dFJlY3Quc2V0WChjb250YWluaW5nQmxvY2stPngoKSk7CisgICAgICAgICAgICBsaW5lRXh0ZW50
UmVjdC5zZXRXaWR0aChjb250YWluaW5nQmxvY2stPndpZHRoKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbGluZUV4dGVudFJlY3Quc2V0WShjb250YWluaW5nQmxvY2stPnkoKSk7
CisgICAgICAgICAgICBsaW5lRXh0ZW50UmVjdC5zZXRIZWlnaHQoY29udGFpbmluZ0Jsb2NrLT5o
ZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBMYXlvdXRVbml0IHNl
bGVjdGlvblRvcCA9ICFjb250YWluaW5nQmxvY2stPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSA/IGlubGluZUJveC0+cm9vdCgpLnNlbGVjdGlvblRvcCgpIC0gbG9naWNhbFRv
cCgpIDogbG9naWNhbEJvdHRvbSgpIC0gaW5saW5lQm94LT5yb290KCkuc2VsZWN0aW9uQm90dG9t
KCk7CisgICAgICAgIGltYWdlUmVjdCA9IEludFJlY3QoMCwgIHNlbGVjdGlvblRvcCwgbG9naWNh
bFdpZHRoKCksIGlubGluZUJveC0+cm9vdCgpLnNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICAgICAg
aXNGaXJzdE9uTGluZSA9ICFpbmxpbmVCb3gtPnByZXZpb3VzT25MaW5lRXhpc3RzKCk7CisgICAg
ICAgIGlzTGFzdE9uTGluZSA9ICFpbmxpbmVCb3gtPm5leHRPbkxpbmVFeGlzdHMoKTsKKyAgICAg
ICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBjYWNoZSgqY29udGFpbmluZ0Jsb2NrKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T2Zmc2V0ID0gY29udGFpbmluZ0Jsb2NrLT5sb2dpY2Fs
TGVmdFNlbGVjdGlvbk9mZnNldCgqY29udGFpbmluZ0Jsb2NrLCBpbmxpbmVCb3gtPmxvZ2ljYWxU
b3AoKSwgY2FjaGUpOworICAgICAgICBMYXlvdXRVbml0IHJpZ2h0T2Zmc2V0ID0gY29udGFpbmlu
Z0Jsb2NrLT5sb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoKmNvbnRhaW5pbmdCbG9jaywgaW5s
aW5lQm94LT5sb2dpY2FsVG9wKCksIGNhY2hlKTsKKyAgICAgICAgbGluZUV4dGVudFJlY3QgPSBJ
bnRSZWN0KGxlZnRPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbWFnZVJlY3QueSgpLCByaWdodE9m
ZnNldCAtIGxlZnRPZmZzZXQsIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICghaW5s
aW5lQm94LT5pc0hvcml6b250YWwoKSkgeworICAgICAgICAgICAgaW1hZ2VSZWN0ID0gaW1hZ2VS
ZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAgICAgICAgICBsaW5lRXh0ZW50UmVjdCA9IGxpbmVF
eHRlbnRSZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29s
IGlzRml4ZWQgPSBmYWxzZTsKKyAgICBJbnRSZWN0IGFic29sdXRlQm91bmRzID0gbG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QoaW1hZ2VSZWN0KSwgZmFsc2UsICZpc0ZpeGVkKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworICAgIEludFJlY3QgbGluZUV4dGVudEJvdW5kcyA9IGxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxpbmVFeHRlbnRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKyAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKKyAgICAgICAgbGluZUV4dGVudEJvdW5kcyA9IGxpbmVFeHRlbnRCb3VuZHMudHJhbnNwb3Nl
ZFJlY3QoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVyIG1ha2lu
ZyBTZWxlY3Rpb25SZWN0IGEgc3RydWN0IG9yIGJldHRlciBvcmdhbml6ZSBpdHMgb3B0aW9uYWwg
ZmllbGRzIGludG8KKyAgICAvLyBhbiBhdXhpbGlhcnkgc3RydWN0IHRvIHNpbXBsaWZ5IGl0cyBp
bml0aWFsaXphdGlvbi4KKyAgICByZWN0cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChhYnNvbHV0ZUJv
dW5kcywgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmRpcmVjdGlvbigpLCBsaW5lRXh0ZW50Qm91
bmRzLngoKSwgbGluZUV4dGVudEJvdW5kcy5tYXhYKCksIGxpbmVFeHRlbnRCb3VuZHMubWF4WSgp
LCAwLCBmYWxzZSAvKiBsaW5lIGJyZWFrICovLCBpc0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxpbmUs
IGZhbHNlIC8qIGNvbnRhaW5zIHN0YXJ0ICovLCBmYWxzZSAvKiBjb250YWlucyBlbmQgKi8sIGNv
bnRhaW5pbmdCbG9jay0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBpc0ZpeGVk
LCBmYWxzZSAvKiBydWJ5IHRleHQgKi8sIGNvbHVtbk51bWJlckZvck9mZnNldChhYnNvbHV0ZUJv
dW5kcy54KCkpKSk7Cit9CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
UmVuZGVySW1hZ2U6OlJlbmRlckltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVy
U3R5bGU+IHN0eWxlKQpAQCAtNDYyLDYgKzUyNSw5IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgCiB2b2lkIFJlbmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50SW5m
byYgcGFpbnRJbmZvKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0ocGFp
bnRJbmZvKTsKKyNlbHNlCiAgICAgaWYgKGRvY3VtZW50KCkucHJpbnRpbmcoKSB8fCAhZnJhbWUo
KS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IApAQCAtNDkzLDYgKzU1OSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50QXJlYUVsZW1lbnRG
b2N1c1JpbmcoUGFpbnRJbmZvJiBwYWludEluZm8pCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRy
YXdGb2N1c1JpbmcocGF0aCwgb3V0bGluZVdpZHRoLAogICAgICAgICBhcmVhRWxlbWVudFN0eWxl
LT5vdXRsaW5lT2Zmc2V0KCksCiAgICAgICAgIGFyZWFFbGVtZW50U3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikpOworI2VuZGlmCiB9CiAKIHZvaWQg
UmVuZGVySW1hZ2U6OmFyZWFFbGVtZW50Rm9jdXNDaGFuZ2VkKEhUTUxBcmVhRWxlbWVudCogZWxl
bWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKaW5kZXggYzIzYTI2OTFl
MzBmODhjZGRkOGY0YzRjYWVmNWNjMzJkMmM3YjU4NC4uODRkZmM5MGFmMjJmNGM0YWVmNTg0ZmRl
YTQzZmNhNzc2NjY1ZjgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgK
QEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFyZWFFbGVtZW50Rm9jdXNDaGFu
Z2VkKEhUTUxBcmVhRWxlbWVudCopOwogCiAgICAgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1l
ckZpcmVkKFRpbWVyPFJlbmRlckltYWdlPiopOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2aXJ0dWFsIHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0
PiYsIHVuc2lnbmVkLCB1bnNpZ25lZCkgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIHZvaWQgc2V0
SXNHZW5lcmF0ZWRDb250ZW50KGJvb2wgZ2VuZXJhdGVkID0gdHJ1ZSkgeyBtX2lzR2VuZXJhdGVk
Q29udGVudCA9IGdlbmVyYXRlZDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCmluZGV4IDI5YzViNzM5YjQ0Mjc2NmViM2M2ODAzYWMwNzdkMDZhNjQzNGQ0YmQu
LjY2OTUxZTdlNzFiNGRiMDFkMjRkNWFkNDdiNDFmNjJhYTQ4MWQ2Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC02OTcsNiArNjk3LDE0IEBAIHZvaWQg
UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CiAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVRdWFkcyhx
dWFkcywgd2FzRml4ZWQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZW5kZXJJbmxp
bmU6OmFic29sdXRlUXVhZHNGb3JTZWxlY3Rpb24oVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKSBj
b25zdAoreworICAgIEFic29sdXRlUXVhZHNHZW5lcmF0b3JDb250ZXh0IGNvbnRleHQodGhpcywg
cXVhZHMpOworICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKGNvbnRleHQpOworfQorI2VuZGlmCisK
IExheW91dFVuaXQgUmVuZGVySW5saW5lOjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsKICAgICBMYXlv
dXRQb2ludCB0b3BMZWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCmlu
ZGV4IDdkODc4MTZjZjQyNDM1MzBkMzNjOTM1Yzc2YjI2MWQ2OTkzMjQ0NTEuLjYzZDFjZWRkOGEw
ZTNjMWE4NmVkZWMzMWE2MzYwOWE5MGI2ZWEzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmgKQEAgLTY4LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICBJbmxpbmVCb3gq
IGZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKSBjb25zdCB7IHJldHVybiBhbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSA/IGZpcnN0TGluZUJveCgpIDogY3VsbGVkSW5saW5lRmlyc3RMaW5lQm94
KCk7IH0KICAgICBJbmxpbmVCb3gqIGxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIGNvbnN0
IHsgcmV0dXJuIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpID8gbGFzdExpbmVCb3goKSA6IGN1bGxl
ZElubGluZUxhc3RMaW5lQm94KCk7IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVRdWFkc0ZvclNlbGVjdGlvbihWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMp
IGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKICAgICB2aXJ0dWFsIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiB2aXJ0dWFsQ29udGludWF0aW9uKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4g
Y29udGludWF0aW9uKCk7IH0KICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUVsZW1lbnRDb250aW51
YXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggMTZhOTZiYmUyZWQ3ZmMzNzYwYzA2YTk2NjA0MDQxNDQxMGE2YTVkMy4uNzQ5MTkwODNl
N2JkNTg3ZDZhNjQ3MTllOGRkOWNjYzgyMTU0MzJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xODIsNiArMTgyLDEyIEBAIFJlbmRlckxheWVyOjpSZW5k
ZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3Qp
CiAgICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oTm9JbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uKQogICAgICwgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbihO
b05vdENvbXBvc2l0ZWRSZWFzb24pCiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgLCBt
X2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJl
ZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQorICAgICwgbV9pblVzZXJT
Y3JvbGwoZmFsc2UpCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsQm91bmRzT3JpZ2luVXBkYXRlKGZh
bHNlKQorI2VuZGlmCiAgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxz
ZSkKICAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRApAQCAtMjM3LDYgKzI0Myw5IEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQog
ICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRo
aXMpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpLmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKICAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBy
ZW5kZXJlcigpLmVsZW1lbnQoKSkKICAgICAgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJT
Y3JvbGxPZmZzZXQobV9zY3JvbGxPZmZzZXQpOwogICAgIH0KQEAgLTE3NjcsNiArMTc3NiwxNCBA
QCB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlcgogICAgIH0KIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgUmVuZGVyTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgaWYgKFJlbmRlckxh
eWVyQmFja2luZyogbGF5ZXJCYWNraW5nID0gYmFja2luZygpKQorICAgICAgICBsYXllckJhY2tp
bmctPmxheWVyV2lsbEJlRGVzdHJveWVkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJMYXll
cjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQp
CiB7CiAgICAgUmVuZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTIwODQsNiArMjEwMSw1
NSBAQCB2b2lkIFJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllciwgTGF5b3V0UgogICAgIHJlY3QubW92ZSgtZGVsdGEueCgpLCAt
ZGVsdGEueSgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhh
c0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSBjb25zdAoreworI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5ncygpOworCisgICAgLy8gRklYTUU6IHNldHRpbmdzIHNo
b3VsZCBub3QgYmUgbnVsbCBhdCB0aGlzIHBvaW50LiBJZiB5b3UgZmluZCBhIHJlbGlhYmxlIHdh
eSB0byBoaXQgdGhpcyBhc3NlcnRpb24sIHBsZWFzZSBmaWxlIGEgYnVnLgorICAgIC8vIFNlZSA8
cmRhcjovL3Byb2JsZW0vMTAyNjYxMDE+LgorICAgIEFTU0VSVChzZXR0aW5ncyk7CisKKyAgICBy
ZXR1cm4gcmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCAo
c2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwo
KSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxl
cmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2Yg
V2ViS2l0LgorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hF
dmVudCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCit2
b2lkIFJlbmRlckxheWVyOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRMaXN0ZW5lcihyZW5kZXJlcigpLmVs
ZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkg
fHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudExp
c3RlbmVyKHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogYm9vbCBSZW5kZXJMYXll
cjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdApAQCAtMjEwNyw5ICsyMTczLDExIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpCiAgICAg
ICAgICAgICAmJiBjYW5CZVN0YWNraW5nQ29udGFpbmVyKCkKICAgICAgICAgICAgICYmICFoYXNP
dXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudCgpOwogCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
X09WRVJGTE9XX1NDUk9MTElORykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQUNDRUxF
UkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQogICAgICAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9s
bGluZyA9IGZvcmNlVXNlQ29tcG9zaXRlZFNjcm9sbGluZyB8fCByZW5kZXJlcigpLnN0eWxlKCku
dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpOwogI2Vsc2UKKyAgICAgICAgLy8gT24gaU9TIHdl
IGRvbid0IHdhbnQgdG8gb3B0IGludG8gYWNjZWxlcmF0ZWQgY29tcG9zaXRlZCBzY3JvbGxpbmcs
IHdoaWNoIGNyZWF0ZXMgc2Nyb2xsIGJhcgorICAgICAgICAvLyBsYXllcnMgaW4gV2ViQ29yZSwg
YmVjYXVzZSB3ZSB1c2UgVUlLaXQgdG8gY29tcG9zaXRlIG91ciBzY3JvbGwgYmFycy4KICAgICAg
ICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBmb3JjZVVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmc7CiAjZW5kaWYKICAgICAgICAgLy8gV2UgZ2F0aGVyIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdXNl
IHdpdGggR29vZ2xlIFVNQSBoaXN0b2dyYW1zIHRvCkBAIC0yMjQxLDYgKzIzMDksMTcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQogICAgICAgICAvLyBFbnN1cmUg
dGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAo
Zm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgogICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCiAgICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
KSB7CisgICAgICAgICAgICBpbnQgbWF4WCA9IHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVudFdp
ZHRoKCk7CisgICAgICAgICAgICBpZiAoeCA+IG1heFggLSBjYXJldFdpZHRoKSB7CisgICAgICAg
ICAgICAgICAgeCArPSBjYXJldFdpZHRoOworICAgICAgICAgICAgICAgIGlmICh4IDw9IGNhcmV0
V2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlm
ICh4IDwgbV9zY3JvbGxPZmZzZXQud2lkdGgoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAg
ICAgeCAtPSBjYXJldFdpZHRoOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
Ly8gRklYTUU6IEV2ZW50dWFsbHksIHdlIHdpbGwgd2FudCB0byBwZXJmb3JtIGEgYmxpdC4gIEZv
ciBub3cgbmV2ZXIKQEAgLTIyNDksOCArMjMyOCwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUbyhpbnQgeCwgaW50IHkpCiAgICAgLy8gaXMgZWl0aGVyIG9jY2x1ZGVkIGJ5IGFub3RoZXIg
bGF5ZXIgb3IgY2xpcHBlZCBieSBhbiBlbmNsb3NpbmcKICAgICAvLyBsYXllciBvciBjb250YWlu
cyBmaXhlZCBiYWNrZ3JvdW5kcywgZXRjLikuCiAgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQg
PSBJbnRTaXplKHggLSBzY3JvbGxPcmlnaW4oKS54KCksIHkgLSBzY3JvbGxPcmlnaW4oKS55KCkp
OwotICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBuZXdTY3JvbGxPZmZzZXQpCisgICAgaWYgKG1f
c2Nyb2xsT2Zmc2V0ID09IG5ld1Njcm9sbE9mZnNldCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgaWYgKG1fcmVxdWlyZXNTY3JvbGxCb3VuZHNPcmlnaW5VcGRhdGUpCisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisjZW5kaWYKICAgICAgICAg
cmV0dXJuOworfQogICAgIG1fc2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0OwogCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Nyb2xsTGF5ZXIoJnJlbmRlcmVyKCkuZnJh
bWUoKSk7CkBAIC0yMjc2LDYgKzIzNjAsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8o
aW50IHgsIGludCB5KQogICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KICAgICAg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKICAgICAgICAgfQor
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRpcnR5VG91Y2hFdmVudFJlY3RzKCk7CisjZW5kaWYKICAgICB9CiAKICAgICBGcmFtZSYgZnJh
bWUgPSByZW5kZXJlcigpLmZyYW1lKCk7CkBAIC0yMjk2LDcgKzIzODQsMTEgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQogI2VuZGlmCiAKICAgICAvLyBKdXN0IHNj
aGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGlmICghaGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKQorI2Vsc2UKICAgICBpZiAo
cmVxdWlyZXNSZXBhaW50KQorI2VuZGlmCiAgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFVzaW5n
Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHBpeGVsU25hcHBlZEludFJlY3QobV9yZXBhaW50
UmVjdCkpOwogCiAgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0yMzg2
LDEwICsyNDc4LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgU2Nyb2xsQWxpZ25tCiAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudExheWVyID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgICAgIExheW91dFJlY3QgdmlzaWJs
ZVJlY3RSZWxhdGl2ZVRvRG9jdW1lbnQgPSB2aWV3UmVjdDsKICAgICAgICAgICAgIEludFNpemUg
c2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50ID0gZnJhbWVWaWV3LnNjcm9sbE9mZnNldFJl
bGF0aXZlVG9Eb2N1bWVudCgpOwogICAgICAgICAgICAgdmlzaWJsZVJlY3RSZWxhdGl2ZVRvRG9j
dW1lbnQuc2V0TG9jYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50
LndpZHRoKCksIHNjcm9sbE9mZnNldFJlbGF0aXZlVG9Eb2N1bWVudC5oZWlnaHQoKSkpOworI2Vs
c2UKKyAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcuYWN0dWFsVmlz
aWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpc2libGVSZWN0UmVs
YXRpdmVUb0RvY3VtZW50ID0gdmlld1JlY3Q7CisjZW5kaWYKIAogICAgICAgICAgICAgTGF5b3V0
UmVjdCByID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB2aXNpYmxlUmVjdFJlbGF0aXZlVG9E
b2N1bWVudCwgcmVjdCwgYWxpZ25YLCBhbGlnblkpOwogICAgICAgICAgICAgICAgIApAQCAtMjYy
NCw2ICsyNzIxLDEzIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NyCiAgICAgaWYgKHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykgewogICAgICAgICB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCkt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAw
OwogICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBo
b3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDogMDsKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgaWYgKGhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkgeworICAgICAgICAg
ICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IDA7CisgICAgICAgICAgICBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gMDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKSwK
QEAgLTI3NjEsNiArMjg2NSwyNyBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSByZW5kZXJlcigpLmZyYW1lKCkucGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJv
bWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXI6OmRpZEVuZFNjcm9sbCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigp
LmZyYW1lKCkucGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRP
dmVyZmxvd1Njcm9sbCgpOworfQorICAgIAordm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Ny
b2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBz
aW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIGlmIChQYWdl
KiBwYWdlID0gcmVuZGVyZXIoKS5mcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21l
KCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgor
CiBJbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25N
b3VzZVBvc2l0aW9uKCk7CkBAIC0yODMyLDYgKzI5NTcsMTIgQEAgSW50U2l6ZSBSZW5kZXJMYXll
cjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiB2
b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8g
Tm8gbmVlZCB0byBpbnZhbGlkYXRlIHNjcm9sbGJhcnMgaWYgd2UncmUgdXNpbmcgYWNjZWxlcmF0
ZWQgc2Nyb2xsaW5nLgorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CiAgICAgICAgIGlmIChHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewpAQCAtMjg2
Myw2ICsyOTk0LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByCiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIC8vIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgc2Nyb2xs
IGNvcm5lciBpZiB3ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBzY3JvbGxpbmcuCisgICAgaWYgKGhh
c0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewogICAgICAgICBsYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwpAQCAtMjk4NCw2ICszMTIxLDEyIEBAIGludCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpCiB7CiAgICAgaWYgKCFtX3ZCYXIgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAh
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCiAgICAgICAgIHJldHVy
biAwOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Ny
b2xsaW5nKCkpIAorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1fdkJh
ci0+d2lkdGgoKTsKIH0KIApAQCAtMjk5MSw2ICszMTM0LDEyIEBAIGludCBSZW5kZXJMYXllcjo6
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuCiB7CiAgICAgaWYgKCFtX2hCYXIgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCiAgICAgICAgIHJldHVybiAwOwor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5n
KCkpIAorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1faEJhci0+aGVp
Z2h0KCk7CiB9CiAKQEAgLTMyMTksOCArMzM2OCwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVz
IHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVl
ZAogICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXgg
KG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KICAgICAgICAgSW50U2l6ZSBjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBh
ZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRy
eSBwb2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3Vl
IHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24g
dGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQg
b3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3Ig
bW9yZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisjZW5kaWYKICAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xs
T2Zmc2V0KCkpCiAgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0
KTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOwpAQCAtMzI2MCw2ICszNDE5LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBv
aW50CiAgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1
cm47CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRG9uJ3QgcmVuZGVyIChjdXN0b20pIHNj
cm9sbGJhcnMgaWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcuCisgICAgaWYgKGhhc0Fj
Y2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CiAgICAgLy8gb24gdG9wIG9mIGV2
ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzCiAgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBq
dXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJz
CkBAIC01MjQzLDcgKzU0MDgsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJl
Y3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAgICAg
Y2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpOwog
ICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgY2xpcCByZWN0cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IGNoaWxkIGxheWVycy4KKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHJlbmRlcmVyKCkuaGFz
Q2xpcE9yT3ZlcmZsb3dDbGlwKCkgJiYgKGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93
Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwIHx8IHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5y
b290TGF5ZXIpKSB7CisjZWxzZQogICAgIGlmICgocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAoY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVy
Zmxvd0NsaXAgfHwgdGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllcikpIHx8IHJlbmRl
cmVyKCkuaGFzQ2xpcCgpKSB7CisjZW5kaWYKICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxp
c2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogCiAgICAgICAgIC8vIFRoaXMgb2Zmc2V0IGNhbm5v
dCB1c2UgY29udmVydFRvTGF5ZXJDb29yZHMsIGJlY2F1c2Ugc29tZXRpbWVzIG91ciByb290TGF5
ZXIgbWF5IGJlIGFjcm9zcwpAQCAtNjE4Myw2ICs2MzUyLDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6
c2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
ICAgICAgICAmJiAhcmVuZGVyZXIoKS5oYXNGaWx0ZXIoKQogI2VuZGlmCisjaWYgUExBVEZPUk0o
SU9TKQorICAgICAgICAgICAgJiYgIWhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKQorI2Vu
ZGlmCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgJiYgIXJlbmRlcmVyKCku
aGFzQmxlbmRNb2RlKCkKICNlbmRpZgpAQCAtNjM5Nyw3ICs2NTY5LDcgQEAgaW5saW5lIGJvb2wg
UmVuZGVyTGF5ZXI6Om5lZWRzQ29tcG9zaXRpbmdMYXllcnNSZWJ1aWx0Rm9yT3ZlcmZsb3coY29u
c3QgUmVuZGVyU3QKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAot
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgYm9v
bCBpc05vcm1hbEZsb3dPbmx5ID0gc2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwogICAgIGlmIChp
c05vcm1hbEZsb3dPbmx5ICE9IG1faXNOb3JtYWxGbG93T25seSkgewpAQCAtNjQ3Nyw2ICs2NjQ5
LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVM
YXllciB8fCBkaWZmID49IFN0eWxlRGlmZmVyZW5jZUxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9u
bHkpCisgICAgICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kaXJ0eVRvdWNoRXZlbnRSZWN0cygp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGlmZik7CisjZW5kaWYKKwogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKICAgICB1cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdFJlbmRlcmVyKCk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjUxMCw2ICs2Njg5LDE4IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cp
CiAgICAgICAgIHVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpOwogI2VuZGlmCiAgICAg
fQorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisg
ICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0
ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2Ft
ZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3Vj
aCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggMTQyYjU2YzZiYTJmNDYxMGJiYjgzNTgwNjJhY2E3NzM0
NTJiMDFjNy4uZDU4ZWUyYTExNGQyYTFiMzE5NmY2ZjA2ZTYyMzA0YTgzZjIzYzM2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTMyMCw2ICszMjAsMTAgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsK
ICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51
bGxlZCBvdXQuCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgogICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3Q7CiAKICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KQEAgLTQyMCw2ICs0MjQsMjcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQogICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEq
IGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
VG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUb3VjaFNjcm9sbGFibGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVl
OyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNPdmVyZmxvd1Njcm9sbCgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRT
Y3JvbGwoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kU2Nyb2xsKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRJc1VzZXJTY3JvbGwoYm9vbCBpc1VzZXJTY3JvbGwpIE9WRVJSSURFIHsg
bV9pblVzZXJTY3JvbGwgPSBpc1VzZXJTY3JvbGw7IH0KKworICAgIGJvb2wgaXNJblVzZXJTY3Jv
bGwoKSBjb25zdCB7IHJldHVybiBtX2luVXNlclNjcm9sbDsgfQorCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbEJvdW5kc09yaWdpblVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3Jv
bGxCb3VuZHNPcmlnaW5VcGRhdGU7IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsQm91bmRz
T3JpZ2luVXBkYXRlKGJvb2wgcmVxdWlyZXNVcGRhdGUgPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxCb3VuZHNPcmlnaW5VcGRhdGUgPSByZXF1aXJlc1VwZGF0ZTsgfQorCisgICAgYm9vbCBoYXNB
Y2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyNlbmRpZgorCiAgICAgaW50IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSkgY29uc3Q7CiAKQEAgLTcyOCw2ICs3NTMsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRp
Y0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9z
aXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3Np
dGlvbjsgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhib29s
IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorI2VuZGlmCisK
ICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaGFzVHJh
bnNmb3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFzIHRoZSB0cmFu
c2Zvcm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQpAQCAtMTA0NCw2ICsxMDc0
LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCiAgICAgLy8gUmVjdGFuZ2xlIGVuY29tcGFzc2lu
ZyB0aGUgc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplciByZWN0LgogICAgIEludFJlY3Qgc2Nyb2xs
Q29ybmVyQW5kUmVzaXplclJlY3QoKSBjb25zdDsKIApAQCAtMTIwNCw2ICsxMjM5LDEzIEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJl
YXNvbiA6IDI7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyAgICBib29sIG1faW5Vc2VyU2Nyb2xs
IDogMTsKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxCb3VuZHNPcmlnaW5VcGRhdGUgOiAxOwor
I2VuZGlmCisKICAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
ICAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGNlYTZhYjk5MDdh
OTY3N2ZkNDZjNDAzYjk5NTQwNWMzZmQ0ZWM3MmYuLjdiODkyNDYxYjgyOTFiMjBkY2E2MDFhNWFk
NjdkOTUzODRhY2M4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0zMTIsOCArMzEyLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcigpCiAgICAgICAgIG1fY2hpbGRDb250YWlu
bWVudExheWVyID0gY3JlYXRlR3JhcGhpY3NMYXllcigiVGlsZWRCYWNraW5nIEZsYXR0ZW5pbmcg
TGF5ZXIiKTsKIAogICAgIGlmIChtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKSB7CisjaWYg
IVBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gUGFnZSBzY2FsZSBpcyBhcHBsaWVkIGFib3ZlIHRo
ZSBSZW5kZXJWaWV3IG9uIGlPUy4KICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50
c09wYXF1ZSh0cnVlKTsKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRBcHBsaWVzUGFnZVNj
YWxlKCk7CisjZW5kaWYKICAgICB9CiAKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKQEAg
LTMzNCw2ICszMzcsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlH
cmFwaGljc0xheWVyKCkKICNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OmxheWVyV2lsbEJlRGVzdHJveWVkKCkKK3sKKyAgICBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNFbWJl
ZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIpLmFsbG93c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBQbHVnaW5WaWV3QmFzZSogcGx1Z2lu
Vmlld0Jhc2UgPSB0b1BsdWdpblZpZXdCYXNlKHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS53aWRn
ZXQoKSk7CisgICAgICAgIGlmIChwbHVnaW5WaWV3QmFzZSAmJiBtX2dyYXBoaWNzTGF5ZXItPmNv
bnRlbnRzTGF5ZXJGb3JNZWRpYSgpKQorICAgICAgICAgICAgcGx1Z2luVmlld0Jhc2UtPmRldGFj
aFBsdWdpbkxheWVyKCk7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpkZXN0cm95R3JhcGhpY3NMYXllcnMoKQogewogICAgIGlmIChtX2dyYXBoaWNzTGF5ZXIp
IHsKQEAgLTM5NSwyNyArNDEwLDQ4IEBAIHN0YXRpYyBib29sIGhhc05vblplcm9UcmFuc2Zvcm1P
cmlnaW4oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKICAgICAgICAgfHwgKHN0eWxlLnRy
YW5zZm9ybU9yaWdpblkoKS50eXBlKCkgPT0gRml4ZWQgJiYgc3R5bGUudHJhbnNmb3JtT3JpZ2lu
WSgpLnZhbHVlKCkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLy8gRklYTUU6IFdlIHNob3Vs
ZCBtZXJnZSB0aGUgY29uY2VwdCBvZiBSZW5kZXJMYXllcjo6e2hhc0FjY2VsZXJhdGVkVG91Y2hT
Y3JvbGxpbmcsIG5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZ30oKQorLy8gc28gdGhhdCB3ZSBjYW4g
cmVtb3ZlIHRoaXMgaU9TLXNwZWNpZmljIHZhcmlhbnQuCitzdGF0aWMgYm9vbCBsYXllck9yQW5j
ZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcoUmVuZGVyTGF5ZXImIGxheWVyKQoreworICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJl
bnQoKSkgeworICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQWNj
ZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorI2Vsc2UKIHN0YXRpYyBib29sIGxheWVyT3JBbmNl
c3RvcklzVHJhbnNmb3JtZWRPclVzaW5nQ29tcG9zaXRlZFNjcm9sbGluZyhSZW5kZXJMYXllciYg
bGF5ZXIpCiB7CiAgICAgZm9yIChSZW5kZXJMYXllciogY3VyciA9ICZsYXllcjsgY3VycjsgY3Vy
ciA9IGN1cnItPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8
fCBjdXJyLT5uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KLQorI2VuZGlmCisgICAg
CiBib29sIFJlbmRlckxheWVyQmFja2luZzo6c2hvdWxkQ2xpcENvbXBvc2l0ZWRCb3VuZHMoKSBj
b25zdAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gU2Nyb2xsYmFyIGxheWVycyB1c2Ug
dGhpcyBsYXllciBmb3IgcmVsYXRpdmUgcG9zaXRpb25pbmcsIHNvIGRvbid0IGNsaXAuCiAgICAg
aWYgKGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAKICAgICBpZiAobV91c2lu
Z1RpbGVkQ2FjaGVMYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBpZiAobGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3Np
dGVkU2Nyb2xsaW5nKG1fb3duaW5nTGF5ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjZWxz
ZQorICAgIGlmIChsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcobV9vd25p
bmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYgKG1fb3du
aW5nTGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25z
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxNiw5ICs1NTIsMTUgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICAgICAK
ICAgICBib29sIG5lZWRzRGVzY2VuZGVudHNDbGlwcGluZ0xheWVyID0gY29tcG9zaXRvcigpLmNs
aXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhtX293bmluZ0xheWVyKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAvLyBPdXIgc2Nyb2xsaW5nIGxheWVyIHdpbGwgY2xpcC4KKyAgICBpZiAobV9v
d25pbmdMYXllci5oYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisgICAgICAgIG5lZWRz
RGVzY2VuZGVudHNDbGlwcGluZ0xheWVyID0gZmFsc2U7CisjZWxzZQogICAgIC8vIE91ciBzY3Jv
bGxpbmcgbGF5ZXIgd2lsbCBjbGlwLgogICAgIGlmIChtX293bmluZ0xheWVyLm5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZygpKQogICAgICAgICBuZWVkc0Rlc2NlbmRlbnRzQ2xpcHBpbmdMYXllciA9
IGZhbHNlOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogICAgIGlmICh1cGRhdGVBbmNlc3Rv
ckNsaXBwaW5nTGF5ZXIoY29tcG9zaXRvcigpLmNsaXBwZWRCeUFuY2VzdG9yKG1fb3duaW5nTGF5
ZXIpKSkKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKQEAgLTUyOSw4ICs1NzEs
MTMgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1
cmF0aW9uKCkKICAgICBpZiAodXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhyZXF1aXJlc0hv
cml6b250YWxTY3JvbGxiYXJMYXllcigpLCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIo
KSwgcmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpKSkKICAgICAgICAgbGF5ZXJDb25maWdDaGFu
Z2VkID0gdHJ1ZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAodXBkYXRlU2Nyb2xsaW5n
TGF5ZXJzKG1fb3duaW5nTGF5ZXIuaGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKSkKKyAg
ICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKKyNlbHNlCiAgICAgaWYgKHVwZGF0ZVNj
cm9sbGluZ0xheWVycyhtX293bmluZ0xheWVyLm5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpKSkK
ICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAKICAgICBpZiAobGF5ZXJDb25maWdDaGFuZ2VkKQogICAgICAgICB1cGRhdGVJbnRlcm5h
bEhpZXJhcmNoeSgpOwpAQCAtNTYyLDggKzYwOSwxNSBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR3JhcGhpY3NMYXllckNvbmZpZ3VyYXRpb24oKQogCiAgICAgaWYgKHJlbmRlcmVy
KCkuaXNFbWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QoJnJlbmRlcmVy
KCkpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgUGx1Z2luVmll
d0Jhc2UqIHBsdWdpblZpZXdCYXNlID0gdG9QbHVnaW5WaWV3QmFzZSh0b1JlbmRlcldpZGdldCgm
cmVuZGVyZXIoKSktPndpZGdldCgpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChw
bHVnaW5WaWV3QmFzZSAmJiAhbV9ncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyRm9yTWVkaWEo
KSkgeworICAgICAgICAgICAgcGx1Z2luVmlld0Jhc2UtPmRldGFjaFBsdWdpbkxheWVyKCk7Cisg
ICAgICAgICAgICBwbHVnaW5WaWV3QmFzZS0+YXR0YWNoUGx1Z2luTGF5ZXIoKTsKKyAgICAgICAg
fQorI2Vsc2UKICAgICAgICAgaWYgKCFwbHVnaW5WaWV3QmFzZS0+c2hvdWxkTm90QWRkTGF5ZXIo
KSkKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb01lZGlhKHBsdWdp
blZpZXdCYXNlLT5wbGF0Zm9ybUxheWVyKCkpOworI2VuZGlmCiAgICAgfQogI2lmIEVOQUJMRShW
SURFTykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzVmlkZW8oKSkgewpAQCAtNjY5LDYgKzcy
MywxOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21l
dHJ5KCkKICAgICBlbHNlCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHJl
bmRlcmVyKCkudmlldygpLmRvY3VtZW50UmVjdCgpLmxvY2F0aW9uKCk7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBjb21wQW5jZXN0b3ItPmhhc0FjY2VsZXJh
dGVkVG91Y2hTY3JvbGxpbmcoKSkgeworICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRv
UmVuZGVyQm94KCZjb21wQW5jZXN0b3ItPnJlbmRlcmVyKCkpOworICAgICAgICBJbnRSZWN0IHBh
ZGRpbmdCb3gocmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHJlbmRlckJveC0+Ym9yZGVyVG9wKCks
CisgICAgICAgICAgICByZW5kZXJCb3gtPndpZHRoKCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQo
KSAtIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwKKyAgICAgICAgICAgIHJlbmRlckJveC0+aGVp
Z2h0KCkgLSByZW5kZXJCb3gtPmJvcmRlclRvcCgpIC0gcmVuZGVyQm94LT5ib3JkZXJCb3R0b20o
KSk7CisKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSBjb21wQW5jZXN0b3ItPnNjcm9s
bGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24g
PSBwYWRkaW5nQm94LmxvY2F0aW9uKCkgLSBzY3JvbGxPZmZzZXQ7CisgICAgfQorI2VuZGlmCisK
ICAgICBpZiAoY29tcEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rvci0+bmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpIHsKICAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChj
b21wQW5jZXN0b3ItPnJlbmRlcmVyKCkpOwogICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldCA9
IGNvbXBBbmNlc3Rvci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC04MjIsNiArODg4LDM1
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnko
KQogICAgICAgICBtX3Njcm9sbGluZ0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHBhZGRp
bmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwog
CiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNldFNpemUocGFkZGluZ0JveC5zaXplKCkpOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgSW50U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNl
dCA9IG1fc2Nyb2xsaW5nTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOworICAgICAgICBtX3Nj
cm9sbGluZ0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIoSW50UG9pbnQoKSAtIHBhZGRpbmdC
b3gubG9jYXRpb24oKSk7CisgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBv
bGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbGluZ0xheWVyLT5vZmZzZXRGcm9tUmVu
ZGVyZXIoKTsKKworICAgICAgICBpZiAobV9vd25pbmdMYXllci5pc0luVXNlclNjcm9sbCgpKSB7
CisgICAgICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdl
IGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNl
IHRoYXQgd2lsbCBjYXVzZQorICAgICAgICAgICAgLy8gaml0dGVyLiBTZXQgYSBmbGFnIHRvIGVu
c3VyZSB0aGF0IHdlIHN5bmMgdXAgbGF0ZXIuCisgICAgICAgICAgICBtX293bmluZ0xheWVyLnNl
dFJlcXVpcmVzU2Nyb2xsQm91bmRzT3JpZ2luVXBkYXRlKHRydWUpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zm
c2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBv
c2l0aW9uIG9uIHRoZSBzdWJsYXllci4KKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNl
dEJvdW5kc09yaWdpbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC53aWR0aCgpLCBzY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3Jv
bGxCb3VuZHNPcmlnaW5VcGRhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmlu
Z0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKworICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5
ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2Ny
b2xsU2l6ZSAhPSBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94
T2Zmc2V0Q2hhbmdlZCkKKyAgICAgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CisKKyAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXRT
aXplKHNjcm9sbFNpemUpOworICAgICAgICAvLyBTY3JvbGxpbmcgdGhlIGNvbnRlbnQgbGF5ZXIg
ZG9lcyBub3QgbmVlZCB0byB0cmlnZ2VyIGEgcmVwYWludC4gVGhlIG9mZnNldCB3aWxsIGJlIGNv
bXBlbnNhdGVkIGF3YXkgZHVyaW5nIHBhaW50aW5nLgorICAgICAgICAvLyBGSVhNRTogVGhlIHBh
aW50IG9mZnNldCBhbmQgdGhlIHNjcm9sbCBvZmZzZXQgc2hvdWxkIHJlYWxseSBiZSBzZXBhcmF0
ZSBjb25jZXB0cy4KKyAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXRPZmZzZXRG
cm9tUmVuZGVyZXIocGFkZGluZ0JveC5sb2NhdGlvbigpIC0gSW50UG9pbnQoKSAtIHNjcm9sbE9m
ZnNldCwgR3JhcGhpY3NMYXllcjo6RG9udFNldE5lZWRzRGlzcGxheSk7CisgICAgICAgIAorICAg
ICAgICBjb21wb3NpdG9yKCkuc2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRlZCgmbV9vd25pbmdM
YXllcik7CisjZWxzZQogICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoLXNjcm9sbE9mZnNldC53aWR0aCgpLCAtc2Nyb2xsT2Zmc2V0LmhlaWdo
dCgpKSk7CiAKICAgICAgICAgSW50U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCA9IG1fc2Ny
b2xsaW5nTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtODQwLDYgKzkzNSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAg
ICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldFNpemUoc2Nyb2xsU2l6ZSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgcGFpbnQgb2Zmc2V0IGFuZCB0aGUgc2Nyb2xsIG9mZnNldCBzaG91
bGQgcmVhbGx5IGJlIHNlcGFyYXRlIGNvbmNlcHRzLgogICAgICAgICBtX3Njcm9sbGluZ0NvbnRl
bnRzTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihzY3JvbGxpbmdDb250ZW50c09mZnNldCwg
R3JhcGhpY3NMYXllcjo6RG9udFNldE5lZWRzRGlzcGxheSk7CisjZW5kaWYKIAogICAgICAgICBp
ZiAobV9mb3JlZ3JvdW5kTGF5ZXIpIHsKICAgICAgICAgICAgIG1fZm9yZWdyb3VuZExheWVyLT5z
ZXRTaXplKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2l6ZSgpKTsKQEAgLTkwOSw2ICsxMDA1
LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZURpcmVjdGx5Q29tcG9zaXRlZENv
bnRlbnRzKGJvb2wgaXNTaW1wbGVDb250YWluZXIKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnJlZ2lzdGVyU2Nyb2xsaW5nTGF5ZXJzKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgY29t
cG9zaXRvcigpLnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWludFN0YXR1cyhtX293bmluZ0xheWVyKTsK
KyNlbHNlCiAgICAgLy8gUmVnaXN0ZXIgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGFuZCB0aGVpciBj
b250YWluZXJzIHdpdGggdGhlIHNjcm9sbGluZyBjb29yZGluYXRvci4KICAgICBTY3JvbGxpbmdD
b29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBzY3JvbGxpbmdDb29yZGluYXRvckZy
b21MYXllcihtX293bmluZ0xheWVyKTsKICAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQpA
QCAtOTI0LDYgKzEwMjMsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cmVnaXN0ZXJTY3Jv
bGxpbmdMYXllcnMoKQogICAgIC8vIGxheWVyIGFzIGEgY29udGFpbmVyLgogICAgIGJvb2wgaXND
b250YWluZXIgPSBtX293bmluZ0xheWVyLmhhc1RyYW5zZm9ybSgpICYmICFtX293bmluZ0xheWVy
LmlzUm9vdExheWVyKCk7CiAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldExheWVySXNDb250
YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGNoaWxkRm9yU3VwZXJsYXllcnMoKSwgaXNDb250
YWluZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRl
cm5hbEhpZXJhcmNoeSgpCkBAIC0xMzIwLDggKzE0MjAsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQog
ICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChzY3JvbGxp
bmdDb29yZGluYXRvcikKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Ny
b2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZSgmbV9vd25pbmdMYXllcik7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIucGFyZW50KCkpCisgICAg
ICAgICAgICAgICAgY29tcG9zaXRvcigpLnNjcm9sbGluZ0xheWVyQWRkZWRPclVwZGF0ZWQoJm1f
b3duaW5nTGF5ZXIpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fc2Nyb2xs
aW5nTGF5ZXIpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmICghcmVuZGVyZXIoKS5k
b2N1bWVudEJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2Nyb2xs
aW5nTGF5ZXJSZW1vdmVkKCZtX293bmluZ0xheWVyLCBtX3Njcm9sbGluZ0xheWVyLT5wbGF0Zm9y
bUxheWVyKCksIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyNl
bmRpZgogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKSk7
CiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXIgPSBudWxscHRyOwpAQCAtMTMzNCw4ICsxNDQyLDEw
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBu
ZWVkc1Njcm9sbGluZ0xheWVycykKICAgICBpZiAobGF5ZXJDaGFuZ2VkKSB7CiAgICAgICAgIHVw
ZGF0ZUludGVybmFsSGllcmFyY2h5KCk7CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UGFp
bnRpbmdQaGFzZShwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkpOworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
ICAgIGNvbXBvc2l0b3IoKS5zY3JvbGxpbmdMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyKTsK
KyNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBsYXllckNoYW5nZWQ7CkBAIC0xNzI1LDggKzE4
MzUsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudChi
b29sIGlzU2ltcGxlQ29udGFpbmVyKSBjb25zdAogICAgIGlmIChyZW5kZXJlcigpLmlzVmlkZW8o
KSAmJiB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLnNob3VsZERpc3BsYXlWaWRlbygpKQogICAg
ICAgICByZXR1cm4gbV9vd25pbmdMYXllci5oYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgp
OwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCi0jZWxpZiBFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKSAmJiBVU0UoQ0EpCisjZWxpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCiAgICAg
aWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMoJnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gbV9v
d25pbmdMYXllci5oYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpOwogI2VuZGlmCkBAIC0x
OTAzLDcgKzIwMTMsMTQgQEAgR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJCYWNraW5nOjpwYXJl
bnRGb3JTdWJsYXllcnMoKSBjb25zdAogICAgIGlmIChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIp
CiAgICAgICAgIHJldHVybiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIuZ2V0KCk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBpT1Mtc3BlY2lm
aWMgY29kZSBwYXRoPworICAgIGlmIChHcmFwaGljc0xheWVyKiBjbGlwcGluZ0xheWVyID0gdGhp
cy0+Y2xpcHBpbmdMYXllcigpKQorICAgICAgICByZXR1cm4gY2xpcHBpbmdMYXllcjsKKyAgICBy
ZXR1cm4gbV9ncmFwaGljc0xheWVyLmdldCgpOworI2Vsc2UKICAgICByZXR1cm4gbV9jaGlsZENv
bnRhaW5tZW50TGF5ZXIgPyBtX2NoaWxkQ29udGFpbm1lbnRMYXllci5nZXQoKSA6IG1fZ3JhcGhp
Y3NMYXllci5nZXQoKTsKKyNlbmRpZgogfQogCiBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckJh
Y2tpbmc6OmNoaWxkRm9yU3VwZXJsYXllcnMoKSBjb25zdApAQCAtMTkyMyw3ICsyMDQwLDcgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50c0ludG9XaW5kb3coKSBjb25zdAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9vd25pbmdMYXllci5pc1Jvb3RMYXllcigpKSB7
Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKElPUykgfHwgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQogICAgICAgICBpZiAoY29tcG9zaXRvcigpLmluRm9yY2VkQ29tcG9zaXRp
bmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTIwMTYsNiAr
MjEzMywxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxh
eUluUmVjdChjb25zdCBJbnRSZWN0JiByKQogICAgIGlmIChtX3Njcm9sbGluZ0NvbnRlbnRzTGF5
ZXIgJiYgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewogICAgICAg
ICBJbnRSZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKICAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92
ZSgtbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAvLyBBY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkgYmFrZXMgc2Nyb2xs
T2Zmc2V0IGludG8gb2Zmc2V0RnJvbVJlbmRlcmVyIG9uIGlPUy4KKyAgICAgICAgbGF5ZXJEaXJ0
eVJlY3QubW92ZSgtbV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKSk7CisjZW5kaWYKICAgICAg
ICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJE
aXJ0eVJlY3QpOwogICAgIH0KIH0KQEAgLTIwMjUsNyArMjE0NiwxMiBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllciwgR3JhcAogICAgICAgICAgICAgICAgICAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZp
b3IsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIHBhaW50aW5nUGhhc2UpCiB7CiAgICAgaWYg
KHBhaW50c0ludG9XaW5kb3coKSB8fCBwYWludHNJbnRvQ29tcG9zaXRlZEFuY2VzdG9yKCkpIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQorICAgICAgICAvLyBGSVhNRTogTG9va3MgbGlrZSB0aGUgQ0FM
YXllciB0cmVlIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIEdyYXBoaWNzTGF5ZXIgaGVpcmFyY2h5
CisgICAgICAgIC8vIHdoZW4gcGFnZXMgYXJlIHJlc3RvcmVkIGZyb20gdGhlIFBhZ2VDYWNoZS4K
KyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg3MTI1ODc+IEFTU0VSVDogV2hlbiBHb2luZyBC
YWNrIHRvIFBhZ2Ugd2l0aCBQbHVnaW5zIGluIFBhZ2VDYWNoZQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTgzLDYg
KzIzMDksMTggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnNob3VsZER1bXBQcm9wZXJ0eUZv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyLAogICAgIHJldHVybiB0cnVlOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQorZmxvYXQgUmVuZGVyTGF5ZXJCYWNraW5nOjptaW5pbXVtRG9j
dW1lbnRTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS5taW5pbXVtRG9j
dW1lbnRTY2FsZSgpOworfQorCitib29sIFJlbmRlckxheWVyQmFja2luZzo6YWxsb3dDb21wb3Np
dGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBjb21wb3Np
dG9yKCkuYWxsb3dDb21wb3NpdGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24oKTsKK30KKyNlbmRp
ZgorCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnZlcmlmeU5vdFBh
aW50aW5nKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAppbmRleCAyNGEzYWZiMjk5OWU1ODU0ZTEyMDcwZmQwMjRiZjg4NjgxZjI5MWQ5Li5iYzcx
MWQ1NGQwOGI0MWY2ZTZjMDIzYzUzMjRmOWY4NWM1ZjlmM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCkBAIC02MCw2ICs2MCwxMCBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJCYWNraW5nKFJlbmRlckxheWVyJik7CiAgICAg
flJlbmRlckxheWVyQmFja2luZygpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgbGF5
ZXJXaWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgorCiAgICAgUmVuZGVyTGF5ZXImIG93bmluZ0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25pbmdMYXllcjsgfQogCiAgICAgZW51bSBVcGRhdGVB
ZnRlckxheW91dEZsYWcgewpAQCAtMTcyLDYgKzE3NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKikgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGdldEN1cnJlbnRUcmFuc2Zvcm0oY29uc3Qg
R3JhcGhpY3NMYXllciosIFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3QgT1ZFUlJJREU7CiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBmbG9hdCBtaW5pbXVtRG9jdW1lbnRTY2Fs
ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd0NvbXBvc2l0aW5nTGF5
ZXJWaXN1YWxEZWdyYWRhdGlvbigpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVh
bCBib29sIGlzVHJhY2tpbmdSZXBhaW50cygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGREdW1wUHJvcGVydHlGb3JMYXllcihjb25z
dCBHcmFwaGljc0xheWVyKiwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKSBjb25zdCBPVkVSUklE
RTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKaW5kZXggMWM2MjI4YzQzNDg4MTQxN2NjZmYxMDNkZWI2NDBkMzE5MGQxYjI2NS4uMDNl
MDZmMTY3OWNlYTAxNDVlNzcyMzRjZGIwNTEzNTIwMTk5ZWE1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTY2LDYgKzY2
LDEyIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJSZWdpb24u
aCIKKyNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAjaW5jbHVkZSAi
SFRNTEF1ZGlvRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKQEAgLTg4
LDcgKzk0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBjYW52
YXNBcmVhVGhyZXNob2xkUmVxdWlyaW5nQ29tcG9zaXRpbmcgPSA1MCAqIDEwMDsKIC8vIER1cmlu
ZyBwYWdlIGxvYWRpbmcgZGVsYXkgbGF5ZXIgZmx1c2hlcyB1cCB0byB0aGlzIG1hbnkgc2Vjb25k
cyB0byBhbGxvdyB0aGVtIGNvYWxlc2NlLCByZWR1Y2luZyB3b3JrbG9hZC4KKyNpZiBQTEFURk9S
TShJT1MpCitzdGF0aWMgY29uc3QgZG91YmxlIHRocm90dGxlZExheWVyRmx1c2hJbml0aWFsRGVs
YXkgPSAuNTsKK3N0YXRpYyBjb25zdCBkb3VibGUgdGhyb3R0bGVkTGF5ZXJGbHVzaERlbGF5ID0g
MS41OworI2Vsc2UKIHN0YXRpYyBjb25zdCBkb3VibGUgdGhyb3R0bGVkTGF5ZXJGbHVzaERlbGF5
ID0gLjU7CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIApAQCAtMzYwLDYg
KzM3MSwxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNo
KGJvb2wgY2FuVGhyb3R0bGUpCiB7CiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJzKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoY2FuVGhyb3R0bGUpCisgICAgICAgIHN0YXJ0SW5p
dGlhbExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7CisjZW5kaWYKKwogICAgIGlmIChjYW5UaHJv
dHRsZSAmJiBpc1Rocm90dGxpbmdMYXllckZsdXNoZXMoKSkgewogICAgICAgICBtX2hhc1BlbmRp
bmdMYXllckZsdXNoID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzY3LDYgKzM4MywxNiBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKGJvb2wgY2Fu
VGhyb3R0bGUpCiAgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCitDaHJvbWVDbGllbnQqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2hyb21lQ2xpZW50
KCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZy
YW1lKCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuICZwYWdlLT5jaHJvbWUoKS5jbGllbnQoKTsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3Qp
CiB7CiAgICAgLy8gRnJhbWVWaWV3OjpmbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJm
cmFtZXMoKSBmbHVzaGVzIGVhY2ggc3ViZnJhbWUsCkBAIC0zNzcsNiArNDAzLDkgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyhib29sIGlzRmx1
c2hSb290KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHJvb3RMYXllckF0dGFjaG1l
bnQoKSA9PSBSb290TGF5ZXJVbmF0dGFjaGVkKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICBzdGFydExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7CisjZW5kaWYKICAgICAgICAgbV9zaG91
bGRGbHVzaE9uUmVhdHRhY2ggPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg4
LDI2ICs0MTcsODIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcyhib29sIGlzRmx1c2hSb290KQogICAgIG1fZmx1c2hpbmdMYXllcnMgPSB0cnVl
OwogCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVy
KCkpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJvb3RMYXllci0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlKGZyYW1lVmlldy52aXNpYmxlRXh0ZW50Q29udGVudFJlY3QoKSk7CisjZWxzZQog
ICAgICAgICAvLyBIYXZpbmcgYSBtX2NsaXBMYXllciBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBkb2lu
ZyBzY3JvbGxpbmcgdmlhIEdyYXBoaWNzTGF5ZXJzLgogICAgICAgICBJbnRSZWN0IHZpc2libGVS
ZWN0ID0gbV9jbGlwTGF5ZXIgPyBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy5jb250ZW50
c1NpemUoKSkgOiBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIHJvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKKyNlbmRpZgogICAgIH0K
ICAgICAKICAgICBBU1NFUlQobV9mbHVzaGluZ0xheWVycyk7CiAgICAgbV9mbHVzaGluZ0xheWVy
cyA9IGZhbHNlOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHVwZGF0ZUN1c3RvbUxheWVyc0Fm
dGVyRmx1c2goKTsKKworICAgIENocm9tZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2hyb21lQ2xp
ZW50KCk7CisgICAgaWYgKGNsaWVudCAmJiBpc0ZsdXNoUm9vdCkKKyAgICAgICAgY2xpZW50LT5k
aWRGbHVzaENvbXBvc2l0aW5nTGF5ZXJzKCk7CisjZWxzZQogICAgIGZvciAoYXV0byBpdCA9IG1f
dmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGUuYmVnaW4oKSwgZW5kID0gbV92
aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQogICAgICAgICByZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKCoq
aXQpOwogICAgIG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGUuY2xlYXIo
KTsKLQorI2VuZGlmCiAgICAgc3RhcnRMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpOwogfQogCisj
aWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgc2Nyb2xsYmFySGFzRGlzcGxheU5vbmUoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKCFzY3JvbGxiYXIgfHwgIXNjcm9sbGJhci0+
aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBzY3JvbGxiYXJTdHlsZSA9IHN0YXRpY19jYXN0PFJlbmRlclNjcm9sbGJh
cio+KHNjcm9sbGJhciktPmdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhckJHUGFydCwg
U0NST0xMQkFSKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyU3R5bGUgJiYgc2Nyb2xsYmFyU3R5bGUt
PmRpc3BsYXkoKSA9PSBOT05FOworfQorCisvLyBGSVhNRTogQ2FuIHdlIG1ha2UgfGxheWVyfCBj
b25zdCBSZW5kZXJMYXllciY/CitzdGF0aWMgdm9pZCB1cGRhdGVTY3JvbGxpbmdMYXllcldpdGhD
bGllbnQoUmVuZGVyTGF5ZXImIGxheWVyLCBDaHJvbWVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBp
ZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBi
YWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsKKyAgICBBU1NFUlQoYmFja2luZyk7CisKKyAgICBi
b29sIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciA9ICFzY3JvbGxiYXJIYXNEaXNwbGF5Tm9uZShs
YXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICBib29sIGFsbG93VmVydGljYWxTY3Jv
bGxiYXIgPSAhc2Nyb2xsYmFySGFzRGlzcGxheU5vbmUobGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFy
KCkpOworICAgIGNsaWVudC0+YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihsYXllci0+cmVuZGVy
ZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIo
KSwgYmFja2luZy0+c2Nyb2xsaW5nQ29udGVudHNMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksCisg
ICAgICAgIEludFNpemUobGF5ZXItPnNjcm9sbFdpZHRoKCksIGxheWVyLT5zY3JvbGxIZWlnaHQo
KSksIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dWZXJ0aWNhbFNjcm9sbGJhcik7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDdXN0b21MYXllcnNBZnRlckZs
dXNoKCkKK3sKKyAgICByZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKTsKKwor
ICAgIGlmICghbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlLmlzRW1wdHkoKSkgeworICAg
ICAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpOwor
CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZS5i
ZWdpbigpLCBlbmQgPSBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRhdGUuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudCgq
Kml0LCBjaHJvbWVDbGllbnQpOworICAgICAgICBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRh
dGUuY2xlYXIoKTsKKyAgICB9CisgICAgbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlLmNs
ZWFyKCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNo
Q2hhbmdlc0ZvckxheWVyKFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKIHsKICAgICBpZiAobV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmNv
bnRhaW5zKCZsYXllcikpCiAgICAgICAgIG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRp
bmdVcGRhdGUuYWRkKCZsYXllcik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKG1fc2Ny
b2xsaW5nTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpCisgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXJz
TmVlZGluZ1VwZGF0ZS5hZGQoJmxheWVyKTsKKyNlbmRpZgorCiAgICAgUmVuZGVyTGF5ZXJCYWNr
aW5nKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlmIChiYWNraW5nLT5iYWNrZ3Jv
dW5kTGF5ZXJQYWludHNGaXhlZFJvb3RCYWNrZ3JvdW5kKCkgJiYgZ3JhcGhpY3NMYXllciA9PSBi
YWNraW5nLT5iYWNrZ3JvdW5kTGF5ZXIoKSkKICAgICAgICAgZml4ZWRSb290QmFja2dyb3VuZExh
eWVyQ2hhbmdlZCgpOwpAQCAtNDI4LDcgKzUxMywxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6ZGlkQ2hhbmdlVmlzaWJsZVJlY3QoKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25z
dCBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKKworI2lm
IFBMQVRGT1JNKElPUykKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZnJhbWVWaWV3LnZpc2li
bGVFeHRlbnRDb250ZW50UmVjdCgpOworI2Vsc2UKICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0g
bV9jbGlwTGF5ZXIgPyBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy5jb250ZW50c1NpemUo
KSkgOiBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKICAgICBpZiAoIXJv
b3RMYXllci0+dmlzaWJsZVJlY3RDaGFuZ2VSZXF1aXJlc0ZsdXNoKHZpc2libGVSZWN0KSkKICAg
ICAgICAgcmV0dXJuOwogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaE5vdygpOwpAQCAtODc3LDkgKzk2
NywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKE92ZXJs
YXBNYXAmIG92ZXJsYXBNYXAsIFJlbmRlckxheWVyJgogICAgIH0KIAogICAgIEludFJlY3QgY2xp
cFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5k
ZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCgmcm9vdFJlbmRlckxheWVyKCksIDAsIEFic29sdXRl
Q2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMu
CisKKyAgICAvLyBPbiBpT1MsIHBhZ2VTY2FsZUZhY3RvcigpIGlzIG5vdCBhcHBsaWVkIGJ5IFJl
bmRlclZpZXcsIHNvIHdlIHNob3VsZCBub3Qgc2NhbGUgaGVyZS4KKyAgICAvLyBGSVhNRTogU2V0
IFNldHRpbmdzOjpkZWxlZ2F0ZXNQYWdlU2NhbGluZyB0byB0cnVlIGZvciBpT1MuCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MuZGVsZWdh
dGVzUGFnZVNjYWxpbmcoKSkKICAgICAgICAgY2xpcFJlY3Quc2NhbGUocGFnZVNjYWxlRmFjdG9y
KCkpOworI2VuZGlmCiAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRzKTsKICAgICBv
dmVybGFwTWFwLmFkZCgmbGF5ZXIsIGNsaXBSZWN0KTsKIH0KQEAgLTExMTksOCArMTIxNCwxMSBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzKFJlbmRlckxheWVyKiBhbmNlc3RvcgogICAgIC8vIHRvIGJlIGNvbXBvc2l0ZWQsIHRoZW4g
d2UgY2FuIGRyb3Agb3V0IG9mIGNvbXBvc2l0aW5nIG1vZGUgYWx0b2dldGhlci4gSG93ZXZlciwg
ZG9uJ3QgZHJvcCBvdXQgb2YgY29tcG9zaXRpbmcgbW9kZQogICAgIC8vIGlmIHRoZXJlIGFyZSBj
b21wb3NpdGVkIGxheWVycyB0aGF0IHdlIGRpZG4ndCBoaXQgaW4gb3VyIHRyYXZlcnNhbCAoZS5n
LiBiZWNhdXNlIG9mIHZpc2liaWxpdHk6aGlkZGVuKS4KICAgICBpZiAobGF5ZXIuaXNSb290TGF5
ZXIoKSAmJiAhY2hpbGRTdGF0ZS5tX3N1YnRyZWVJc0NvbXBvc2l0aW5nICYmICFyZXF1aXJlc0Nv
bXBvc2l0aW5nTGF5ZXIobGF5ZXIpICYmICFtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlICYmICFoYXNB
bnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhsYXllcikpIHsKKyAgICAgICAgLy8gRG9uJ3Qg
ZHJvcCBvdXQgb2YgY29tcG9zaXRpbmcgb24gaU9TLCBiZWNhdXNlIHdlIG1heSBmbGFzaC4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS84MzQ4MzM3Pi4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBl
bmFibGVDb21wb3NpdGluZ01vZGUoZmFsc2UpOwogICAgICAgICB3aWxsQmVDb21wb3NpdGVkID0g
ZmFsc2U7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgLy8gSWYgdGhlIGxheWVyIGlzIGdvaW5n
IGludG8gY29tcG9zaXRpbmcgbW9kZSwgcmVwYWludCBpdHMgb2xkIGxvY2F0aW9uLgpAQCAtMTY5
OSwxMSArMTc5NywxOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0SXNJbldpbmRv
dyhib29sIGlzSW5XaW5kb3cpCiAKICAgICAgICAgUm9vdExheWVyQXR0YWNobWVudCBhdHRhY2ht
ZW50ID0gc2hvdWxkUHJvcGFnYXRlQ29tcG9zaXRpbmdUb0VuY2xvc2luZ0ZyYW1lKCkgPyBSb290
TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lIDogUm9vdExheWVyQXR0YWNoZWRWaWFDaHJv
bWVDbGllbnQ7CiAgICAgICAgIGF0dGFjaFJvb3RMYXllcihhdHRhY2htZW50KTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIHJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygp
OworICAgICAgICByZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOworI2VuZGlmCiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKG1fcm9vdExheWVyQXR0YWNobWVudCA9PSBSb290TGF5ZXJVbmF0
dGFjaGVkKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGRldGFjaFJvb3RMYXllcigp
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdW5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMoKTsKKyAgICAgICAgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwor
I2VuZGlmCiAgICAgfQogfQogCkBAIC0xNzU4LDcgKzE4NjQsNyBAQCBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6aGFzM0RDb250ZW50KCkgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmFsbG93c0luZGVwZW5kZW50bHlDb21wb3NpdGVkRnJhbWVzKGNvbnN0IEZyYW1lVmll
dyogdmlldykKIHsKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogICAgIC8vIGZyYW1lcyBhcmUgb25seSBpbmRlcGVuZGVudGx5IGNvbXBvc2l0
ZWQgaW4gTWFjIHByZS1XZWJLaXQyLgogICAgIHJldHVybiB2aWV3LT5wbGF0Zm9ybVdpZGdldCgp
OwogI2Vsc2UKQEAgLTE4MzIsNiArMTkzOCw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSCiAg
ICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oKnJlbmRlcmVyKQogICAg
ICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycygqcmVuZGVyZXIpCiAgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbigqcmVuZGVyZXIsICpyZW5kZXJlci0+
bGF5ZXIoKSwgdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pCisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsaW5nKCpy
ZW5kZXJlcikKKyNlbmRpZgogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZs
b3dTY3JvbGxpbmcoKnJlbmRlcmVyLT5sYXllcigpKQogICAgICAgICB8fCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yQmxlbmRpbmcoKnJlbmRlcmVyKTsKIH0KQEAgLTE4NzgsNyArMTk4NywxMSBAQCBi
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNPd25CYWNraW5nU3RvcmUoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyLCBjbwogICAgICAgICB8fCByZW5kZXJlci5pc1RyYW5zcGFyZW50
KCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzTWFzaygpCiAgICAgICAgIHx8IHJlbmRlcmVyLmhh
c1JlZmxlY3Rpb24oKQotICAgICAgICB8fCByZW5kZXJlci5oYXNGaWx0ZXIoKSkKKyAgICAgICAg
fHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHx8IHJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxpbmcocmVuZGVyZXIpCisjZW5kaWYKKyAgICAgICAg
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgCkBAIC0xOTM1LDYgKzIwNDgs
MTEgQEAgQ29tcG9zaXRpbmdSZWFzb25zIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhc29uc0Zv
ckNvbXBvc2l0aW5nKGNvbnN0IFJlbmRlckxheWUKICAgICBpZiAocmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBvc2l0aW9uKCpyZW5kZXJlciwgKnJlbmRlcmVyLT5sYXllcigpKSkKICAgICAgICAgcmVh
c29ucyB8PSByZW5kZXJlci0+c3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gPyBD
b21wb3NpdGluZ1JlYXNvblBvc2l0aW9uRml4ZWQgOiBDb21wb3NpdGluZ1JlYXNvblBvc2l0aW9u
U3RpY2t5OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChyZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yU2Nyb2xsaW5nKCpyZW5kZXJlcikpCisgICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdS
ZWFzb25PdmVyZmxvd1Njcm9sbGluZ1RvdWNoOworI2VuZGlmCisKICAgICBpZiAocmVxdWlyZXND
b21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKCpyZW5kZXJlci0+bGF5ZXIoKSkpCiAgICAg
ICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFzb25PdmVyZmxvd1Njcm9sbGluZ1RvdWNoOwog
CkBAIC0yMjE3LDEwICsyMzM1LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplCiAgICAgcmV0
dXJuIChhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKCZyZW5kZXJl
ciwgQ1NTUHJvcGVydHlPcGFjaXR5KQogICAgICAgICAgICAgJiYgKGluQ29tcG9zaXRpbmdNb2Rl
KCkgfHwgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6QW5pbWF0ZWRPcGFj
aXR5VHJpZ2dlcikpKQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSNpZiAhUExBVEZPUk0oTUFD
KSB8fCAoIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDgwKQorI2lmIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1BQykgfHwgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vMTA5MDcyNTE+IC0gV2ViS2l0MiBkb2Vzbid0IHN1cHBvcnQgQ0EgYW5pbWF0aW9ucyBv
ZiBDSSBmaWx0ZXJzIG9uIExpb24gYW5kIGJlbG93CiAgICAgICAgICAgICB8fCBhbmltQ29udHJv
bGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKCZyZW5kZXJlciwgQ1NTUHJvcGVydHlX
ZWJraXRGaWx0ZXIpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgfHwgKCFQTEFURk9STShJT1Mp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MCkKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpIHx8ICFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA4MAogI2VuZGlmIC8vIENTU19GSUxURVJTCiAgICAgICAgICAgICB8fCBh
bmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKCZyZW5kZXJlciwgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogfQpAQCAtMjI1NCw2ICsyMzcyLDEzIEBAIGJvb2wg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5kaXJlY3RSZWFz
b24oUmVuZGVyTGF5ZXJNb2RlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JT
Y3JvbGxpbmcoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHJlbmRlcmVyLmhhc0xheWVyKCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5k
ZXJlcikubGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpOworfQorI2VuZGlm
CisKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmls
dGVycyhSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCkBAIC0yMjc3LDEwICsyNDAyLDMxIEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcoUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjCiAjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBib29sIGlzU3Rp
Y2t5SW5BY2NlbGVyYXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydChjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiogZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxv
d0xheWVyID0gMCkKK3sKKyAgICBBU1NFUlQobGF5ZXIucmVuZGVyZXIoKS5pc1N0aWNreVBvc2l0
aW9uZWQoKSk7CisKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nT3ZlcmZsb3dMYXllciA9IGxh
eWVyLmVuY2xvc2luZ092ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxmKTsKKyAgICBpZiAoZW5j
bG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5oYXNBY2NlbGVy
YXRlZFRvdWNoU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0FjY2VsZXJhdGVk
T3ZlcmZsb3dMYXllcikKKyAgICAgICAgICAgICplbmNsb3NpbmdBY2NlbGVyYXRlZE92ZXJmbG93
TGF5ZXIgPSBlbmNsb3NpbmdPdmVyZmxvd0xheWVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gIWVuY2xvc2luZ092ZXJmbG93TGF5ZXI7Cit9CisjZW5kaWYKKwog
c3RhdGljIGJvb2wgaXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGxheWVy
LnJlbmRlcmVyKCkuaXNTdGlja3lQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiBpc1N0aWNr
eUluQWNjZWxlcmF0ZWRTY3JvbGxpbmdMYXllck9yVmlld3BvcnQobGF5ZXIpOworI2Vsc2UKICAg
ICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc1N0aWNreVBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0
dXJuICFsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CisjZW5k
aWYKIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSAhPSBGaXhl
ZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjk1LDYgKzI0NDEsMjEgQEAg
c3RhdGljIGJvb2wgaXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXJMYXllcjo6Vmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24qIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uKSBjb25zdAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAocmVuZGVyZXIuaXNT
dGlja3lQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gcG9zaXRp
b246Zml4ZWQgZWxlbWVudHMgdGhhdCBjcmVhdGUgdGhlaXIgb3duIHN0YWNraW5nIGNvbnRleHQg
KGUuZy4gaGF2ZSBhbiBleHBsaWNpdCB6LWluZGV4LAorICAgIC8vIG9wYWNpdHksIHRyYW5zZm9y
bSkgY2FuIGdldCB0aGVpciBvd24gY29tcG9zaXRlZCBsYXllci4gQSBzdGFja2luZyBjb250ZXh0
IGlzIHJlcXVpcmVkIG90aGVyd2lzZQorICAgIC8vIHotaW5kZXggYW5kIGNsaXBwaW5nIHdpbGwg
YmUgYnJva2VuLgorICAgIGlmICghKHJlbmRlcmVyLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYm
IHJlbmRlcmVyLnN0eWxlKCkucG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3JlbmRlclZpZXcuaGFzQ3VzdG9tRml4ZWRQb3Np
dGlvbihyZW5kZXJlciwgUmVuZGVyVmlldzo6Q2hlY2tDb250YWluaW5nQmxvY2spKSB7CisgICAg
ICAgIG1fcmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorI2Vsc2UKICAgICAvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50
cyB0aGF0IGNyZWF0ZSB0aGVpciBvd24gc3RhY2tpbmcgY29udGV4dCAoZS5nLiBoYXZlIGFuIGV4
cGxpY2l0IHotaW5kZXgsCiAgICAgLy8gb3BhY2l0eSwgdHJhbnNmb3JtKSBjYW4gZ2V0IHRoZWly
IG93biBjb21wb3NpdGVkIGxheWVyLiBBIHN0YWNraW5nIGNvbnRleHQgaXMgcmVxdWlyZWQgb3Ro
ZXJ3aXNlCiAgICAgLy8gei1pbmRleCBhbmQgY2xpcHBpbmcgd2lsbCBiZSBicm9rZW4uCkBAIC0y
MzE3LDYgKzI0NzgsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogCiAgICAgaWYgKGlzU3Rp
Y2t5KQogICAgICAgICByZXR1cm4gaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSAmJiBpc1ZpZXdw
b3J0Q29uc3RyYWluZWRGaXhlZE9yU3RpY2t5TGF5ZXIobGF5ZXIpOworI2VuZGlmCiAKICAgICBh
dXRvIGNvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5lcigpOwogICAgIC8vIElmIHRoZSByZW5k
ZXJlciBpcyBub3QgaG9va2VkIHVwIHlldCB0aGVuIHdlIGhhdmUgdG8gd2FpdCB1bnRpbCBpdCBp
cy4KQEAgLTIzNDcsNyArMjUwOSwxMSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVx
dWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogICAgIH0K
IAogICAgIC8vIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIHRoYXQgYXJlIGludmlzaWJsZSBpbiB0
aGUgY3VycmVudCB2aWV3IGRvbid0IGdldCB0aGVpciBvd24gbGF5ZXIuCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIExheW91dFJlY3Qgdmlld0JvdW5kcyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpOworI2Vsc2UKICAgICBMYXlvdXRSZWN0
IHZpZXdCb3VuZHMgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb25zdHJhaW5l
ZFZpc2libGVDb250ZW50UmVjdCgpOworI2VuZGlmCiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
cyA9IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91bmRzKCZsYXllciwgMCwgUmVuZGVyTGF5ZXI6OlVz
ZUxvY2FsQ2xpcFJlY3RJZlBvc3NpYmxlIHwgUmVuZGVyTGF5ZXI6OkluY2x1ZGVMYXllckZpbHRl
ck91dHNldHMgfCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlcwogICAgICAgICB8IFJlbmRl
ckxheWVyOjpFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMgfCBSZW5kZXJMYXllcjo6RG9udENvbnN0
cmFpbkZvck1hc2sgfCBSZW5kZXJMYXllcjo6SW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyk7
CiAgICAgLy8gTWFwIHRvIG1fcmVuZGVyVmlldyB0byBpZ25vcmUgcGFnZSBzY2FsZS4KQEAgLTI0
ODEsMjAgKzI2NDcsNTEgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVHJhY2tpbmdS
ZXBhaW50cygpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNUcmFja2luZ1JlcGFpbnRzOwogfQogCisj
aWYgUExBVEZPUk0oSU9TKQorZmxvYXQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjptaW5pbXVtRG9j
dW1lbnRTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpLm1pbmltdW1Eb2N1bWVudFNjYWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjphbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpIGNvbnN0
Cit7CisgICAgUGFnZSogcGFnZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnBh
Z2UoKTsKKyAgICByZXR1cm4gIXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS5hbGxvd0NvbXBvc2l0
aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpOworfQorI2VuZGlmCisKIGZsb2F0IFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICByZXR1cm4gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkuZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyNlbHNlCiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAg
ICByZXR1cm4gcGFnZSA/IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkgOiAxOworI2VuZGlmCiB9
CiAKIGZsb2F0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpLmRvY3VtZW50U2NhbGUoKTsKKyNlbHNlCiAgICAgUGFnZSogcGFnZSA9IHRoaXMt
PnBhZ2UoKTsKICAgICByZXR1cm4gcGFnZSA/IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpIDogMTsK
KyNlbmRpZgogfQogCiBmbG9hdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbnRlbnRzU2NhbGVN
dWx0aXBsaWVyRm9yTmV3VGlsZXMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0CiB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIFRpbGVDYWNoZSogdGlsZUNhY2hlID0gbnVsbHB0cjsKKyAgICBp
ZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKKyAgICAgICAgdGlsZUNhY2hlID0gcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpLnRpbGVDYWNoZSgpOworCisgICAgaWYgKCF0aWxlQ2FjaGUpCisg
ICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIHRpbGVDYWNoZS0+dGlsaW5nTW9kZSgpID09
IFRpbGVDYWNoZTo6Wm9vbWluZyA/IDAuMTI1IDogMTsKKyNlbmRpZgogICAgIHJldHVybiAxOwog
fQogCkBAIC0yODY5LDYgKzMwNjYsMTQgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVu
c3VyZVJvb3RMYXllcigpCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShGbG9h
dFNpemUob3ZlcmZsb3dSZWN0Lm1heFgoKSwgb3ZlcmZsb3dSZWN0Lm1heFkoKSkpOwogICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgIC8vIFBhZ2Ugc2NhbGUgaXMgYXBwbGllZCBhYm92ZSB0aGlz
IG9uIGlPUywgc28gd2UnbGwganVzdCBzYXkgdGhhdCBvdXIgcm9vdCBsYXllciBhcHBsaWVzIGl0
LgorICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUo
KTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2Ug
JiYgJnBhZ2UtPm1haW5GcmFtZSgpID09ICZmcmFtZSkKKyAgICAgICAgICAgIG1fcm9vdENvbnRl
bnRMYXllci0+c2V0QXBwbGllc1BhZ2VTY2FsZSgpOworI2VuZGlmCisKICAgICAgICAgLy8gTmVl
ZCB0byBjbGlwIHRvIHByZXZlbnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUg
dGhpcyBmcmFtZQogICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
dHJ1ZSk7CiAgICAgfQpAQCAtMzE0OSw3ICszMzU0LDExIEBAIEZpeGVkUG9zaXRpb25WaWV3cG9y
dENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUZpeGVkVmlld3BvcnRD
b25zCiB7CiAgICAgQVNTRVJUKGxheWVyLmlzQ29tcG9zaXRlZCgpKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IG1fcmVuZGVyVmlldy5mcmFtZVZp
ZXcoKS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpOworI2Vsc2UKICAgICBMYXlvdXRS
ZWN0IHZpZXdwb3J0UmVjdCA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0
cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKIAogICAgIEZpeGVkUG9zaXRpb25W
aWV3cG9ydENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOwogCkBAIC0zMTg1LDEwICszMzk0LDE3IEBA
IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUZpeGVkVmlld3BvcnRDb25zCiBTdGlja3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWlu
dHMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50
cyhSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheWVyLmlzQ29tcG9z
aXRlZCgpKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSBmb3Igc3RpY2tpZXMgY29uc3RyYWluZWQgYnkgYW4gZW5jbG9zaW5nIGNsaXBwaW5nIGxh
eWVyLgorICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGFzc2VydGlvbiBmYWlsIG9uIGlPUz8K
ICAgICBBU1NFUlQoIWxheWVyLmVuY2xvc2luZ092ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxm
KSk7CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBMYXlvdXRSZWN0IHZpZXdwb3J0
UmVjdCA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0
UmVjdCgpOworI2Vsc2UKICAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7Cisj
ZW5kaWYKIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciA9IHRvUmVuZGVyQm94
TW9kZWxPYmplY3QobGF5ZXIucmVuZGVyZXIoKSk7CiAKQEAgLTMyMDMsNiArMzQxOSw3IEBAIFN0
aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNv
bXB1dGVTdGlja3lWaWV3cG9ydENvCiAgICAgcmV0dXJuIGNvbnN0cmFpbnRzOwogfQogCisjaWYg
IVBMQVRGT1JNKElPUykKIHN0YXRpYyBSZW5kZXJMYXllckJhY2tpbmcqIG5lYXJlc3RTY3JvbGxp
bmdDb29yZGluYXRvckFuY2VzdG9yKFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBSZW5kZXJM
YXllciogYW5jZXN0b3IgPSBsYXllci5wYXJlbnQoKTsKQEAgLTMyMTYsOSArMzQzMywxNCBAQCBz
dGF0aWMgUmVuZGVyTGF5ZXJCYWNraW5nKiBuZWFyZXN0U2Nyb2xsaW5nQ29vcmRpbmF0b3JBbmNl
c3RvcihSZW5kZXJMYXllciYgbGF5ZQogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYK
IAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyT3JVcGRhdGVWaWV3cG9ydENv
bnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogeworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIC8vIE9uIGlPUywgd2UgYmF0Y2gtdXBkYXRl
IHZpZXdwb3J0LWNvbnN0cmFpbmVkIGxheWVycyBpbiB1cGRhdGVDdXN0b21MYXllcnNBZnRlckZs
dXNoKCkuCisjZWxzZQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBzdGlja3kgcG9z
aXRpb24gaGVyZSEgQW5kIHdlIHNob3VsZCBldmVudHVhbGwgc3VwcG9ydCBmaXhlZC9zdGlja3kg
ZWxlbWVudHMKICAgICAvLyB0aGF0IGFyZSBpbnNpZGUgbm9uLW1haW4gZnJhbWVzIG9uY2Ugd2Ug
Z2V0IG5vbi1tYWluIGZyYW1lcyBzY3JvbGxpbmcgd2l0aCB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuCiAgICAgaWYgKG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQpAQCAt
MzI1MiwxNiArMzQ3NCwxMTMgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVy
T3JVcGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIKICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWROb2RlKG5vZGVJRCwg
Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMobGF5ZXIpLCBiYWNraW5nLT5ncmFwaGlj
c0xheWVyKCkpOwogICAgIGVsc2UKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0
ZVZpZXdwb3J0Q29uc3RyYWluZWROb2RlKG5vZGVJRCwgY29tcHV0ZUZpeGVkVmlld3BvcnRDb25z
dHJhaW50cyhsYXllciksIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7CisjZW5kaWYKIH0KIAog
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJWaWV3cG9ydENvbnN0cmFpbmVk
TGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAgIEFTU0VSVChtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMuY29udGFpbnMoJmxheWVyKSk7Ci0KKyNpZiBQTEFURk9STShJT1MpCisgICAg
VU5VU0VEX1BBUkFNKGxheWVyKTsKKyAgICAvLyBPbiBpT1MsIHdlIGJhdGNoLXVwZGF0ZSB2aWV3
cG9ydC1jb25zdHJhaW5lZCBsYXllcnMgaW4gdXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgp
LgorI2Vsc2UKICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIuYmFj
a2luZygpKQogICAgICAgICBiYWNraW5nLT5kZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKKyNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBIYXNoTWFwPFBsYXRm
b3JtTGF5ZXIqLCBzdGQ6OnVuaXF1ZV9wdHI8Vmlld3BvcnRDb25zdHJhaW50cz4+IExheWVyTWFw
OwordHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKj4gU3RpY2t5
Q29udGFpbmVyTWFwOworCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0ZXJBbGxW
aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCkKK3sKKyAgICAvLyBPbmx5IHRoZSBtYWluIGZyYW1l
IHNob3VsZCByZWdpc3RlciBmaXhlZC9zdGlja3kgbGF5ZXJzLgorICAgIGlmIChtX3JlbmRlclZp
ZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5
ZXJNYXAgbGF5ZXJNYXA7CisgICAgU3RpY2t5Q29udGFpbmVyTWFwIHN0aWNreUNvbnRhaW5lck1h
cDsKKworICAgIGZvciAoYXV0byBpdCA9IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5iZWdp
bigpLCBlbmQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqKml0OworICAgICAgICBBU1NF
UlQobGF5ZXIuaXNDb21wb3NpdGVkKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWV3
cG9ydENvbnN0cmFpbnRzPiBjb25zdHJhaW50czsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlcmVy
KCkuaXNTdGlja3lQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0cmFpbnRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxWaWV3cG9ydENvbnN0cmFpbnRzPihuZXcgU3RpY2t5UG9zaXRpb25WaWV3
cG9ydENvbnN0cmFpbnRzKGNvbXB1dGVTdGlja3lWaWV3cG9ydENvbnN0cmFpbnRzKGxheWVyKSkp
OworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1RvdWNoU2Nyb2xsYWJs
ZUxheWVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChpc1N0aWNreUluQWNjZWxlcmF0ZWRT
Y3JvbGxpbmdMYXllck9yVmlld3BvcnQobGF5ZXIsICZlbmNsb3NpbmdUb3VjaFNjcm9sbGFibGVM
YXllcikgJiYgZW5jbG9zaW5nVG91Y2hTY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZW5jbG9zaW5nVG91Y2hTY3JvbGxhYmxlTGF5ZXItPmlzQ29tcG9zaXRlZCgpKTsK
KyAgICAgICAgICAgICAgICBzdGlja3lDb250YWluZXJNYXAuYWRkKGxheWVyLmJhY2tpbmcoKS0+
Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGVuY2xvc2luZ1RvdWNoU2Nyb2xsYWJs
ZUxheWVyLT5iYWNraW5nKCktPnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29uc3RyYWludHMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFZpZXdwb3J0Q29uc3RyYWludHM+KG5ldyBGaXhlZFBvc2l0aW9uVmll
d3BvcnRDb25zdHJhaW50cyhjb21wdXRlRml4ZWRWaWV3cG9ydENvbnN0cmFpbnRzKGxheWVyKSkp
OworCisgICAgICAgIGxheWVyTWFwLmFkZChsYXllci5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBjb25zdHJhaW50cy5yZWxlYXNlKCkpOworICAgIH0KKyAgICAK
KyAgICBpZiAoQ2hyb21lQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50LT51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVyTWFwLCBz
dGlja3lDb250YWluZXJNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dW5y
ZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKQoreworICAgIC8vIE9ubHkgdGhl
IG1haW4gZnJhbWUgc2hvdWxkIHJlZ2lzdGVyIGZpeGVkL3N0aWNreSBsYXllcnMuCisgICAgaWYg
KG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoQ2hyb21lQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jaHJvbWVDbGllbnQoKSkg
eworICAgICAgICBMYXllck1hcCBsYXllck1hcDsKKyAgICAgICAgU3RpY2t5Q29udGFpbmVyTWFw
IHN0aWNreUNvbnRhaW5lck1hcDsKKyAgICAgICAgY2xpZW50LT51cGRhdGVWaWV3cG9ydENvbnN0
cmFpbmVkTGF5ZXJzKGxheWVyTWFwLCBzdGlja3lDb250YWluZXJNYXApOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkK
K3sKKyAgICBDaHJvbWVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpOworICAg
IGlmICghY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Nj
cm9sbGluZ0xheWVycy5iZWdpbigpLCBlbmQgPSBtX3Njcm9sbGluZ0xheWVycy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICB1cGRhdGVTY3JvbGxpbmdMYXllcldpdGhDbGllbnQoKipp
dCwgY2xpZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJB
bGxTY3JvbGxpbmdMYXllcnMoKQoreworICAgIENocm9tZUNsaWVudCogY2xpZW50ID0gdGhpcy0+
Y2hyb21lQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoYXV0byBpdCA9IG1fc2Nyb2xsaW5nTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fc2Nyb2xs
aW5nTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIm
IGxheWVyID0gKippdDsKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5
ZXIuYmFja2luZygpOworICAgICAgICBBU1NFUlQoYmFja2luZyk7CisgICAgICAgIGNsaWVudC0+
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmct
PnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsaW5nQ29u
dGVudHNMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIH0KK30KKworLy8gQ2FsbGVkIHdo
ZW4gdGhlIHNpemUgb2YgdGhlIGNvbnRlbnRzTGF5ZXIgY2hhbmdlcywgYW5kIHdoZW4gdGhlIGNv
bnRlbnRzTGF5ZXIgaXMgcmVwbGFjZWQgYnkgYW5vdGhlciBsYXllci4KK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllckFkZGVkT3JVcGRhdGVkKFJlbmRlckxheWVyKiBs
YXllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVuZGVyVmlldy5kb2N1bWVudCgpLmluUGFnZUNhY2hl
KCkpOworICAgIG1fc2Nyb2xsaW5nTGF5ZXJzLmFkZChsYXllcik7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllclJlbW92ZWQoUmVuZGVyTGF5ZXIqIGxheWVy
LCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNM
YXllcikKK3sKKyAgICBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRhdGUucmVtb3ZlKGxheWVy
KTsKKyAgICBtX3Njcm9sbGluZ0xheWVycy5yZW1vdmUobGF5ZXIpOworCisgICAgaWYgKG1fcmVu
ZGVyVmlldy5kb2N1bWVudCgpLmluUGFnZUNhY2hlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChDaHJvbWVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgpKQorICAgICAg
ICBjbGllbnQtPnJlbW92ZVNjcm9sbGluZ0xheWVyKGxheWVyLT5yZW5kZXJlcigpLmVsZW1lbnQo
KSwgc2Nyb2xsaW5nTGF5ZXIsIGNvbnRlbnRzTGF5ZXIpOworfQorI2VuZGlmCisKIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5
SUQgZGlzcGxheUlEKQogewogICAgIGlmIChtX2xheWVyVXBkYXRlcikKQEAgLTMzMjcsNiArMzY0
NiwxNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRMYXllckZsdXNoVGltZXJJ
Zk5lZWRlZCgpCiAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxlZExh
eWVyRmx1c2hEZWxheSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c3RhcnRJbml0aWFsTGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQoKQoreworICAg
IGlmICghbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCh0aHJvdHRsZWRMYXllckZsdXNoSW5pdGlh
bERlbGF5KTsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJG
bHVzaFRpbWVyRmlyZWQoVGltZXI8UmVuZGVyTGF5ZXJDb21wb3NpdG9yPiopCiB7CiAgICAgaWYg
KCFtX2hhc1BlbmRpbmdMYXllckZsdXNoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDkzNDkzYzI1NTEwNmZiMjg4Y2UzOWEzZTZl
NWIxNGFkMjBlMmQ1ZmMuLjYwYWE3MTA0NWFiODRjYjYxNmI1ZGY5MzEzYWQ4ZGI5YzJhZWUzMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKQEAgLTI3Myw2ICsyNzMsMjAgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlVmlld3BvcnRD
b25zdHJhaW50U3RhdHVzKFJlbmRlckxheWVyJik7CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENv
bnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
b2lkIHJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygpOworICAgIHZvaWQgdW5y
ZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKTsKKworICAgIHZvaWQgc2Nyb2xs
aW5nTGF5ZXJBZGRlZE9yVXBkYXRlZChSZW5kZXJMYXllciopOworICAgIHZvaWQgc2Nyb2xsaW5n
TGF5ZXJSZW1vdmVkKFJlbmRlckxheWVyKiwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIs
IFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpOworCisgICAgdm9pZCByZWdpc3RlckFsbFNj
cm9sbGluZ0xheWVycygpOworICAgIHZvaWQgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygp
OworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudCBJbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1
YWwgZmxvYXQgbWluaW11bURvY3VtZW50U2NhbGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dDb21wb3NpdGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24oKSBjb25zdCBP
VkVSUklERTsKKyNlbmRpZgogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAg
ICAgdm9pZCBzZXRUcmFja3NSZXBhaW50cyhib29sKTsKIApAQCAtMzgzLDYgKzM5NywxNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5n
KGNvbnN0IFJlbmRlckxheWVyJikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9ySW5kaXJlY3RSZWFzb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYsIGJvb2wgaGFzQ29tcG9z
aXRlZERlc2NlbmRhbnRzLCBib29sIGhhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50cywgUmVuZGVy
TGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24mKSBjb25zdDsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxpbmcoUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVDdXN0b21MYXllcnNBZnRl
ckZsdXNoKCk7CisKKyAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCgpIGNvbnN0OworCisg
ICAgdm9pZCBzdGFydEluaXRpYWxMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpOworI2VuZGlmCisK
ICAgICB2b2lkIGFkZFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciYpOwogICAg
IHZvaWQgcmVnaXN0ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXll
ciYpOwogICAgIHZvaWQgdW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJM
YXllciYpOwpAQCAtNDUwLDYgKzQ3NCwxMCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0xheWVyPiBtX2NsaXBMYXllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NMYXllcj4gbV9zY3JvbGxMYXllcjsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBIYXNoU2V0
PFJlbmRlckxheWVyKj4gbV9zY3JvbGxpbmdMYXllcnM7CisgICAgSGFzaFNldDxSZW5kZXJMYXll
cio+IG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZTsKKyNlbmRpZgogICAgIEhhc2hTZXQ8
UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAgICAgSGFzaFNldDxS
ZW5kZXJMYXllcio+IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcklu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaApp
bmRleCBkMjU3ZTM5Y2JlZDE1ZWM1YjI1ZTEyM2FlMTU0OTBiMDE1ZTVlMmI5Li5lOTVmM2JmOGFl
NTM4MGYzNzI5ZDgzNDExYjBlY2NjYjYyYWJjMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oCkBAIC04OSw3ICs4OSwxNiBAQCBwcml2
YXRlOgogCiAgICAgc3RhdGljIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBPd25QdHI8Rmls
dGVySW5mbz4+JiBtYXAoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwdXNoCisjaWYgZGVmaW5lZChfX2hhc193YXJuaW5nKSAmJiBfX2hhc193YXJuaW5n
KCItV3VudXNlZC1wcml2YXRlLWZpZWxkIikKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VudXNlZC1wcml2YXRlLWZpZWxkIgorI2VuZGlmCisjZW5kaWYKICAgICBSZW5kZXJM
YXllciYgbV9sYXllcjsKKyNpZiBQTEFURk9STShJT1MpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisjZW5kaWYKIAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9yZW5k
ZXJlcjsKICAgICBMYXlvdXRSZWN0IG1fZGlydHlTb3VyY2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggMTM0YmE5Zjg4NDYyMmFmMDNmZjY5
N2JhMDdkYTU5NjAxZDY4NTQ1OC4uYjYxMmI1YTkwODU5YTc3YjY1ZTNlODY4N2RkZmNhMWVmY2Y2
YzRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBA
IC00OCwxMCArNDgsMjkgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8bWF0aC5o
PgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgc2l6ZV90IHNlbGVjdGVkT3B0aW9uQ291bnQo
Y29uc3QgUmVuZGVyTWVudUxpc3QmIHJlbmRlck1lbnVMaXN0KQoreworICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSByZW5kZXJNZW51TGlzdC5zZWxlY3RFbGVtZW50
KCkubGlzdEl0ZW1zKCk7CisgICAgc2l6ZV90IG51bWJlck9mSXRlbXMgPSBsaXN0SXRlbXMuc2l6
ZSgpOworCisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mSXRlbXM7ICsraSkgeworICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdO
YW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbXNbaV0pLT5zZWxl
Y3RlZCgpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50Owor
fQorI2VuZGlmCisKIFJlbmRlck1lbnVMaXN0OjpSZW5kZXJNZW51TGlzdChIVE1MU2VsZWN0RWxl
bWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAgICAgOiBSZW5kZXJG
bGV4aWJsZUJveChlbGVtZW50LCBzdGQ6Om1vdmUoc3R5bGUpKQogICAgICwgbV9idXR0b25UZXh0
KG51bGxwdHIpCkBAIC01OSwxNSArNzgsMTkgQEAgUmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVM
aXN0KEhUTUxTZWxlY3RFbGVtZW50JiBlbGVtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPgogICAg
ICwgbV9uZWVkc09wdGlvbnNXaWR0aFVwZGF0ZSh0cnVlKQogICAgICwgbV9vcHRpb25zV2lkdGgo
MCkKICAgICAsIG1fbGFzdEFjdGl2ZUluZGV4KC0xKQorI2lmICFQTEFURk9STShJT1MpCiAgICAg
LCBtX3BvcHVwSXNWaXNpYmxlKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKIFJlbmRlck1lbnVMaXN0
Ojp+UmVuZGVyTWVudUxpc3QoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1fcG9w
dXApCiAgICAgICAgIG1fcG9wdXAtPmRpc2Nvbm5lY3RDbGllbnQoKTsKICAgICBtX3BvcHVwID0g
MDsKKyNlbmRpZgogfQogCiBib29sIFJlbmRlck1lbnVMaXN0OjpjYW5CZVJlcGxhY2VkV2l0aElu
bGluZVJ1bkluKCkgY29uc3QKQEAgLTExOCw2ICsxNDEsMjYgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAgICAgICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKExF
RlQpOwogICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYg
bV9idXR0b25UZXh0LT50ZXh0KCktPmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdI
VF9UT19MRUZUKSA/IFJUTCA6IExUUjsKICAgICAgICAgaW5uZXJTdHlsZS5zZXREaXJlY3Rpb24o
ZGlyZWN0aW9uKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LnBhZ2UoKS0+Y2hyb21lKCkuc2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0Rp
cmVjdGlvbigpKSB7CisgICAgICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKHN0eWxlKCkuZGly
ZWN0aW9uKCkgPT0gTFRSID8gTEVGVCA6IFJJR0hUKTsKKyAgICAgICAgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb247CisgICAgICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaTsKKyAgICAgICAgaWYg
KG11bHRpcGxlKCkgJiYgc2VsZWN0ZWRPcHRpb25Db3VudCgqdGhpcykgIT0gMSkgeworICAgICAg
ICAgICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS0+
ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUlRMIDogTFRS
OworICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBVQk5vcm1hbDsKKyAgICAgICAgfSBlbHNlIGlm
IChtX29wdGlvblN0eWxlKSB7CisgICAgICAgICAgICBkaXJlY3Rpb24gPSBtX29wdGlvblN0eWxl
LT5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgIHVuaWNvZGVCaWRpID0gbV9vcHRpb25TdHlsZS0+
dW5pY29kZUJpZGkoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9
IHN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgICAgICAgICB1bmljb2RlQmlkaSA9IHN0eWxlKCku
dW5pY29kZUJpZGkoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubmVyU3R5bGUuc2V0RGlyZWN0
aW9uKGRpcmVjdGlvbik7CisgICAgICAgIGlubmVyU3R5bGUuc2V0VW5pY29kZUJpZGkodW5pY29k
ZUJpZGkpOworICAgIH0KKyNlbHNlCiAgICAgfSBlbHNlIGlmIChtX29wdGlvblN0eWxlICYmIGRv
Y3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5zZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVX
cml0aW5nRGlyZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKChtX29wdGlvblN0eWxlLT5kaXJlY3Rp
b24oKSAhPSBpbm5lclN0eWxlLmRpcmVjdGlvbigpIHx8IG1fb3B0aW9uU3R5bGUtPnVuaWNvZGVC
aWRpKCkgIT0gaW5uZXJTdHlsZS51bmljb2RlQmlkaSgpKSkKICAgICAgICAgICAgIG1faW5uZXJC
bG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CkBAIC0xMjUsNiArMTY4
LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAgICAgICAgIGlu
bmVyU3R5bGUuc2V0RGlyZWN0aW9uKG1fb3B0aW9uU3R5bGUtPmRpcmVjdGlvbigpKTsKICAgICAg
ICAgaW5uZXJTdHlsZS5zZXRVbmljb2RlQmlkaShtX29wdGlvblN0eWxlLT51bmljb2RlQmlkaSgp
KTsKICAgICB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIH0KIAogSFRNTFNlbGVjdEVsZW1l
bnQmIFJlbmRlck1lbnVMaXN0OjpzZWxlY3RFbGVtZW50KCkgY29uc3QKQEAgLTIwNyw5ICsyNTEs
MTEgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICBt
X25lZWRzT3B0aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CiAgICAgfQogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBpZiAobV9wb3B1cElzVmlzaWJsZSkKICAgICAgICAgbV9wb3B1cC0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKICAgICBlbHNlCisjZW5kaWYKICAgICAgICAgc2V0VGV4dEZyb21PcHRp
b24oc2VsZWN0RWxlbWVudCgpLnNlbGVjdGVkSW5kZXgoKSk7CiB9CiAKQEAgLTIyOCw2ICsyNzQs
MTQgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbklu
ZGV4KQogICAgICAgICB9CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChtdWx0
aXBsZSgpKSB7CisgICAgICAgIHNpemVfdCBjb3VudCA9IHNlbGVjdGVkT3B0aW9uQ291bnQoKnRo
aXMpOworICAgICAgICBpZiAoY291bnQgIT0gMSkKKyAgICAgICAgICAgIHRleHQgPSBodG1sU2Vs
ZWN0TXVsdGlwbGVJdGVtcyhjb3VudCk7CisgICAgfQorI2VuZGlmCisKICAgICBzZXRUZXh0KHRl
eHQuc3RyaXBXaGl0ZVNwYWNlKCkpOwogICAgIGRpZFVwZGF0ZUFjdGl2ZU9wdGlvbihvcHRpb25J
bmRleCk7CiB9CkBAIC0zMDIsNiArMzU2LDEzIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
RGlydHkoZmFsc2UpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQKK3ZvaWQgUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisjZWxzZQogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkK
IHsKICAgICBpZiAobV9wb3B1cElzVmlzaWJsZSkKQEAgLTMyNSwxMSArMzg2LDE0IEBAIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCiAgICAgYWJzQm91bmRzLnNldExvY2F0aW9uKHJv
dW5kZWRJbnRQb2ludChhYnNUb3BMZWZ0KSk7CiAgICAgbV9wb3B1cC0+c2hvdyhhYnNCb3VuZHMs
ICZ2aWV3KCkuZnJhbWVWaWV3KCksIHNlbGVjdEVsZW1lbnQoKS5vcHRpb25Ub0xpc3RJbmRleChz
ZWxlY3RFbGVtZW50KCkuc2VsZWN0ZWRJbmRleCgpKSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZW5k
ZXJNZW51TGlzdDo6aGlkZVBvcHVwKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICht
X3BvcHVwKQogICAgICAgICBtX3BvcHVwLT5oaWRlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5k
ZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlT25D
aGFuZ2UpCkBAIC01NjQsNyArNjI4LDkgQEAgaW50IFJlbmRlck1lbnVMaXN0OjpzZWxlY3RlZElu
ZGV4KCkgY29uc3QKIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRlKCkKIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIG1fcG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKKyNlbmRpZgog
fQogCiBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAppbmRl
eCAzNjczNGEzZTVkYjQxYjQzNTlmNDUxMTA1NzdiMWE3MDAyY2QzMDk1Li5iMmIxNzUyNmIzYjVl
Y2VmZDlhNjg0NTEyYWFjZTIwYTk3OGYyZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuaApAQCAtNDgsNyArNDgsOSBAQCBwdWJsaWM6CiAKICAgICBIVE1MU2Vs
ZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIGNvbnN0OwogCisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cElzVmlzaWJs
ZTsgfQorI2VuZGlmCiAgICAgdm9pZCBzaG93UG9wdXAoKTsKICAgICB2b2lkIGhpZGVQb3B1cCgp
OwogCkBAIC0xNDUsOCArMTQ3LDEwIEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG1fb3B0aW9uU3R5bGU7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFJlZlB0cjxQb3B1
cE1lbnU+IG1fcG9wdXA7CiAgICAgYm9vbCBtX3BvcHVwSXNWaXNpYmxlOworI2VuZGlmCiB9Owog
CiB0ZW1wbGF0ZTw+IGlubGluZSBib29sIGlzUmVuZGVyZXJPZlR5cGU8Y29uc3QgUmVuZGVyTWVu
dUxpc3Q+KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIHsgcmV0dXJuIHJlbmRlcmVyLmlz
TWVudUxpc3QoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApp
bmRleCA0OWM5ZjdiOGQxNDkxZjM2YTdlMDZjZDI0MjM1MmI4MjdjNmQ2ZmVjLi4xZDk4MWVjNzhi
MWQ4ODQwZjkwZGVmNmY0NTM2ODg4MDhlOTY1YjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNjcsNiArNjcsMTAgQEAKICNpbmNsdWRlICJTVkdSZW5k
ZXJTdXBwb3J0LmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTZWxl
Y3Rpb25SZWN0LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwpAQCAtMTEyNyw2ICsxMTMxLDU3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpwYWludE91dGxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJlY3QmIHBh
aW50UmVjCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
IH0KIAorLy8gRklYTUU6IE1ha2UgdGhpcyByZXR1cm4gYW4gdW5zaWduZWQgaW50ZWdlcj8KK2lu
dCBSZW5kZXJPYmplY3Q6OmNvbHVtbk51bWJlckZvck9mZnNldChpbnQgb2Zmc2V0KQoreworICAg
IGludCBjb2x1bW5OdW1iZXIgPSAwOworICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sg
PSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gY29udGFp
bmluZ0Jsb2NrLT52aWV3KCk7CisgICAgY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IHZp
ZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5wYWdlKCktPnBhZ2luYXRpb24oKTsKKyAgICBpZiAocGFn
aW5hdGlvbi5tb2RlID09IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKQorICAgICAgICByZXR1cm4g
Y29sdW1uTnVtYmVyOworCisgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbyA9IHZpZXcuY29sdW1u
SW5mbygpOworICAgIGlmIChjb2x1bW5JbmZvICYmIGNvbHVtbkluZm8tPnByb2dyZXNzaW9uQXhp
cygpID09IENvbHVtbkluZm86OkJsb2NrQXhpcykgeworICAgICAgICBpZiAoIWNvbHVtbkluZm8t
PnByb2dyZXNzaW9uSXNSZXZlcnNlZCgpKQorICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gKHBh
Z2luYXRpb24ucGFnZUxlbmd0aCArIHBhZ2luYXRpb24uZ2FwIC0gb2Zmc2V0KSAvIChwYWdpbmF0
aW9uLnBhZ2VMZW5ndGggKyBwYWdpbmF0aW9uLmdhcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvbHVtbk51bWJlciA9IG9mZnNldCAvIChwYWdpbmF0aW9uLnBhZ2VMZW5ndGggKyBwYWdp
bmF0aW9uLmdhcCk7CisgICAgfQorICAgIHJldHVybiBjb2x1bW5OdW1iZXI7Cit9CisKKyNpZiBQ
TEFURk9STShJT1MpCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgaW4gc3Bpcml0IHRvIFJl
bmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZSwgYnV0IHJldHVybnMgcmVjdGFuZ2xlcwor
Ly8gd2hpY2ggYXJlIGFubm90YXRlZCB3aXRoIGFkZGl0aW9uYWwgc3RhdGUgd2hpY2ggaGVscHMg
dGhlIGlQaG9uZSBkcmF3IHNlbGVjdGlvbnMgaW4gaXRzIHVuaXF1ZSB3YXkuCisvLyBObyBhbm5v
dGF0aW9ucyBhcmUgYWRkZWQgaW4gdGhpcyBjbGFzcy4KKy8vIEZJWE1FOiBNb3ZlIHRvIFJlbmRl
clRleHQgd2l0aCBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoKT8KK3ZvaWQgUmVuZGVyT2JqZWN0Ojpj
b2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cywgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsK
KworICAgIGlmICghZmlyc3RDaGlsZFNsb3coKSkgeworICAgICAgICAvLyBGSVhNRTogV2ViS2l0
J3MgcG9zaXRpb24gZm9yIGFuIGVtcHR5IHNwYW4gYWZ0ZXIgYSBCUiBpcyBpbmNvcnJlY3QsIHNv
IHdlIGNhbid0IHRydXN0IAorICAgICAgICAvLyBxdWFkcyBmb3IgdGhlbS4gV2UgZG9uJ3QgbmVl
ZCBzZWxlY3Rpb24gcmVjdHMgZm9yIHRob3NlIGFueXdheSB0aG91Z2gsIHNpbmNlIHRoZXkgCisg
ICAgICAgIC8vIGFyZSBqdXN0IGVtcHR5IGNvbnRhaW5lcnMuIFNlZSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzU4Pi4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBw
cmV2aW91cyA9IHByZXZpb3VzU2libGluZygpOworICAgICAgICBOb2RlKiBub2RlID0gdGhpcy0+
bm9kZSgpOworICAgICAgICBpZiAoIXByZXZpb3VzIHx8ICFwcmV2aW91cy0+aXNCUigpIHx8ICFu
b2RlIHx8ICFub2RlLT5pc0NvbnRhaW5lck5vZGUoKSB8fCAhaXNJbmxpbmUoKSkgeworICAgICAg
ICAgICAgLy8gRm9yIGlubGluZSBlbGVtZW50cyB3ZSBkb24ndCB1c2UgYWJzb2x1dGVRdWFkcywg
c2luY2UgaXQgdGFrZXMgaW50byBhY2NvdW50IGNvbnRpbnVhdGlvbnMgYW5kIGxlYWRzIHRvIHdy
b25nIHJlc3VsdHMuCisgICAgICAgICAgICBhYnNvbHV0ZVF1YWRzRm9yU2VsZWN0aW9uKHF1YWRz
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0
YXJ0OworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEF0KHN0YXJ0KTsg
Y2hpbGQgJiYgb2Zmc2V0IDwgZW5kOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpLCArK29m
ZnNldCkKKyAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZlF1YWRzID0gcXVhZHMuc2l6ZSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlF1YWRzOyArK2kpCisgICAgICAgIHJlY3RzLmFwcGVu
ZChTZWxlY3Rpb25SZWN0KHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCksIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCksIGNvbHVtbk51bWJlckZvck9mZnNldChxdWFkc1tpXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpLngoKSkpKTsKK30KKyNlbmRpZgorCiBJbnRSZWN0IFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdAogewog
ICAgIGlmICh1c2VUcmFuc2Zvcm1zKSB7CkBAIC0yMDkzLDYgKzIxNDgsMTEgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbnltb3VzV3JhcHBlcnMoKQogCiB2b2lkIFJl
bmRlck9iamVjdDo6ZGVzdHJveSgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNM
YXllcigpKQorICAgICAgICB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT53
aWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgorCiAgICAgd2lsbEJlRGVzdHJveWVkKCk7CiAgICAg
ZGVsZXRlIHRoaXM7CiB9CkBAIC0yMTY3LDYgKzIyMjcsMTEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJPYmplY3Q6OmlubmVyTGlu
ZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0
KCk7Cit9CisKIFJlbmRlclN0eWxlKiBSZW5kZXJPYmplY3Q6OmdldENhY2hlZFBzZXVkb1N0eWxl
KFBzZXVkb0lkIHBzZXVkbywgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAg
IGlmIChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShwc2V1ZG8pKQpAQCAtMjM0Myw5ICsyNDA4LDE0IEBAIGJvb2wgUmVuZGVyT2JqZWN0
Ojp3aWxsUmVuZGVySW1hZ2UoQ2FjaGVkSW1hZ2UqKQogICAgIGlmIChzdHlsZSgpLnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKS0+dGltZXJzUGF1c2VkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAgLy8gV2Ugd2lsbCBub3QgcmVuZGVyIGEgbmV3IGlt
YWdlIHdoZW4gQWN0aXZlIERPTSBpcyBzdXNwZW5kZWQKICAgICBpZiAoZG9jdW1lbnQoKS5hY3Rp
dmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgogCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGEgd2luZG93IChpLmUuLCB3ZSdyZSBkb3JtYW50
IGZyb20gYmVpbmcgcHV0IGluIHRoZSBiL2YgY2FjaGUgb3IgaW4gYSBiYWNrZ3JvdW5kIHRhYikK
ICAgICAvLyB0aGVuIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIGVpdGhlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA5YmY1Y2ZiODg0ZDE3MDQ2NGVjZWY3YmYy
OTM1MjFiZmYwNGY1MDYyLi4zNWFjMWYxNWFiMjg1ZjFiMmFlYzE3M2JlNDcxNDA1OTcxYmUzOTE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02NSw2ICs2NSw5
IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKICNpZiBFTkFCTEUoU1ZHKQogY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCitjbGFzcyBT
ZWxlY3Rpb25SZWN0OworI2VuZGlmCiAKIHN0cnVjdCBQYWludEluZm87CiAKQEAgLTEwOCw3ICsx
MTEsMTEgQEAgZW51bSBNYXBDb29yZGluYXRlc01vZGUgewogfTsKIHR5cGVkZWYgdW5zaWduZWQg
TWFwQ29vcmRpbmF0ZXNGbGFnczsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NvbnN0IGludCBjYXJl
dFdpZHRoID0gMjsgLy8gVGhpcyB2YWx1ZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggVUlL
aXQuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1ODA2MDE+LgorI2Vsc2UKIGNvbnN0IGludCBjYXJl
dFdpZHRoID0gMTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKSB8fCBF
TkFCTEUoRFJBR0dBQkxFX1JFR0lPTikKIHN0cnVjdCBBbm5vdGF0ZWRSZWdpb25WYWx1ZSB7CkBA
IC02NTMsNyArNjYwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0xheWVyKGJvb2wgYiA9
IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0SGFzTGF5ZXIoYik7IH0KICAgICB2b2lkIHNldEhhc1Ry
YW5zZm9ybShib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEhhc1RyYW5zZm9ybShiKTsg
fQogICAgIHZvaWQgc2V0SGFzUmVmbGVjdGlvbihib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRz
LnNldEhhc1JlZmxlY3Rpb24oYik7IH0KLSAgICAKKworICAgIC8vIEhvb2sgc28gdGhhdCBSZW5k
ZXJUZXh0Q29udHJvbCBjYW4gcmV0dXJuIHRoZSBsaW5lIGhlaWdodCBvZiBpdHMgaW5uZXIgcmVu
ZGVyZXIuCisgICAgLy8gRm9yIG90aGVyIHJlbmRlcmVycywgdGhlIHZhbHVlIGlzIHRoZSBzYW1l
IGFzIGxpbmVIZWlnaHQoZmFsc2UpLgorICAgIHZpcnR1YWwgaW50IGlubmVyTGluZUhlaWdodCgp
IGNvbnN0OworCiAgICAgLy8gdXNlZCBmb3IgZWxlbWVudCBzdGF0ZSB1cGRhdGVzIHRoYXQgY2Fu
bm90IGJlIGZpeGVkIHdpdGggYQogICAgIC8vIHJlcGFpbnQgYW5kIGRvIG5vdCBuZWVkIGEgcmVs
YXlvdXQKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSB7IH0KQEAgLTcwNyw3
ICs3MTgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29u
dGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVw
ZW5kc09uUG9pbnQgPSAwKSBjb25zdDsKICAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIGFu
IG9iamVjdCB1cCB0aGUgY29udGFpbmVyKCkgY2hhaW4uIEFzc2VydHMgdGhhdCBub25lIG9mIHRo
ZSBpbnRlcm1lZGlhdGUgb2JqZWN0cyBoYXZlIHRyYW5zZm9ybXMuCiAgICAgTGF5b3V0U2l6ZSBv
ZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgCisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2ln
bmVkIGVuZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Cisg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHNGb3JTZWxlY3Rpb24oVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzKSBjb25zdCB7IGFic29sdXRlUXVhZHMocXVhZHMpOyB9CisjZW5kaWYKKwogICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91
dFBvaW50JikgY29uc3QgeyB9CiAKICAgICAvLyBGSVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQg
Z28gYXdheSBldmVudHVhbGx5CkBAIC05MDUsOSArOTIxLDEwIEBAIHB1YmxpYzoKIAogICAgIFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigp
IGNvbnN0OwogCi1wcm90ZWN0ZWQ6CiAgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhp
Y3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBCb3hTaWRlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLCBFQm9yZGVyU3R5bGUsIGludCBhZGpidzEs
IGludCBhZGpidzIsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UpOworcHJvdGVjdGVkOgorICAgIGlu
dCBjb2x1bW5OdW1iZXJGb3JPZmZzZXQoaW50IG9mZnNldCk7CiAKICAgICB2b2lkIHBhaW50Rm9j
dXNSaW5nKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKICAg
ICB2b2lkIHBhaW50T3V0bGluZShQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKaW5kZXggNmFmYTY1NDU0YTIx
ZjE0MjQ4NTUyYTZkY2E4N2U1M2NkYjgzMGY3Mi4uNTQ4ZDU5ZDFkOTc4MGU5NGQxYWYxMzRmMTRk
ZWM0NjRhNjBhNmFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXIuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBvcGFjaXR5KCk7CiAK
KyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3Jv
bGxiYXJQYXJ0LCBQc2V1ZG9JZCk7CisKIHByaXZhdGU6CiAgICAgUmVuZGVyU2Nyb2xsYmFyKFNj
cm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEVsZW1lbnQqLCBGcmFtZSopOwog
CkBAIC03NSw3ICs3Nyw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclBh
cnRzKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IGdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFBzZXVkb0lkKTsKICAgICB2
b2lkIHVwZGF0ZVNjcm9sbGJhclBhcnQoU2Nyb2xsYmFyUGFydCwgYm9vbCBkZXN0cm95ID0gZmFs
c2UpOwogCiAgICAgLy8gVGhpcyBTY3JvbGxiYXIoV2lkZ2V0KSBtYXkgb3V0bGl2ZSB0aGUgRE9N
IHdoaWNoIGNyZWF0ZWQgaXQgKGR1cmluZyB0ZWFyIGRvd24pLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKaW5kZXggODA0Yjc1YjhkOTg2Mzg1NjJh
YWFkZGRkN2Q4YTcyODYyZGE1NWI1Ny4uMTRiNGM2NTFkOTg0YWZjZGJkZDM4MzMzOWM1NTVhYmM1
YjlmOTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmll
bGQuY3BwCkBAIC0yMTgsNiArMjE4LDcgQEAgdm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVD
aGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogCiBTdHJpbmcgUmVu
ZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGludCBzaXplID0gbGlzdFNpemUoKTsKICAgICBpZiAoc2l6
ZSA9PSAxKSB7CiAgICAgICAgIEFTU0VSVCghbGlzdEluZGV4KTsKQEAgLTIyNSwxMCArMjI2LDEz
IEBAIFN0cmluZyBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdAogICAgIH0KICAgICBpZiAoIWxpc3RJbmRleCkKICAgICAgICAgcmV0dXJuIHNlYXJj
aE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKTsKKyNlbmRpZgogICAgIGlmIChpdGVtSXNTZXBhcmF0
b3IobGlzdEluZGV4KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAoc2l6ZSAtIDEpKQog
ICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KCk7CisjZW5k
aWYKICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlc1tsaXN0SW5kZXggLSAxXTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDE3MGUzM2QzZDc1ZTNjN2Mw
MDllZjM5NzVlNzZjNWRhY2E0ZGJlNTUuLmQxMmI3NjBmZTBiMDkyNzRjYWZmY2E5NzNkZmQzN2M3
ZmZmNTg4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ3
LDYgKzQ3LDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUg
IkxvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiU2VsZWN0aW9uUmVjdC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1
c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIApAQCAtMzAwLDYgKzMwOCw4MyBAQCBWZWN0b3I8SW50
UmVjdD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQsCiAgICAgcmV0dXJuIG1fbGluZUJveGVzLmFic29sdXRlUmVjdHNGb3JSYW5n
ZSgqdGhpcywgc3RhcnQsIGVuZCwgdXNlU2VsZWN0aW9uSGVpZ2h0LCB3YXNGaXhlZCk7CiB9CiAK
KyNpZiBQTEFURk9STShJT1MpCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgaW4gc3Bpcml0
IHRvIGFkZExpbmVCb3hSZWN0cywgYnV0IHJldHVybnMgcmVjdGFuZ2xlcworLy8gd2hpY2ggYXJl
IGFubm90YXRlZCB3aXRoIGFkZGl0aW9uYWwgc3RhdGUgd2hpY2ggaGVscHMgdGhlIGlQaG9uZSBk
cmF3IHNlbGVjdGlvbnMgaW4gaXRzIHVuaXF1ZSB3YXkuCisvLyBGdWxsIGFubm90YXRpb25zIGFy
ZSBhZGRlZCBpbiB0aGlzIGNsYXNzLgordm9pZCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
UmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCkKK3sKKyAgICAvLyBGSVhNRTogV29yayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVkIGlz
c3Vlcy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB1bnNpZ25lZHMsIGFuZCBpcyBvZnRlbiBwYXNzZWQg
VUlOVF9NQVgKKyAgICAvLyB0byBtZWFuICJhbGwgdGhlIHdheSB0byB0aGUgZW5kIi4gSW5saW5l
VGV4dEJveCBjb29yZGluYXRlcyBhcmUgdW5zaWduZWRzLCBzbyBjaGFuZ2luZyB0aGlzIAorICAg
IC8vIGZ1bmN0aW9uIHRvIHRha2UgaW50cyBjYXVzZXMgdmFyaW91cyBpbnRlcm5hbCBtaXNtYXRj
aGVzLiBCdXQgc2VsZWN0aW9uUmVjdCB0YWtlcyBpbnRzLCBhbmQgCisgICAgLy8gcGFzc2luZyBV
SU5UX01BWCB0byBpdCBjYXVzZXMgdHJvdWJsZS4gSWRlYWxseSB3ZSdkIGNoYW5nZSBzZWxlY3Rp
b25SZWN0IHRvIHRha2UgdW5zaWduZWRzLCBidXQgCisgICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBt
YW55IHJpcHBsZSBlZmZlY3RzLCBzbyBmb3Igbm93IHdlJ2xsIGp1c3QgY2xhbXAgb3VyIHVuc2ln
bmVkIHBhcmFtZXRlcnMgdG8gSU5UX01BWC4KKyAgICBBU1NFUlQoZW5kID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB8fCBlbmQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSk7CisgICAgQVNTRVJUKHN0YXJ0IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpOworICAgIHN0YXJ0ID0gc3RkOjptaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgZW5kID0gc3RkOjpt
aW4oZW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOworCisgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsg
Ym94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgTGF5b3V0UmVjdCByZWN0
OworICAgICAgICAvLyBOb3RlLCBib3gtPmVuZCgpIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBs
YXN0IGNoYXJhY3Rlciwgbm90IHRoZSBpbmRleCBwYXN0IGl0LgorICAgICAgICBpZiAoc3RhcnQg
PD0gYm94LT5zdGFydCgpICYmIGJveC0+ZW5kKCkgPCBlbmQpCisgICAgICAgICAgICByZWN0ID0g
Ym94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgdW5zaWduZWQgcmVhbEVuZCA9IHN0ZDo6bWluKGJveC0+ZW5kKCkgKyAxLCBlbmQp
OworICAgICAgICAgICAgcmVjdCA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFs
RW5kKTsKKyAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3gtPnJvb3QoKS5pc0ZpcnN0QWZ0
ZXJQYWdlQnJlYWsoKSkgeworICAgICAgICAgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpCisg
ICAgICAgICAgICAgICAgcmVjdC5zaGlmdFlFZGdlVG8oYm94LT5yb290KCkubGluZVRvcFdpdGhM
ZWFkaW5nKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlY3Quc2hpZnRY
RWRnZVRvKGJveC0+cm9vdCgpLmxpbmVUb3BXaXRoTGVhZGluZygpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxv
Y2soKTsKKyAgICAgICAgLy8gTWFwIHJlY3QsIGV4dGVuZGVkIGxlZnQgdG8gbGVmdE9mZnNldCwg
YW5kIHJpZ2h0IHRvIHJpZ2h0T2Zmc2V0LCB0aHJvdWdoIHRyYW5zZm9ybXMgdG8gZ2V0IG1pblgg
YW5kIG1heFguCisgICAgICAgIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMgY2FjaGUoKmNv
bnRhaW5pbmdCbG9jayk7CisgICAgICAgIExheW91dFVuaXQgbGVmdE9mZnNldCA9IGNvbnRhaW5p
bmdCbG9jay0+bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoKmNvbnRhaW5pbmdCbG9jaywgYm94
LT5sb2dpY2FsVG9wKCksIGNhY2hlKTsKKyAgICAgICAgTGF5b3V0VW5pdCByaWdodE9mZnNldCA9
IGNvbnRhaW5pbmdCbG9jay0+bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KCpjb250YWluaW5n
QmxvY2ssIGJveC0+bG9naWNhbFRvcCgpLCBjYWNoZSk7CisgICAgICAgIExheW91dFJlY3QgZXh0
ZW50c1JlY3QgPSByZWN0OworICAgICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgeworICAg
ICAgICAgICAgZXh0ZW50c1JlY3Quc2V0WChsZWZ0T2Zmc2V0KTsKKyAgICAgICAgICAgIGV4dGVu
dHNSZWN0LnNldFdpZHRoKHJpZ2h0T2Zmc2V0IC0gbGVmdE9mZnNldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBleHRlbnRzUmVjdC5zZXRZKGxlZnRPZmZzZXQpOworICAgICAgICAg
ICAgZXh0ZW50c1JlY3Quc2V0SGVpZ2h0KHJpZ2h0T2Zmc2V0IC0gbGVmdE9mZnNldCk7CisgICAg
ICAgIH0KKyAgICAgICAgZXh0ZW50c1JlY3QgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChleHRlbnRzUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIGlmICghYm94
LT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgICAgIGV4dGVudHNSZWN0ID0gZXh0ZW50c1JlY3Qu
dHJhbnNwb3NlZFJlY3QoKTsKKyAgICAgICAgYm9vbCBpc0ZpcnN0T25MaW5lID0gIWJveC0+cHJl
dmlvdXNPbkxpbmVFeGlzdHMoKTsKKyAgICAgICAgYm9vbCBpc0xhc3RPbkxpbmUgPSAhYm94LT5u
ZXh0T25MaW5lRXhpc3RzKCk7CisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzUnVieUJh
c2UoKSB8fCBjb250YWluaW5nQmxvY2stPmlzUnVieVRleHQoKSkKKyAgICAgICAgICAgIGlzTGFz
dE9uTGluZSA9ICFjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpLT5pbmxpbmVCb3hX
cmFwcGVyKCktPm5leHRPbkxpbmVFeGlzdHMoKTsKKworICAgICAgICBib29sIGNvbnRhaW5zU3Rh
cnQgPSBib3gtPnN0YXJ0KCkgPD0gc3RhcnQgJiYgYm94LT5lbmQoKSArIDEgPj0gc3RhcnQ7Cisg
ICAgICAgIGJvb2wgY29udGFpbnNFbmQgPSBib3gtPnN0YXJ0KCkgPD0gZW5kICYmIGJveC0+ZW5k
KCkgKyAxID49IGVuZDsKKworICAgICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKKyAgICAgICAg
SW50UmVjdCBhYnNSZWN0ID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCksIGZh
bHNlLCAmaXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgYm9vbCBib3hJ
c0hvcml6b250YWwgPSAhYm94LT5pc1NWR0lubGluZVRleHRCb3goKSA/IGJveC0+aXNIb3Jpem9u
dGFsKCkgOiAhc3R5bGUoKS5zdmdTdHlsZSgpLmlzVmVydGljYWxXcml0aW5nTW9kZSgpOworICAg
ICAgICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBhbiBpbmxpbmUgZWxlbWVudCwgd2Ug
d2FudCB0byBjaGVjayB0aGUgaW5saW5lQm94V3JhcHBlciBvcmllbnRhdGlvbgorICAgICAgICAv
LyB0byBkZXRlcm1pbmUgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBibG9jay4gSW4gdGhpcyBjYXNl
IHdlIGFsc28gdXNlIHRoZSBpbmxpbmVCb3hXcmFwcGVyIHRvCisgICAgICAgIC8vIGRldGVybWlu
ZSBpZiB0aGUgZWxlbWVudCBpcyB0aGUgbGFzdCBvbiB0aGUgbGluZS4KKyAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aW5saW5lQm94V3JhcHBlcigpKSB7CisgICAgICAgICAgICBpZiAoY29u
dGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCktPmlzSG9yaXpvbnRhbCgpICE9IGJveElz
SG9yaXpvbnRhbCkgeworICAgICAgICAgICAgICAgIGJveElzSG9yaXpvbnRhbCA9IGNvbnRhaW5p
bmdCbG9jay0+aW5saW5lQm94V3JhcHBlcigpLT5pc0hvcml6b250YWwoKTsKKyAgICAgICAgICAg
ICAgICBpc0xhc3RPbkxpbmUgPSAhY29udGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCkt
Pm5leHRPbkxpbmVFeGlzdHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJlY3RzLmFwcGVuZChTZWxlY3Rpb25SZWN0KGFic1JlY3QsIGJveC0+ZGlyZWN0aW9uKCksIGV4
dGVudHNSZWN0LngoKSwgZXh0ZW50c1JlY3QubWF4WCgpLCBleHRlbnRzUmVjdC5tYXhZKCksIDAs
IGJveC0+aXNMaW5lQnJlYWsoKSwgaXNGaXJzdE9uTGluZSwgaXNMYXN0T25MaW5lLCBjb250YWlu
c1N0YXJ0LCBjb250YWluc0VuZCwgYm94SXNIb3Jpem9udGFsLCBpc0ZpeGVkLCBjb250YWluaW5n
QmxvY2stPmlzUnVieVRleHQoKSwgY29sdW1uTnVtYmVyRm9yT2Zmc2V0KGFic1JlY3QueCgpKSkp
OworICAgIH0KK30KKyNlbmRpZgorCiBWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzQ2xpcHBlZFRvRWxsaXBzaXMoKSBjb25zdAogewogICAgIGlmIChhdXRvIGxheW91
dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkgewpAQCAtOTUzLDEzICsxMDM4LDI1IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBjYXNlIFRT
Tk9ORToKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUU0NJUkNMRToKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIHNlY3VyZVRleHQoYmxhY2tDaXJjbGUpOworI2Vsc2UKICAgICAgICAgc2Vj
dXJlVGV4dCh3aGl0ZUJ1bGxldCk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
U0RJU0M6CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBzZWN1cmVUZXh0KGJsYWNrQ2lyY2xl
KTsKKyNlbHNlCiAgICAgICAgIHNlY3VyZVRleHQoYnVsbGV0KTsKKyNlbmRpZgogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFRTU1FVQVJFOgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgc2Vj
dXJlVGV4dChibGFja0NpcmNsZSk7CisjZWxzZQogICAgICAgICBzZWN1cmVUZXh0KGJsYWNrU3F1
YXJlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIEFTU0VSVCghbV90ZXh0LmlzTnVsbCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDljYTMxNmY1YWM3YWI0OWNhM2Fm
NjVjOTgxM2UyYWVhNGYwNmVkMGYuLjBlYTJiZjExNzEyNDRjMDNjYTY0YWU5YjVjNTlhNTllM2E4
ZmE4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtNjQsNiArNjQs
OSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IE9WRVJS
SURFIEZJTkFMOwogICAgIFZlY3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UodW5z
aWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBj
b25zdDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTZWxlY3Rp
b25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAs
IHVuc2lnbmVkIGVuZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwog
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGFic29sdXRlUXVhZHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVj
dGlvbkhlaWdodCA9IGZhbHNlLCBib29sKiB3YXNGaXhlZCA9IG51bGxwdHIpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggOGZj
YmFhMjMyNjVlOGJhOGUxZDM0ZTdlNmRmMGQ5NmVlZGI0YjRmYy4uOTZjNWQyMDMyY2FmOWE3ZDJi
NzUwZTE4YjExZmFjNmNlNzAyYmRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC05Miw2ICs5MiwzMSBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSwgUmVuZAogICAgIGJvb2wgZGlzYWJsZWQgPSB1cGRhdGVVc2VyTW9kaWZ5UHJvcGVydHkodGV4
dEZvcm1Db250cm9sRWxlbWVudCgpLCB0ZXh0QmxvY2tTdHlsZSk7CiAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0Q29sb3IodGhlbWUoKS0+ZGlzYWJsZWRUZXh0
Q29sb3IodGV4dEJsb2NrU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgc3RhcnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKSkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAodGV4dEJsb2NrU3R5bGUt
PnRleHRTZWN1cml0eSgpICE9IFRTTk9ORSAmJiAhdGV4dEJsb2NrU3R5bGUtPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkgeworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgYWxpZ25tZW50IGJ1dCBm
b3JjZSB0aGUgZGlyZWN0aW9uIHRvIExUUiBzbyB0aGF0IHRoZSBsYXN0LXR5cGVkLCB1bm1hc2tl
ZCBjaGFyYWN0ZXIKKyAgICAgICAgLy8gKHdoaWNoIGNhbm5vdCBoYXZlIFJUTCBkaXJlY3Rpb25h
bGl0eSkgd2lsbCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBtYXNrZWQgY2hhcmFjdGVycy4g
U2VlIDxyZGFyOi8vcHJvYmxlbS83MDI0Mzc1Pi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
dGV4dEJsb2NrU3R5bGUtPnRleHRBbGlnbigpKSB7CisgICAgICAgIGNhc2UgVEFTVEFSVDoKKyAg
ICAgICAgY2FzZSBKVVNUSUZZOgorICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldFRleHRB
bGlnbihSSUdIVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUQUVORDoKKyAg
ICAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRUZXh0QWxpZ24oTEVGVCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICBjYXNlIFJJR0hUOgorICAgICAg
ICBjYXNlIENFTlRFUjoKKyAgICAgICAgY2FzZSBXRUJLSVRfTEVGVDoKKyAgICAgICAgY2FzZSBX
RUJLSVRfUklHSFQ6CisgICAgICAgIGNhc2UgV0VCS0lUX0NFTlRFUjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihM
VFIpOworICAgIH0KKyNlbmRpZgogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OnRleHRCbG9j
a0xvZ2ljYWxIZWlnaHQoKSBjb25zdApAQCAtMzAzLDYgKzMyOCwyMiBAQCBSZW5kZXJPYmplY3Qq
IFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChib29sIHJlbGF5
b3V0Q2hpbGRyZQogICAgIHJldHVybiBwbGFjZWhvbGRlclJlbmRlcmVyOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FuU2Nyb2xsKCkgY29uc3QKK3sK
KyAgICBFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7CisgICAgcmV0dXJu
IGlubmVyVGV4dCAmJiBpbm5lclRleHQtPnJlbmRlcmVyKCkgJiYgaW5uZXJUZXh0LT5yZW5kZXJl
cigpLT5oYXNPdmVyZmxvd0NsaXAoKTsKK30KKworaW50IFJlbmRlclRleHRDb250cm9sOjppbm5l
ckxpbmVIZWlnaHQoKSBjb25zdAoreworICAgIEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4
dEVsZW1lbnQoKTsKKyAgICBpZiAoaW5uZXJUZXh0ICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmV0dXJuIGlubmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jb21wdXRlZExp
bmVIZWlnaHQoKTsKKyAgICByZXR1cm4gc3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKTsKK30K
KyNlbmRpZgorCiBib29sIFJlbmRlclRleHRDb250cm9sOjpjYW5CZVJlcGxhY2VkV2l0aElubGlu
ZVJ1bkluKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCmluZGV4IDdjMzhhMjFmODljZmU2ZTU3Nzc3ZWU0
ZmUwYmJlNjA1YjgzODc3YzcuLjkzNjNjMDE2MDgzZDhiODg0Zjk4MDUzODUyZDcxYmJjM2ZhYmNh
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCkBA
IC0zNyw2ICszNywxMyBAQCBwdWJsaWM6CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQm
IHRleHRGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWY8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0
eWxlKSBjb25zdCA9IDA7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBjYW5TY3JvbGwo
KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBpbm5lciBy
ZW5kZXJlci4KKyAgICB2aXJ0dWFsIGludCBpbm5lckxpbmVIZWlnaHQoKSBjb25zdCBPVkVSUklE
RTsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyVGV4dENvbnRyb2woSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
CmluZGV4IDBlYjU1NGE5YzQ0ZWI5NDQzMmViZmYwNDQ2Y2QyNWQ3ZjAyODMwODQuLmZhOGQ4YTgw
MWE0NTE1NzdmNjQwMjM1ZDNlOTgyYTJmYjQxOGM0NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcApAQCAtNjEs
MTEgKzYxLDEzIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUCiAKIGZsb2F0IFJlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRl
ZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIENv
dXJpZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3gg
YW5kIFNhZmFyaSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGlu
IHRoZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KICAgICBpZiAoZmFtaWx5ID09ICJMdWNp
ZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDEyMjkpOworI2VuZGlm
CiAKICAgICByZXR1cm4gUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aChmYW1pbHkp
OwogfQpAQCAtOTEsNiArOTMsMTMgQEAgUGFzc1JlZjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmQKICAgICB0ZXh0
QmxvY2tTdHlsZS5nZXQoKS5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKICAgICBhZGp1c3RJbm5l
clRleHRTdHlsZShzdGFydFN0eWxlLCAmdGV4dEJsb2NrU3R5bGUuZ2V0KCkpOwogICAgIHRleHRC
bG9ja1N0eWxlLmdldCgpLnNldERpc3BsYXkoQkxPQ0spOworCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIC8vIFdlJ3JlIGFkZGluZyB0aHJlZSBleHRyYSBwaXhlbHMgb2YgcGFkZGluZyB0byBsaW5l
IHRleHRhcmVhcyB1cCB3aXRoIHRleHQgZmllbGRzLiAgCisgICAgdGV4dEJsb2NrU3R5bGUuZ2V0
KCkuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKDMsIEZpeGVkKSk7CisgICAgdGV4dEJsb2NrU3R5bGUu
Z2V0KCkuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aCgzLCBGaXhlZCkpOworI2VuZGlmCisKICAgICBy
ZXR1cm4gdGV4dEJsb2NrU3R5bGU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggZjE1NTBjN2Iy
MzZmYTA4Y2MxZWNjNjlkZDNjOTdhMWU0ZTI3ZDczNi4uMDNkMmNlODBkYzVjNmRkMmVlNmE2NGE4
ZTM5YjQ4YTJlZWRlMmY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTQ1LDYgKzQ1LDEwIEBACiAj
aW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNr
U3RhdHMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUlPUy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKQEAgLTIxMSw2ICsyMTUsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmxheW91dCgpCiAgICAgICAgIGlmIChuZWVkZWRMYXlvdXQpCiAgICAgICAgICAgICBjb21w
dXRlT3ZlcmZsb3coY2xpZW50TG9naWNhbEJvdHRvbSgpKTsKICAgICB9CisKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgYWRqdXN0aW5nIHN0eWxlcyBk
dXJpbmcgbGF5b3V0LiA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4KKyAgICBpZiAoaW5wdXRFbGVt
ZW50KCkuaXNTZWFyY2hGaWVsZCgpKQorICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91
bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwgdGhpcyk7CisjZW5kaWYKIH0KIAogYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkBAIC0yOTgsMTIgKzMwOCwxNCBAQCBMYXlvdXRS
ZWN0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udHJvbENsaXBSZWN0KGNvbnN0IExh
eW91dFBvaW50JiBhZGRpdAogCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omdl
dEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KQogeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50
IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVm
YXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKICAgICAv
LyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29k
aW5nIHNwZWNpZmljKS4KICAgICAvLyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0
aGUgT1MvMiB0YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lk
YSBHcmFuZGUiKQogICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKKyNlbmRpZgog
CiAgICAgcmV0dXJuIFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsK
IH0KQEAgLTMxOCw2ICszMzAsOCBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aChmbG9hdCBjaGFyVwogICAgIExheW91
dFVuaXQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGVkTGF5b3V0VW5pdChj
aGFyV2lkdGggKiBmYWN0b3IpKTsKIAogICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKKwor
I2lmICFQTEFURk9STShJT1MpCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHls
ZSgpLmZvbnQoKS5maXJzdEZhbWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMg
dGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8v
IG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVm
b3gsIFNhZmFyaSBXaW4gYW5kCkBAIC0zMjcsNiArMzQxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRMb2dpY2FsV2lkdGgoZmxvYXQg
Y2hhclcKICAgICAgICAgbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7CiAgICAg
ZWxzZSBpZiAoaGFzVmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKICAgICAgICAgbWF4Q2hhcldp
ZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0aCgp
KTsKKyNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5wdXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEg
d2lkdGguCiAgICAgaWYgKG1heENoYXJXaWR0aCA+IDAuZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBiZTYyNzZhMzBlYTU5Y2Iy
MjQ5OGMzZmE4NDYzYzA4NzA4M2U4NWU1Li45NjhhMDgyOTA1ZGE5M2UyM2JkODkyYWM5OWNkNTIy
M2NkNTRkMDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwCkBAIC0yNzEsMTIgKzI3MSwxNCBAQCBzdGF0aWMgYm9vbCBsaW5lRGlyZWN0
aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURpcmVjdGlvbiwgY29uc3QgSW5saW5lVGV4
dAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSByaWdodCBlZGdl
IG9mIHRoaXMgYm94CiAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHBvc2l0aW9uIGdvZXMgaW4gdGhp
cyBib3gKICAgICBpZiAocG9pbnRMaW5lRGlyZWN0aW9uIDwgYm94LmxvZ2ljYWxSaWdodCgpKSB7
CiAgICAgICAgIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtID0gVXBzdHJlYW1JZlBvc2l0aW9u
SXNOb3RBdFN0YXJ0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisjZW5kaWYKIAogICAg
IC8vIGJveCBpcyBmaXJzdCBvbiBsaW5lCiAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMg
dG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQpAQCAtNDA2LDYgKzQw
OCwxMyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dExpbmVCb3hlczo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcgogCiAgICAgICAgICAgICBpZiAocG9pbnRC
bG9ja0RpcmVjdGlvbiA8IGJvdHRvbSB8fCAoYmxvY2tzQXJlRmxpcHBlZCAmJiBwb2ludEJsb2Nr
RGlyZWN0aW9uID09IGJvdHRvbSkpIHsKICAgICAgICAgICAgICAgICBTaG91bGRBZmZpbml0eUJl
RG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgICAgICAgICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiAhPSBib3gtPmxvZ2ljYWxM
ZWZ0KCkgJiYgcG9pbnQueCgpIDwgYm94LT54KCkgKyBib3gtPmxvZ2ljYWxXaWR0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGludCBoYWxmID0gYm94LT54KCkgKyBib3gtPmxvZ2ljYWxXaWR0
aCgpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gcG9pbnQu
eCgpIDwgaGFsZiA/IERPV05TVFJFQU0gOiBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbihib3gt
Pm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbikgKyBib3gtPnN0YXJ0KCksIGFm
ZmluaXR5KTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICBpZiAo
bGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KHBvaW50TGluZURpcmVjdGlvbiwgKmJveCwgc2hv
dWxkQWZmaW5pdHlCZURvd25zdHJlYW0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKCpib3gsIGJveC0+
b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGlyZWN0aW9uKSwgc2hvdWxkQWZmaW5pdHlCZURv
d25zdHJlYW0pOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKaW5kZXggNjQ5YzcxOGE1MTQ5ODUxODk5MDgyMzdmNmJhZjMwYzhjMzg4Njc3MS4u
NTQ1MzAzZmVjMTNmN2QzMDU0OTRlNjI3ZjNiMDFkOTMwMzZlNDQzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC0zOTcsNiArMzk3LDEwIEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBV
TlVTRURfUEFSQU0ocik7CisgICAgcmV0dXJuIG8tPnN0eWxlKCkuYXBwZWFyYW5jZSgpICE9IE5v
Q29udHJvbFBhcnQ7CisjZWxzZQogICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHBhaW50IG1l
dGhvZCBiYXNlZCBvZmYgdGhlIGFwcGVhcmFuY2UgdmFsdWUuCiAgICAgc3dpdGNoIChvLT5zdHls
ZSgpLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKQEAgLTQ0MCw2ICs0
NDQsNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogICAgIH0KIAogICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgogfQogCiBib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQpAQCAtNDUyLDE1ICs0NTcsMjYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRE
ZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW4K
ICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNl
IFRleHRGaWVsZFBhcnQ6CisgICAgICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25z
KHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOwogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAg
IGNhc2UgTGlzdGJveFBhcnQ6CisgICAgICAgIHJldHVybiBwYWludFRleHRBcmVhRGVjb3JhdGlv
bnMocmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgY2FzZSBDaGVja2JveFBhcnQ6Cisg
ICAgICAgIHJldHVybiBwYWludENoZWNrYm94RGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50SW5m
bywgcmVjdCk7CiAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIHJldHVybiBwYWludFJhZGlv
RGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgY2FzZSBQdXNoQnV0
dG9uUGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKHJlbmRl
cmVyLCBwYWludEluZm8sIHJlY3QpOwogICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKLSAgICBj
YXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgICAgICByZXR1cm4gcGFpbnRTcXVhcmVCdXR0b25E
ZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNlIEJ1dHRvblBh
cnQ6CisgICAgICAgIHJldHVybiBwYWludEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVyLCBwYWlu
dEluZm8sIHJlY3QpOwogICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAgICAgICByZXR1cm4gcGFp
bnRNZW51TGlzdERlY29yYXRpb25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOworICAgIGNh
c2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0OgorICAgICAgICByZXR1cm4gcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKHJlbmRl
cmVyLCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgICAg
ICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKHJlbmRlcmVyLCBwYWludEluZm8s
IHJlY3QpOwogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0Ogog
ICAgIGNhc2UgUmVsZXZhbmN5TGV2ZWxJbmRpY2F0b3JQYXJ0OgpAQCAtNDczLDkgKzQ4OSw4IEBA
IGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAjZW5kaWYKICAgICBjYXNlIFNsaWRlckhvcml6b250
YWxQYXJ0OgogICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVGh1
bWJIb3Jpem9udGFsUGFydDoKLSAgICBjYXNlIFNsaWRlclRodW1iVmVydGljYWxQYXJ0OgotICAg
IGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgTGlzdGJveFBhcnQ6CisgICAgY2FzZSBE
ZWZhdWx0QnV0dG9uUGFydDoKICAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDoK
ICAgICBjYXNlIFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQ6CiAgICAgY2FzZSBTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKaW5kZXggOGExNGEyNTg3Y2IxZDdmNzljOTU3ZDg1NjE4MjVjODgzNTJkN2IwZi4uMWJjMGNk
YjY2Mzk4Y2ZjZmY2MjI4NGRjZjY2ZTc0M2ZmMjRmYWNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgQ1NTU3R5bGVTaGVldDsK
IGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWxlTGlzdDsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7
CitjbGFzcyBJY29uOwogY2xhc3MgUG9wdXBNZW51OwogY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAj
aWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCkBAIC0yNzEsMTggKzI3MiwzMSBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYK
IAorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhRGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlv
bnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgZW51
bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVGaWxlLCBNdWx0aXBsZUZpbGVzIH07Cisg
ICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqIC8qaW5wdXRSZW5kZXJlciovLCBSZW5kZXJPYmplY3QqIC8qYnV0dG9uUmVuZGVyZXIqLywg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVjb3Jh
dGlvbnMpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMzAzLDkg
KzMxNywxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjJlNWU0MGU1NDMwMDBk
Mjg2YmNmZjk4Mjc0MDRmNzYwOWQ4MjM2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUlPU19oCisjZGVmaW5l
IFJlbmRlclRoZW1lSU9TX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFJlbmRlclN0eWxl
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIAorY2xhc3MgUmVuZGVyVGhlbWVJT1MgOiBw
dWJsaWMgUmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clRoZW1lPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsKKworICAgIHN0YXRpYyB2b2lkIGFk
anVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiwgUmVuZGVyQm94Kik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25z
dCBPVkVSUklERTsKKworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBjb250ZW50U2l6ZUNhdGVnb3J5
KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0
IFJlbmRlck9iamVjdCopIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzQ29u
dHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBG
aWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
IE9WRVJSSURFOworCisgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDaGVja2JveERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVj
b3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMo
UmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGJ1dHRvblJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNv
cmF0aW9ucykgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURF
OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
aHVtYkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBPVkVSUklERTsKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorICAgIC8v
IFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJv
Z3Jlc3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBPVkVSUklERTsKKyAgICAvLyBSZXR1
cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgor
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MqKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dy
ZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBP
VkVSUklERTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgdmly
dHVhbCBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IE9WRVJSSURFOwor
I2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UYXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIDB4NEQxQTFBMUE7IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHNob3Vs
ZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBPVkVS
UklERTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJv
bHNTY3JpcHQoKSBPVkVSUklERTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFJlbmRlclRoZW1l
SU9TKCk7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVJT1MoKSB7IH0KKworICAgIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0OworICAgIEZsb2F0UmVjdCBhZGRSb3VuZGVkQm9yZGVy
Q2xpcChSZW5kZXJPYmplY3QqIGJveCwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIFJlbmRlclRo
ZW1lSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOTNhOWEzZDE5ODRjZDc0OThiYmVjYTJlNGRjZmIyMDdlYTNkNDcyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBA
IC0wLDAgKzEsMTIxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJDU1NQcmltaXRpdmVW
YWx1ZS5oIgorI2ltcG9ydCAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2ltcG9ydCAiRGF0ZUNvbXBv
bmVudHMuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZVZpZXcuaCIK
KyNpbXBvcnQgIkdyYWRpZW50LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCisj
aW1wb3J0ICJIVE1MTmFtZXMuaCIKKyNpbXBvcnQgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW1w
b3J0ICJJY29uLmgiCisjaW1wb3J0ICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbXBvcnQgIlBhZ2Uu
aCIKKyNpbXBvcnQgIlBsYXRmb3JtTG9jYWxlLmgiCisjaW1wb3J0ICJQYWludEluZm8uaCIKKyNp
bXBvcnQgIlJlbmRlck9iamVjdC5oIgorI2ltcG9ydCAiUmVuZGVyU3R5bGUuaCIKKyNpbXBvcnQg
IlJlbmRlclRoZW1lSU9TLmgiCisjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCisjaW1wb3J0ICJTb2Z0
TGlua2luZy5oIgorI2ltcG9ydCAiVXNlckFnZW50U2NyaXB0cy5oIgorI2ltcG9ydCAiVXNlckFn
ZW50U3R5bGVTaGVldHMuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbXBvcnQg
PENvcmVHcmFwaGljcy9DR1BhdGhQcml2YXRlLmg+CisjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnRE
ZXNjcmlwdG9yUHJpdi5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorI2ltcG9ydCAi
UmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgorCitAaW50ZXJmYWNlIFVJQXBwbGljYXRpb24KKysg
KFVJQXBwbGljYXRpb24gKilzaGFyZWRBcHBsaWNhdGlvbjsKK0Bwcm9wZXJ0eShub25hdG9taWMs
Y29weSkgTlNTdHJpbmcgKnByZWZlcnJlZENvbnRlbnRTaXplQ2F0ZWdvcnk7CitAZW5kCisKK1NP
RlRfTElOS19GUkFNRVdPUksoVUlLaXQpCitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJQXBwbGlj
YXRpb24pCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlLaXQsIFVJQ29udGVudFNpemVDYXRlZ29yeURp
ZENoYW5nZU5vdGlmaWNhdGlvbiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIFVJQ29udGVudFNpemVD
YXRlZ29yeURpZENoYW5nZU5vdGlmaWNhdGlvbiBnZXRVSUNvbnRlbnRTaXplQ2F0ZWdvcnlEaWRD
aGFuZ2VOb3RpZmljYXRpb24oKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGZsb2F0
IENvbnRyb2xCYXNlSGVpZ2h0ID0gMjA7Citjb25zdCBmbG9hdCBDb250cm9sQmFzZUZvbnRTaXpl
ID0gMTE7CisKK3N0cnVjdCBJT1NHcmFkaWVudCB7CisgICAgZmxvYXQqIHN0YXJ0OyAvLyBwb2lu
dHMgdG8gc3RhdGljIGZsb2F0WzRdCisgICAgZmxvYXQqIGVuZDsgLy8gcG9pbnRzIHRvIHN0YXRp
YyBmbG9hdFs0XQorICAgIElPU0dyYWRpZW50KGZsb2F0IHN0YXJ0WzRdLCBmbG9hdCBlbmRbNF0p
CisgICAgICAgIDogc3RhcnQoc3RhcnQpCisgICAgICAgICwgZW5kKGVuZCkKKyAgICB7CisgICAg
fQorfTsKKwordHlwZWRlZiBJT1NHcmFkaWVudCogSU9TR3JhZGllbnRSZWY7CisKK2VudW0gSW50
ZXJwb2xhdGlvbgoreworICAgIExpbmVhckludGVycG9sYXRpb24sCisgICAgRXhwb25lbnRpYWxJ
bnRlcnBvbGF0aW9uCit9OworCitzdGF0aWMgdm9pZCBpbnRlcnBvbGF0ZUxpbmVhckdyYWRpZW50
KHZvaWQgKmluZm8sIGNvbnN0IENHRmxvYXQgKmluRGF0YSwgQ0dGbG9hdCAqb3V0RGF0YSkKK3sK
KyAgICBJT1NHcmFkaWVudFJlZiBncmFkaWVudCA9IHN0YXRpY19jYXN0PElPU0dyYWRpZW50UmVm
PihpbmZvKTsKKyAgICBmbG9hdCBhbHBoYSA9IGluRGF0YVswXTsKKyAgICBmbG9hdCBpbnZlcnNl
ID0gMS4wZiAtIGFscGhhOworCisgICAgb3V0RGF0YVswXSA9IGludmVyc2UgKiBncmFkaWVudC0+
c3RhcnRbMF0gKyBhbHBoYSAqIGdyYWRpZW50LT5lbmRbMF07CisgICAgb3V0RGF0YVsxXSA9IGlu
dmVyc2UgKiBncmFkaWVudC0+c3RhcnRbMV0gKyBhbHBoYSAqIGdyYWRpZW50LT5lbmRbMV07Cisg
ICAgb3V0RGF0YVsyXSA9IGludmVyc2UgKiBncmFkaWVudC0+c3RhcnRbMl0gKyBhbHBoYSAqIGdy
YWRpZW50LT5lbmRbMl07CisgICAgb3V0RGF0YVszXSA9IGludmVyc2UgKiBncmFkaWVudC0+c3Rh
cnRbM10gKyBhbHBoYSAqIGdyYWRpZW50LT5lbmRbM107Cit9CisKK3N0YXRpYyB2b2lkIGludGVy
cG9sYXRlRXhwb25lbnRpYWxHcmFkaWVudCh2b2lkICppbmZvLCBjb25zdCBDR0Zsb2F0ICppbkRh
dGEsIENHRmxvYXQgKm91dERhdGEpCit7CisgICAgSU9TR3JhZGllbnRSZWYgZ3JhZGllbnQgPSBz
dGF0aWNfY2FzdDxJT1NHcmFkaWVudFJlZj4oaW5mbyk7CisgICAgZmxvYXQgYSA9IGluRGF0YVsw
XTsKKyAgICBmb3IgKGludCBwYWludEluZm8gPSAwOyBwYWludEluZm8gPCA0OyArK3BhaW50SW5m
bykgeworICAgICAgICBmbG9hdCBlbmQgPSBsb2dmKHN0ZDo6bWF4KGdyYWRpZW50LT5lbmRbcGFp
bnRJbmZvXSwgMC4wMWYpKTsKKyAgICAgICAgZmxvYXQgc3RhcnQgPSBsb2dmKHN0ZDo6bWF4KGdy
YWRpZW50LT5zdGFydFtwYWludEluZm9dLCAwLjAxZikpOworICAgICAgICBvdXREYXRhW3BhaW50
SW5mb10gPSBleHBmKHN0YXJ0IC0gKGVuZCArIHN0YXJ0KSAqIGEpOworICAgIH0KK30KKworc3Rh
dGljIENHRnVuY3Rpb25SZWYgZ2V0U2hhcmVkRnVuY3Rpb25SZWYoSU9TR3JhZGllbnRSZWYgZ3Jh
ZGllbnQsIEludGVycG9sYXRpb24gaW50ZXJwb2xhdGlvbikKK3sKKyAgICBDR0Z1bmN0aW9uUmVm
IGZ1bmN0aW9uID0gbnVsbHB0cjsKKworICAgIHN0YXRpYyBIYXNoTWFwPElPU0dyYWRpZW50UmVm
LCBDR0Z1bmN0aW9uUmVmPiogbGluZWFyRnVuY3Rpb25SZWZzOworICAgIHN0YXRpYyBIYXNoTWFw
PElPU0dyYWRpZW50UmVmLCBDR0Z1bmN0aW9uUmVmPiogZXhwb25lbnRpYWxGdW5jdGlvblJlZnM7
OworCisgICAgaWYgKGludGVycG9sYXRpb24gPT0gTGluZWFySW50ZXJwb2xhdGlvbikgeworICAg
ICAgICBpZiAoIWxpbmVhckZ1bmN0aW9uUmVmcykKKyAgICAgICAgICAgIGxpbmVhckZ1bmN0aW9u
UmVmcyA9IG5ldyBIYXNoTWFwPElPU0dyYWRpZW50UmVmLCBDR0Z1bmN0aW9uUmVmPjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZnVuY3Rpb24gPSBsaW5lYXJGdW5jdGlvblJlZnMtPmdldChn
cmFkaWVudCk7CisgICAgCisgICAgICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHN0
YXRpYyBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBsaW5lYXJGdW5jdGlvbkNhbGxiYWNrcyA9
ICB7IDAsIGludGVycG9sYXRlTGluZWFyR3JhZGllbnQsIDAgfTsKKyAgICAgICAgICAgIGxpbmVh
ckZ1bmN0aW9uUmVmcy0+c2V0KGdyYWRpZW50LCBmdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUo
Z3JhZGllbnQsIDEsIG51bGxwdHIsIDQsIG51bGxwdHIsICZsaW5lYXJGdW5jdGlvbkNhbGxiYWNr
cykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIH0KKworICAg
IGlmICghZXhwb25lbnRpYWxGdW5jdGlvblJlZnMpCisgICAgICAgIGV4cG9uZW50aWFsRnVuY3Rp
b25SZWZzID0gbmV3IEhhc2hNYXA8SU9TR3JhZGllbnRSZWYsIENHRnVuY3Rpb25SZWY+OworICAg
IGVsc2UKKyAgICAgICAgZnVuY3Rpb24gPSBleHBvbmVudGlhbEZ1bmN0aW9uUmVmcy0+Z2V0KGdy
YWRpZW50KTsKKworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgc3RhdGljIHN0cnVjdCBD
R0Z1bmN0aW9uQ2FsbGJhY2tzIGV4cG9uZW50aWFsRnVuY3Rpb25DYWxsYmFja3MgPSAgeyAwLCBp
bnRlcnBvbGF0ZUV4cG9uZW50aWFsR3JhZGllbnQsIDAgfTsKKyAgICAgICAgZXhwb25lbnRpYWxG
dW5jdGlvblJlZnMtPnNldChncmFkaWVudCwgZnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKGdy
YWRpZW50LCAxLCAwLCA0LCAwLCAmZXhwb25lbnRpYWxGdW5jdGlvbkNhbGxiYWNrcykpOworICAg
IH0KKworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworc3RhdGljIHZvaWQgZHJhd0F4aWFsR3Jh
ZGllbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIElPU0dyYWRpZW50UmVmIGdyYWRpZW50LCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBzdG9wUG9pbnQsIElu
dGVycG9sYXRpb24gaW50ZXJwb2xhdGlvbikKK3sKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVm
PiBzaGFkaW5nID0gYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChkZXZpY2VSR0JDb2xvclNw
YWNlUmVmKCksIHN0YXJ0UG9pbnQsIHN0b3BQb2ludCwgZ2V0U2hhcmVkRnVuY3Rpb25SZWYoZ3Jh
ZGllbnQsIGludGVycG9sYXRpb24pLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBDR0NvbnRleHREcmF3
U2hhZGluZyhjb250ZXh0LCBzaGFkaW5nLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgZHJhd1Jh
ZGlhbEdyYWRpZW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBJT1NHcmFkaWVudFJlZiBncmFkaWVu
dCwgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgZmxvYXQgc3RhcnRSYWRpdXMsIGNvbnN0
IEZsb2F0UG9pbnQmIHN0b3BQb2ludCwgZmxvYXQgc3RvcFJhZGl1cywgSW50ZXJwb2xhdGlvbiBp
bnRlcnBvbGF0aW9uKQoreworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHNoYWRpbmcgPSBh
ZG9wdENGKENHU2hhZGluZ0NyZWF0ZVJhZGlhbChkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIHN0
YXJ0UG9pbnQsIHN0YXJ0UmFkaXVzLCBzdG9wUG9pbnQsIHN0b3BSYWRpdXMsIGdldFNoYXJlZEZ1
bmN0aW9uUmVmKGdyYWRpZW50LCBpbnRlcnBvbGF0aW9uKSwgZmFsc2UsIGZhbHNlKSk7CisgICAg
Q0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgc2hhZGluZy5nZXQoKSk7Cit9CisKK2VudW0g
SU9TR3JhZGllbnRUeXBlIHsKKyAgICBJbnNldEdyYWRpZW50LAorICAgIFNoaW5lR3JhZGllbnQs
CisgICAgU2hhZGVHcmFkaWVudCwKKyAgICBDb252ZXhHcmFkaWVudCwKKyAgICBDb25jYXZlR3Jh
ZGllbnQsCisgICAgU2xpZGVyVHJhY2tHcmFkaWVudCwKKyAgICBSZWFkb25seVNsaWRlclRyYWNr
R3JhZGllbnQsCisgICAgU2xpZGVyVGh1bWJPcGFxdWVQcmVzc2VkR3JhZGllbnQsCit9OworCitz
dGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0SW5zZXRHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZs
b2F0IGVuZFs0XSA9IHsgMCAvIDI1NS4wLCAwIC8gMjU1LjAsIDAgLyAyNTUuMCwgMCB9OworICAg
IHN0YXRpYyBmbG9hdCBzdGFydFs0XSA9IHsgMCAvIDI1NS4wLCAwIC8gMjU1LjAsIDAgLyAyNTUu
MCwgMC4yIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBncmFkaWVu
dChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50LmdldCgpOworfQorCitzdGF0aWMg
SU9TR3JhZGllbnRSZWYgZ2V0U2hpbmVHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVu
ZFs0XSA9IHsgMSwgMSwgMSwgMC44IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAx
LCAxLCAxLCAwIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBncmFk
aWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50LmdldCgpOworfQorCitzdGF0
aWMgSU9TR3JhZGllbnRSZWYgZ2V0U2hhZGVHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0
IGVuZFs0XSA9IHsgMTc4IC8gMjU1LjAsIDE3OCAvIDI1NS4wLCAxNzggLyAyNTUuMCwgMC42NSB9
OworICAgIHN0YXRpYyBmbG9hdCBzdGFydFs0XSA9IHsgMjUyIC8gMjU1LjAsIDI1MiAvIDI1NS4w
LCAyNTIgLyAyNTUuMCwgMC42NSB9OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJT1NHcmFk
aWVudD4gZ3JhZGllbnQoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuICZncmFkaWVudC5nZXQoKTsK
K30KKworc3RhdGljIElPU0dyYWRpZW50UmVmIGdldENvbnZleEdyYWRpZW50KCkKK3sKKyAgICBz
dGF0aWMgZmxvYXQgZW5kWzRdID0geyAyNTUgLyAyNTUuMCwgMjU1IC8gMjU1LjAsIDI1NSAvIDI1
NS4wLCAwLjA1IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAyNTUgLyAyNTUuMCwg
MjU1IC8gMjU1LjAsIDI1NSAvIDI1NS4wLCAwLjQzIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPElPU0dyYWRpZW50PiBncmFkaWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRp
ZW50LmdldCgpOworfQorCitzdGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0Q29uY2F2ZUdyYWRpZW50
KCkKK3sKKyAgICBzdGF0aWMgZmxvYXQgZW5kWzRdID0geyAyNTUgLyAyNTUuMCwgMjU1IC8gMjU1
LjAsIDI1NSAvIDI1NS4wLCAwLjQ2IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAy
NTUgLyAyNTUuMCwgMjU1IC8gMjU1LjAsIDI1NSAvIDI1NS4wLCAwIH07CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBncmFkaWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1
cm4gJmdyYWRpZW50LmdldCgpOworfQorCitzdGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0U2xpZGVy
VHJhY2tHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVuZFs0XSA9IHsgMTMyIC8gMjU1
LjAsIDEzMiAvIDI1NS4wLCAxMzIgLyAyNTUuMCwgMSB9OworICAgIHN0YXRpYyBmbG9hdCBzdGFy
dFs0XSA9IHsgNzQgLyAyNTUuMCwgNzcgLyAyNTUuMCwgODAgLyAyNTUuMCwgMSB9OworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxJT1NHcmFkaWVudD4gZ3JhZGllbnQoc3RhcnQsIGVuZCk7Cisg
ICAgcmV0dXJuICZncmFkaWVudC5nZXQoKTsKK30KKworc3RhdGljIElPU0dyYWRpZW50UmVmIGdl
dFJlYWRvbmx5U2xpZGVyVHJhY2tHcmFkaWVudCgpCit7CisgICAgc3RhdGljIGZsb2F0IGVuZFs0
XSA9IHsgMTMyIC8gMjU1LjAsIDEzMiAvIDI1NS4wLCAxMzIgLyAyNTUuMCwgMC40IH07CisgICAg
c3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyA3NCAvIDI1NS4wLCA3NyAvIDI1NS4wLCA4MCAvMjU1
LjAsIDAuNCB9OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJT1NHcmFkaWVudD4gZ3JhZGll
bnQoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuICZncmFkaWVudC5nZXQoKTsKK30KKworc3RhdGlj
IElPU0dyYWRpZW50UmVmIGdldFNsaWRlclRodW1iT3BhcXVlUHJlc3NlZEdyYWRpZW50KCkKK3sK
KyAgICBzdGF0aWMgZmxvYXQgZW5kWzRdID0geyAxNDQgLyAyNTUuMCwgMTQ0IC8gMjU1LjAsIDE0
NCAvIDI1NS4wLCAxfTsKKyAgICBzdGF0aWMgZmxvYXQgc3RhcnRbNF0gPSB7IDU1IC8gMjU1LjAs
IDU1IC8gMjU1LjAsIDU1IC8gMjU1LjAsIDEgfTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SU9TR3JhZGllbnQ+IGdyYWRpZW50KHN0YXJ0LCBlbmQpOworICAgIHJldHVybiAmZ3JhZGllbnQu
Z2V0KCk7Cit9CisKK3N0YXRpYyBJT1NHcmFkaWVudFJlZiBncmFkaWVudFdpdGhOYW1lKElPU0dy
YWRpZW50VHlwZSBncmFkaWVudFR5cGUpCit7CisgICAgc3dpdGNoIChncmFkaWVudFR5cGUpIHsK
KyAgICBjYXNlIEluc2V0R3JhZGllbnQ6CisgICAgICAgIHJldHVybiBnZXRJbnNldEdyYWRpZW50
KCk7CisgICAgY2FzZSBTaGluZUdyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0U2hpbmVHcmFk
aWVudCgpOworICAgIGNhc2UgU2hhZGVHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdldFNoYWRl
R3JhZGllbnQoKTsKKyAgICBjYXNlIENvbnZleEdyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0
Q29udmV4R3JhZGllbnQoKTsKKyAgICBjYXNlIENvbmNhdmVHcmFkaWVudDoKKyAgICAgICAgcmV0
dXJuIGdldENvbmNhdmVHcmFkaWVudCgpOworICAgIGNhc2UgU2xpZGVyVHJhY2tHcmFkaWVudDoK
KyAgICAgICAgcmV0dXJuIGdldFNsaWRlclRyYWNrR3JhZGllbnQoKTsKKyAgICBjYXNlIFJlYWRv
bmx5U2xpZGVyVHJhY2tHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdldFJlYWRvbmx5U2xpZGVy
VHJhY2tHcmFkaWVudCgpOworICAgIGNhc2UgU2xpZGVyVGh1bWJPcGFxdWVQcmVzc2VkR3JhZGll
bnQ6CisgICAgICAgIHJldHVybiBnZXRTbGlkZXJUaHVtYk9wYXF1ZVByZXNzZWRHcmFkaWVudCgp
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworc3RhdGljIHZvaWQgY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShDRk5vdGlmaWNh
dGlvbkNlbnRlclJlZiwgdm9pZCosIENGU3RyaW5nUmVmIG5hbWUsIGNvbnN0IHZvaWQqLCBDRkRp
Y3Rpb25hcnlSZWYpCit7CisgICAgQVNTRVJUX1VOVVNFRChuYW1lLCBDRkVxdWFsKG5hbWUsIFVJ
Q29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZU5vdGlmaWNhdGlvbikpOworICAgIFdlYlRocmVh
ZFJ1biheeworICAgICAgICBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxD
aGFuZ2VJbkVudmlyb25tZW50KCk7CisgICAgfSk7Cit9CisKK1JlbmRlclRoZW1lSU9TOjpSZW5k
ZXJUaGVtZUlPUygpCit7CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5v
dGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGNvbnRlbnRTaXplQ2F0ZWdv
cnlEaWRDaGFuZ2UsIFVJQ29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZU5vdGlmaWNhdGlvbiwg
MCwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOwor
fQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBh
Z2UqKQoreworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcmVuZGVyVGhlbWUgPSBSZW5kZXJUaGVt
ZUlPUzo6Y3JlYXRlKCkubGVha1JlZigpOworICAgIHJldHVybiByZW5kZXJUaGVtZTsKK30KKwor
UGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVJT1M6OmNyZWF0ZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUlPUyk7Cit9CisKK0NGU3RyaW5nUmVmIFJl
bmRlclRoZW1lSU9TOjpjb250ZW50U2l6ZUNhdGVnb3J5KCkKK3sKKyAgICByZXR1cm4gKENGU3Ry
aW5nUmVmKVtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIHByZWZl
cnJlZENvbnRlbnRTaXplQ2F0ZWdvcnldOworfQorCitjb25zdCBDb2xvciYgUmVuZGVyVGhlbWVJ
T1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgQ29sb3IgY29sb3IoMC4wZiwg
MC4wZiwgMC4wZiwgMC43Zik7CisgICAgcmV0dXJuIGNvbG9yOworfQorCitGbG9hdFJlY3QgUmVu
ZGVyVGhlbWVJT1M6OmFkZFJvdW5kZWRCb3JkZXJDbGlwKFJlbmRlck9iamVjdCogYm94LCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gVG8g
Zml4IGlubmVyIGJvcmRlciBibGVlZGluZyBpc3N1ZXMgPHJkYXI6Ly9wcm9ibGVtLzk4MTI1MDc+
LCB3ZSBjbGlwIHRvIHRoZSBvdXRlciBib3JkZXIgYW5kIGFzc2VydCB0aGF0CisgICAgLy8gdGhl
IGJvcmRlciBpcyBvcGFxdWUgb3IgdHJhbnNwYXJlbnQsIHVubGVzcyB3ZSdyZSBjaGVja2VkIGJl
Y2F1c2UgY2hlY2tlZCByYWRpby9jaGVja2JveGVzIHNob3cgbm8gYmxlZWRpbmcuCisgICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIFJvdW5kZWRSZWN0IGJvcmRlciA9
IGlzQ2hlY2tlZChib3gpID8gc3R5bGUuZ2V0Um91bmRlZElubmVyQm9yZGVyRm9yKHJlY3QpIDog
c3R5bGUuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKKworICAgIGlmIChib3JkZXIuaXNSb3Vu
ZGVkKCkpCisgICAgICAgIGNvbnRleHQtPmNsaXBSb3VuZGVkUmVjdChib3JkZXIpOworICAgIGVs
c2UKKyAgICAgICAgY29udGV4dC0+Y2xpcChib3JkZXIucmVjdCgpKTsKKworICAgIGlmIChpc0No
ZWNrZWQoYm94KSkgeworICAgICAgICBBU1NFUlQoc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLmFscGhhKCkgJSAyNTUgPT0gMCk7CisgICAgICAg
IEFTU0VSVChzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dENvbG9yKS5hbHBoYSgpICUgMjU1ID09IDApOworICAgICAgICBBU1NFUlQoc3R5bGUudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpLmFscGhhKCkgJSAy
NTUgPT0gMCk7CisgICAgICAgIEFTU0VSVChzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpLmFscGhhKCkgJSAyNTUgPT0gMCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGJvcmRlci5yZWN0KCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVz
dENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExl
bmd0aCBsZW5ndGggPSBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHls
ZS0+Zm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICAKKyAgICBzdHlsZS0+c2V0V2lkdGgo
bGVuZ3RoKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7Cit9CisKK3N0YXRpYyBDR1Bv
aW50IHNob3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1BvaW50IGVuZCwgZmxvYXQgd2lkdGgpCit7
CisgICAgZmxvYXQgeCA9IGVuZC54IC0gc3RhcnQueDsKKyAgICBmbG9hdCB5ID0gZW5kLnkgLSBz
dGFydC55OworICAgIGZsb2F0IHJhdGlvID0gd2lkdGggLyBzcXJ0Zih4ICogeCArIHkgKiB5KTsK
KyAgICByZXR1cm4gQ0dQb2ludE1ha2Uoc3RhcnQueCArIHggKiByYXRpbywgc3RhcnQueSArIHkg
KiByYXRpbyk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpwYWludEluZm8uY29udGV4dCk7CisgICAgRmxvYXRSZWN0IGNsaXAgPSBhZGRSb3VuZGVk
Qm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKKworICAgIGZsb2F0IHdp
ZHRoID0gY2xpcC53aWR0aCgpOworICAgIGZsb2F0IGhlaWdodCA9IGNsaXAuaGVpZ2h0KCk7CisK
KyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIGlmIChpc0NoZWNrZWQoYm94KSkgeworICAgICAgICBkcmF3QXhpYWxH
cmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoQ29uY2F2ZUdyYWRpZW50KSwgY2xp
cC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFkoKSksIExpbmVhcklu
dGVycG9sYXRpb24pOworCisgICAgICAgIHN0YXRpYyBmbG9hdCB0aGlja25lc3NSYXRpbyA9IDIg
LyAxNC4wOworICAgICAgICBzdGF0aWMgQ0dTaXplIHNpemUgPSB7IDE0LjBmLCAxNC4wZiB9Owor
ICAgICAgICBzdGF0aWMgQ0dQb2ludCBwYXRoUmF0aW9zWzNdID0geworICAgICAgICAgICAgeyAy
LjVmIC8gc2l6ZS53aWR0aCwgNy41ZiAvIHNpemUuaGVpZ2h0IH0sCisgICAgICAgICAgICB7IDUu
NWYgLyBzaXplLndpZHRoLCAxMC41ZiAvIHNpemUuaGVpZ2h0IH0sCisgICAgICAgICAgICB7IDEx
LjVmIC8gc2l6ZS53aWR0aCwgMi41ZiAvIHNpemUuaGVpZ2h0IH0KKyAgICAgICAgfTsKKworICAg
ICAgICBmbG9hdCBsaW5lV2lkdGggPSBzdGQ6Om1pbih3aWR0aCwgaGVpZ2h0KSAqIDIuMGYgKiB0
aGlja25lc3NSYXRpbzsKKworICAgICAgICBDR1BvaW50IGxpbmVbM10gPSB7CisgICAgICAgICAg
ICBDR1BvaW50TWFrZShjbGlwLngoKSArIHdpZHRoICogcGF0aFJhdGlvc1swXS54LCBjbGlwLnko
KSArIGhlaWdodCAqIHBhdGhSYXRpb3NbMF0ueSksCisgICAgICAgICAgICBDR1BvaW50TWFrZShj
bGlwLngoKSArIHdpZHRoICogcGF0aFJhdGlvc1sxXS54LCBjbGlwLnkoKSArIGhlaWdodCAqIHBh
dGhSYXRpb3NbMV0ueSksCisgICAgICAgICAgICBDR1BvaW50TWFrZShjbGlwLngoKSArIHdpZHRo
ICogcGF0aFJhdGlvc1syXS54LCBjbGlwLnkoKSArIGhlaWdodCAqIHBhdGhSYXRpb3NbMl0ueSkK
KyAgICAgICAgfTsKKyAgICAgICAgQ0dQb2ludCBzaGFkb3dbM10gPSB7CisgICAgICAgICAgICBz
aG9ydGVuZWQobGluZVswXSwgbGluZVsxXSwgbGluZVdpZHRoIC8gNC4wZiksCisgICAgICAgICAg
ICBsaW5lWzFdLAorICAgICAgICAgICAgc2hvcnRlbmVkKGxpbmVbMl0sIGxpbmVbMV0sIGxpbmVX
aWR0aCAvIDQuMGYpCisgICAgICAgIH07CisKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcyhsaW5lV2lkdGgpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43ZiksIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Sm9pbmVkTGluZXMo
c2hhZG93LCAzLCB0cnVlLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0ZDo6bWluKGNsaXAud2lkdGgoKSwgY2xpcC5o
ZWlnaHQoKSkgKiB0aGlja25lc3NSYXRpbyk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAyNDAgLyAyNTUuMGYpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0pvaW5l
ZExpbmVzKGxpbmUsIDMsIHRydWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZsb2F0UG9pbnQg
Ym90dG9tQ2VudGVyKGNsaXAueCgpICsgY2xpcC53aWR0aCgpIC8gMi4wZiwgY2xpcC5tYXhZKCkp
OworICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUo
U2hhZGVHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xp
cC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZHJhd1JhZGlhbEdyYWRp
ZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgYm90dG9tQ2Vu
dGVyLCAwLCBib3R0b21DZW50ZXIsIHNxcnRmKCh3aWR0aCAqIHdpZHRoKSAvIDQuMGYgKyBoZWln
aHQgKiBoZWlnaHQpLCBFeHBvbmVudGlhbEludGVycG9sYXRpb24pOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworaW50IFJlbmRlclRoZW1lSU9TOjpiYXNlbGluZVBvc2l0aW9uKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCFyZW5kZXJlci0+
aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9
IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKworICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IENoZWNrYm94UGFydCB8fCBib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlv
UGFydCkKKyAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdodCgpIC0g
MjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNoZWNr
Ym94L3JhZGlvIGluIEFwcEtpdC4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5o
ZWlnaHQoKSAtIDU7IC8vIFRoaXMgaXMgdG8gbWF0Y2ggQXBwS2l0LiBUaGVyZSBtaWdodCBiZSBh
IGJldHRlciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgdGhvdWdoLgorICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbihib3gpOworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpp
c0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRh
JiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikgY29uc3QKK3sKKyAgICAvLyBCdXR0b25zIGFuZCBNZW51bGlzdEJ1dHRvbnMg
YXJlIHN0eWxlZCBpZiB0aGV5IGNvbnRhaW4gYSBiYWNrZ3JvdW5kIGltYWdlLgorICAgIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gIXN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgfHwgc3R5
bGUtPmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKTsKKworICAgIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0
QXJlYVBhcnQpCisgICAgICAgIHJldHVybiAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBi
YWNrZ3JvdW5kOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5
bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxm
KHN0ZDo6bWF4KHN0eWxlLT5mb250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOworICAgIHN0eWxlLT5z
ZXRXaWR0aChsZW5ndGgpOworICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKKyAgICBzdHls
ZS0+c2V0Qm9yZGVyUmFkaXVzKEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgu
dmFsdWUoKSAvIDIuMGYpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0Rl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJv
dW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworCisgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBpZiAoaXNDaGVja2VkKGJveCkpIHsKKyAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQo
Y2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbmNhdmVHcmFkaWVudCksIGNsaXAubG9jYXRp
b24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0
aW9uKTsKKworICAgICAgICAvLyBUaGUgaW5uZXIgY2lyY2xlIGlzIDYgLyAxNCB0aGUgc2l6ZSBv
ZiB0aGUgc3Vycm91bmRpbmcgY2lyY2xlLCAKKyAgICAgICAgLy8gbGVhdmluZyA4IC8gMTQgYXJv
dW5kIGl0LiAoOCAvIDE0KSAvIDIgPSAyIC8gNy4KKworICAgICAgICBzdGF0aWMgZmxvYXQgSW5u
ZXJJbnZlcnNlUmF0aW8gPSAyIC8gNy4wOworCisgICAgICAgIGNsaXAuaW5mbGF0ZVgoLWNsaXAu
d2lkdGgoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKKyAgICAgICAgY2xpcC5pbmZsYXRlWSgtY2xp
cC5oZWlnaHQoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKKworICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgICAgICBG
bG9hdFNpemUgcmFkaXVzKGNsaXAud2lkdGgoKSAvIDIuMGYsIGNsaXAuaGVpZ2h0KCkgLyAyLjBm
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXBSb3VuZGVkUmVjdChjbGlwLCByYWRp
dXMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMpOworICAgIH0KKyAgICBGbG9hdFBvaW50IGJvdHRv
bUNlbnRlcihjbGlwLngoKSArIGNsaXAud2lkdGgoKSAvIDIuMCwgY2xpcC5tYXhZKCkpOworICAg
IGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGFkZUdyYWRp
ZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFkoKSks
IExpbmVhckludGVycG9sYXRpb24pOworICAgIGRyYXdSYWRpYWxHcmFkaWVudChjZ0NvbnRleHQs
IGdyYWRpZW50V2l0aE5hbWUoU2hpbmVHcmFkaWVudCksIGJvdHRvbUNlbnRlciwgMCwgYm90dG9t
Q2VudGVyLCBzdGQ6Om1heChjbGlwLndpZHRoKCksIGNsaXAuaGVpZ2h0KCkpLCBFeHBvbmVudGlh
bEludGVycG9sYXRpb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIEludFBvaW50IHBvaW50KHJlY3QueCgp
ICsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lk
dGgoKSk7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50
SW5mby5jb250ZXh0KTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJlY3Qo
c3R5bGUuZ2V0Um91bmRlZEJvcmRlckZvcihyKSk7CisKKyAgICAvLyBUaGlzIGdyYWRpZW50IGdl
dHMgZHJhd24gYmxhY2sgd2hlbiBwcmludGluZy4KKyAgICAvLyBEbyBub3QgZHJhdyB0aGUgZ3Jh
ZGllbnQgaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSB0b3AgYm9yZGVyLgorICAgIGJvb2wgdG9wQm9y
ZGVySXNJbnZpc2libGUgPSAhc3R5bGUuaGFzQm9yZGVyKCkgfHwgIXN0eWxlLmJvcmRlclRvcFdp
ZHRoKCkgfHwgc3R5bGUuYm9yZGVyVG9wSXNUcmFuc3BhcmVudCgpOworICAgIGlmICghYm94LT52
aWV3KCkucHJpbnRpbmcoKSAmJiAhdG9wQm9yZGVySXNJbnZpc2libGUpCisgICAgICAgIGRyYXdB
eGlhbEdyYWRpZW50KHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZ3JhZGll
bnRXaXRoTmFtZShJbnNldEdyYWRpZW50KSwgcG9pbnQsIEZsb2F0UG9pbnQoQ0dQb2ludE1ha2Uo
cG9pbnQueCgpLCBwb2ludC55KCkgKyAzLjBmKSksIExpbmVhckludGVycG9sYXRpb24pOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0QXJlYURl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZERl
Y29yYXRpb25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOworfQorCitjb25zdCBpbnQgTWVu
dUxpc3RNaW5IZWlnaHQgPSAxNTsKKworY29uc3QgZmxvYXQgTWVudUxpc3RCYXNlSGVpZ2h0ID0g
MjA7Citjb25zdCBmbG9hdCBNZW51TGlzdEJhc2VGb250U2l6ZSA9IDExOworCitjb25zdCBmbG9h
dCBNZW51TGlzdEFycm93V2lkdGggPSA3OworY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hlaWdo
dCA9IDY7Citjb25zdCBmbG9hdCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5OworCitp
bnQgUmVuZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoreworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsg
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVJT1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiBzdHlsZSwgUmVu
ZGVyQm94KiBib3gpCit7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQ
YXJ0IHx8IHN0eWxlLmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIg
cmFkaXVzIGZvciB0aGUgYXBwZWFyYW5jZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVt
Lzc2NzU0OTM+CisgICAgTGVuZ3RoIHJhZGl1c1dpZHRoKHN0YXRpY19jYXN0PGludD4oc3RkOjpt
aW4oYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKSAvIDIuMCksIEZpeGVkKTsKKyAgICBMZW5n
dGggcmFkaXVzSGVpZ2h0KHN0YXRpY19jYXN0PGludD4oYm94LT5oZWlnaHQoKSAvIDIuMCksIEZp
eGVkKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNXaWR0aCwg
cmFkaXVzSGVpZ2h0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5Q29tbW9uQnV0dG9uUGFkZGlu
Z1RvU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBlbVNpemUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuNSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOworICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1
dGVMZW5ndGg8aW50PihzdHlsZSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgZG9jdW1lbnQuZnJh
bWUoKS0+cGFnZVpvb21GYWN0b3IoKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3goTGVuZ3Ro
Qm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdFNlbGVj
dExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpCit7
CisgICAgLy8gRW5mb3JjZSAicGFkZGluZzogMCAwLjVlbSIuCisgICAgYXBwbHlDb21tb25CdXR0
b25QYWRkaW5nVG9TdHlsZShzdHlsZSwgZWxlbWVudCk7CisKKyAgICAvLyBFbmZvcmNlICJsaW5l
LWhlaWdodDogbm9ybWFsIi4KKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgoLTEwMC4w
LCBQZXJjZW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KQor
eworICAgIC8vIEFsd2F5cyBFbmZvcmNlICJwYWRkaW5nOiAwIDAuNWVtIi4KKyAgICBhcHBseUNv
bW1vbkJ1dHRvblBhZGRpbmdUb1N0eWxlKHN0eWxlLCBpbnB1dEVsZW1lbnQpOworCisgICAgLy8g
RG9uJ3QgYWRqdXN0IHRoZSBzdHlsZSBpZiB0aGUgd2lkdGggaXMgc3BlY2lmaWVkLgorICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUtPndpZHRoKCkudmFsdWUoKSA+IDAp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGFkanVzdCBmb3IgdW5zdXBwb3J0ZWQg
ZGF0ZSBpbnB1dCB0eXBlcy4KKyAgICBEYXRlQ29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSA9IGlu
cHV0RWxlbWVudC0+ZGF0ZVR5cGUoKTsKKyAgICBpZiAoZGF0ZVR5cGUgPT0gRGF0ZUNvbXBvbmVu
dHM6OkludmFsaWQgfHwgZGF0ZVR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OldlZWspCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEVuZm9yY2UgdGhlIHdpZHRoIGFuZCBzZXQgdGhlIGJveC1zaXpp
bmcgdG8gY29udGVudC1ib3ggdG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIHBhZGRpbmcuCisgICAg
Rm9udCBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmbG9hdCBtYXhpbXVtV2lkdGggPSBpbnB1
dEVsZW1lbnQtPmxvY2FsZSgpLm1heGltdW1XaWR0aEZvckRhdGVUeXBlKGRhdGVUeXBlLCBmb250
KTsKKyAgICBpZiAobWF4aW11bVdpZHRoID4gMCkgeyAgICAKKyAgICAgICAgaW50IHdpZHRoID0g
c3RhdGljX2Nhc3Q8aW50PihtYXhpbXVtV2lkdGggKyBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdo
dCk7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlLT5zZXRCb3hTaXppbmcoQ09OVEVOVF9CT1gpOworICAgIH0KK30KKwordm9pZCBS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIC8vIFNl
dCB0aGUgbWluLWhlaWdodCB0byBiZSBhdCBsZWFzdCBNZW51TGlzdE1pbkhlaWdodC4KKyAgICBp
ZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0
KExlbmd0aChzdGQ6Om1heChNZW51TGlzdE1pbkhlaWdodCwgc3RhdGljX2Nhc3Q8aW50PihNZW51
TGlzdEJhc2VIZWlnaHQgLyBNZW51TGlzdEJhc2VGb250U2l6ZSAqIHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZFNpemUoKSkpLCBGaXhlZCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5
bGUtPnNldE1pbkhlaWdodChMZW5ndGgoTWVudUxpc3RNaW5IZWlnaHQsIEZpeGVkKSk7CisKKyAg
ICAvLyBFbmZvcmNlIHNvbWUgZGVmYXVsdCBzdHlsZXMgaW4gdGhlIGNhc2UgdGhhdCB0aGlzIGlz
IGEgbm9uLW11bHRpcGxlIDxzZWxlY3Q+IGVsZW1lbnQsCisgICAgLy8gb3IgYSBkYXRlIGlucHV0
LiBXZSBkb24ndCBmb3JjZSB0aGVzZSBpZiB0aGlzIGlzIGp1c3QgYW4gZWxlbWVudCB3aXRoCisg
ICAgLy8gIi13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3QtYnV0dG9uIi4KKyAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykgJiYgIWVsZW1lbnQtPmhhc0F0
dHJpYnV0ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCisgICAgICAgIGFkanVzdFNlbGVjdExp
c3RCdXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7
CisgICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCBpbnB1dEVsZW1l
bnQpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRv
bkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gt
PnN0eWxlKCk7CisgICAgZmxvYXQgYm9yZGVyVG9wV2lkdGggPSBzdHlsZS5ib3JkZXJUb3BXaWR0
aCgpOworICAgIEZsb2F0UmVjdCBjbGlwKHJlY3QueCgpICsgc3R5bGUuYm9yZGVyTGVmdFdpZHRo
KCksIHJlY3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwgcmVjdC53aWR0aCgpIC0gc3R5
bGUuYm9yZGVyTGVmdFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHJlY3QuaGVp
Z2h0KCkgLSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgo
KSk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKworICAgIGZsb2F0IGFkanVzdExlZnQgPSAwLjU7CisgICAgZmxvYXQg
YWRqdXN0UmlnaHQgPSAwLjU7CisgICAgZmxvYXQgYWRqdXN0VG9wID0gMC41OworICAgIGZsb2F0
IGFkanVzdEJvdHRvbSA9IDAuNTsKKworICAgIC8vIFBhaW50IGxlZnQtaGFuZCB0aXRsZSBwb3J0
aW9uLgorICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IHRpdGxlQ2xpcChjbGlwLngoKSAtIGFkanVz
dExlZnQsIGNsaXAueSgpIC0gYWRqdXN0VG9wLCBjbGlwLndpZHRoKCkgLSBNZW51TGlzdEJ1dHRv
blBhZGRpbmdSaWdodCArIGFkanVzdExlZnQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3AgKyBh
ZGp1c3RCb3R0b20pOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5j
bGlwUm91bmRlZFJlY3QodGl0bGVDbGlwLCAKKyAgICAgICAgICAgIEZsb2F0U2l6ZSh2YWx1ZUZv
ckxlbmd0aChzdHlsZS5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKSwgcmVjdC53aWR0aCgp
KSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJU
b3BMZWZ0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0gc3R5bGUuYm9yZGVyVG9w
V2lkdGgoKSksIEZsb2F0U2l6ZSgwLCAwKSwKKyAgICAgICAgICAgIEZsb2F0U2l6ZSh2YWx1ZUZv
ckxlbmd0aChzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKSwgcmVjdC53aWR0
aCgpKSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5ib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0gc3R5bGUuYm9y
ZGVyQm90dG9tV2lkdGgoKSksIEZsb2F0U2l6ZSgwLCAwKSk7CisKKyAgICAgICAgZHJhd0F4aWFs
R3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCB0aXRs
ZUNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludCh0aXRsZUNsaXAueCgpLCB0aXRsZUNsaXAubWF4
WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNn
Q29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgRmxvYXRQb2ludCh0aXRs
ZUNsaXAueCgpLCB0aXRsZUNsaXAubWF4WSgpKSwgdGl0bGVDbGlwLmxvY2F0aW9uKCksIEV4cG9u
ZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgfQorCisgICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9y
IGFmdGVyIHRoZSBpbml0aWFsIHBhZGRpbmcuCisKKyAgICBmbG9hdCBzZXBhcmF0b3IgPSBjbGlw
Lm1heFgoKSAtIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0OworCisgICAgYm94LT5kcmF3TGlu
ZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHNlcGFyYXRvciAtIGJvcmRlclRvcFdpZHRo
LCBjbGlwLnkoKSwgc2VwYXJhdG9yLCBjbGlwLm1heFkoKSwgQlNSaWdodCwgc3R5bGUudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJU
b3BTdHlsZSgpLCAwLCAwKTsKKworICAgIEZsb2F0UmVjdCBidXR0b25DbGlwKHNlcGFyYXRvciAt
IGFkanVzdFRvcCwgY2xpcC55KCkgLSBhZGp1c3RUb3AsIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1Jp
Z2h0ICsgYWRqdXN0VG9wICsgYWRqdXN0UmlnaHQsIGNsaXAuaGVpZ2h0KCkgKyBhZGp1c3RUb3Ag
KyBhZGp1c3RCb3R0b20pOworCisgICAgLy8gTm93IHBhaW50IHRoZSBidXR0b24gcG9ydGlvbi4K
KyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFp
bnRJbmZvLmNvbnRleHQpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRl
ZFJlY3QoYnV0dG9uQ2xpcCwgCisgICAgICAgICAgICBGbG9hdFNpemUoMCwgMCksIEZsb2F0U2l6
ZSh2YWx1ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCksIHJl
Y3Qud2lkdGgoKSkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHZhbHVlRm9yTGVuZ3RoKHN0
eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkpIC0gc3R5
bGUuYm9yZGVyVG9wV2lkdGgoKSksCisgICAgICAgICAgICBGbG9hdFNpemUoMCwgMCksIEZsb2F0
U2l6ZSh2YWx1ZUZvckxlbmd0aChzdHlsZS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRo
KCksIHJlY3Qud2lkdGgoKSkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHZhbHVlRm9yTGVu
Z3RoKHN0eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0
KCkpIC0gc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSkpOworCisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5maWxsUmVjdChidXR0b25DbGlwLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciksIHN0eWxlLmNvbG9yU3BhY2UoKSk7CisKKyAgICAg
ICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKGlzRm9jdXNl
ZChib3gpICYmICFpc1JlYWRPbmx5Q29udHJvbChib3gpID8gQ29uY2F2ZUdyYWRpZW50IDogQ29u
dmV4R3JhZGllbnQpLCBidXR0b25DbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoYnV0dG9uQ2xp
cC54KCksIGJ1dHRvbkNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgfQor
CisgICAgLy8gUGFpbnQgSW5kaWNhdG9ycy4KKworICAgIGlmIChib3gtPmlzTWVudUxpc3QoKSAm
JiB0b0hUTUxTZWxlY3RFbGVtZW50KGJveC0+bm9kZSgpKS0+bXVsdGlwbGUoKSkgeworICAgICAg
ICBpbnQgc2l6ZSA9IDI7CisgICAgICAgIGludCBjb3VudCA9IDM7CisgICAgICAgIGludCBwYWRk
aW5nID0gMzsKKworICAgICAgICBJbnRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54KCkgKyAoYnV0
dG9uQ2xpcC53aWR0aCgpIC0gY291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFkZGluZykgLyAy
LjAsIGJ1dHRvbkNsaXAubWF4WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CisKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd1JhaXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6OndoaXRlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgICAgICAgICBlbGxpcHNlLm1vdmUoc2l6ZSArIHBhZGRpbmcsIDApOworICAg
ICAgICB9CisgICAgfSAgZWxzZSB7CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9vcmYoYnV0
dG9uQ2xpcC54KCkgKyBidXR0b25DbGlwLndpZHRoKCkgLyAyLjApIC0gMC41OworICAgICAgICBm
bG9hdCBjZW50ZXJZID0gZmxvb3JmKGJ1dHRvbkNsaXAueSgpICsgYnV0dG9uQ2xpcC5oZWlnaHQo
KSAqIDMuMCAvIDguMCk7CisKKyAgICAgICAgRmxvYXRQb2ludCBhcnJvd1szXTsKKyAgICAgICAg
RmxvYXRQb2ludCBzaGFkb3dbM107CisKKyAgICAgICAgYXJyb3dbMF0gPSBGbG9hdFBvaW50KGNl
bnRlclggLSBNZW51TGlzdEFycm93V2lkdGggLyAyLjAsIGNlbnRlclkpOworICAgICAgICBhcnJv
d1sxXSA9IEZsb2F0UG9pbnQoY2VudGVyWCArIE1lbnVMaXN0QXJyb3dXaWR0aCAvIDIuMCwgY2Vu
dGVyWSk7CisgICAgICAgIGFycm93WzJdID0gRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZICsg
TWVudUxpc3RBcnJvd0hlaWdodCk7CisKKyAgICAgICAgc2hhZG93WzBdID0gRmxvYXRQb2ludChh
cnJvd1swXS54KCksIGFycm93WzBdLnkoKSArIDEuMGYpOworICAgICAgICBzaGFkb3dbMV0gPSBG
bG9hdFBvaW50KGFycm93WzFdLngoKSwgYXJyb3dbMV0ueSgpICsgMS4wZik7CisgICAgICAgIHNo
YWRvd1syXSA9IEZsb2F0UG9pbnQoYXJyb3dbMl0ueCgpLCBhcnJvd1syXS55KCkgKyAxLjBmKTsK
KworICAgICAgICBmbG9hdCBvcGFjaXR5ID0gaXNSZWFkT25seUNvbnRyb2woYm94KSA/IDAuMiA6
IDAuNTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAu
MGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBv
cGFjaXR5KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5kcmF3Q29udmV4UG9seWdvbigzLCBzaGFkb3csIHRydWUpOworCisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp3aGl0
ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
Q29udmV4UG9seWdvbigzLCBhcnJvdywgdHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitjb25zdCBDR0Zsb2F0IGtUcmFja1RoaWNrbmVzcyA9IDQuMDsKK2NvbnN0IENHRmxv
YXQga1RyYWNrUmFkaXVzID0ga1RyYWNrVGhpY2tuZXNzIC8gMi4wOworY29uc3QgaW50IGtEZWZh
dWx0U2xpZGVyVGh1bWJTaXplID0gMTY7CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIgcmFkaXVzIGZvciB0aGUgYXBwZWFy
YW5jZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVtLzc2NzU0OTM+CisgICAgTGVuZ3Ro
IHJhZGl1c1dpZHRoKHN0YXRpY19jYXN0PGludD4oa1RyYWNrUmFkaXVzKSwgRml4ZWQpOworICAg
IExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihrVHJhY2tSYWRpdXMpLCBGaXhl
ZCk7CisgICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCBy
YWRpdXNIZWlnaHQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFj
ayhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgSW50UmVjdCB0cmFja0NsaXAgPSByZWN0OworICAgIFJlbmRl
clN0eWxlJiBzdHlsZSA9IGJveC0+c3R5bGUoKTsKKworICAgIGJvb2wgaXNIb3Jpem9udGFsID0g
dHJ1ZTsKKyAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgU2xpZGVy
SG9yaXpvbnRhbFBhcnQ6CisgICAgICAgIGlzSG9yaXpvbnRhbCA9IHRydWU7CisgICAgICAgIC8v
IEluc2V0IHNsaWdodGx5IHNvIHRoZSB0aHVtYiBjb3ZlcnMgdGhlIGVkZ2UuCisgICAgICAgIGlm
ICh0cmFja0NsaXAud2lkdGgoKSA+IDIpIHsKKyAgICAgICAgICAgIHRyYWNrQ2xpcC5zZXRXaWR0
aCh0cmFja0NsaXAud2lkdGgoKSAtIDIpOworICAgICAgICAgICAgdHJhY2tDbGlwLnNldFgodHJh
Y2tDbGlwLngoKSArIDEpOworICAgICAgICB9CisgICAgICAgIHRyYWNrQ2xpcC5zZXRIZWlnaHQo
c3RhdGljX2Nhc3Q8aW50PihrVHJhY2tUaGlja25lc3MpKTsKKyAgICAgICAgdHJhY2tDbGlwLnNl
dFkocmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMiAtIGtUcmFja1RoaWNrbmVzcyAvIDIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKKyAgICAgICAgaXNI
b3Jpem9udGFsID0gZmFsc2U7CisgICAgICAgIC8vIEluc2V0IHNsaWdodGx5IHNvIHRoZSB0aHVt
YiBjb3ZlcnMgdGhlIGVkZ2UuCisgICAgICAgIGlmICh0cmFja0NsaXAuaGVpZ2h0KCkgPiAyKSB7
CisgICAgICAgICAgICB0cmFja0NsaXAuc2V0SGVpZ2h0KHRyYWNrQ2xpcC5oZWlnaHQoKSAtIDIp
OworICAgICAgICAgICAgdHJhY2tDbGlwLnNldFkodHJhY2tDbGlwLnkoKSArIDEpOworICAgICAg
ICB9CisgICAgICAgIHRyYWNrQ2xpcC5zZXRXaWR0aChrVHJhY2tUaGlja25lc3MpOworICAgICAg
ICB0cmFja0NsaXAuc2V0WChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDIgLSBrVHJhY2tUaGlj
a25lc3MgLyAyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgQVNTRVJUKHRyYWNrQ2xpcC53aWR0aCgpID49
IDApOworICAgIEFTU0VSVCh0cmFja0NsaXAuaGVpZ2h0KCkgPj0gMCk7CisgICAgQ0dGbG9hdCBj
b3JuZXJXaWR0aCA9IHRyYWNrQ2xpcC53aWR0aCgpIDwga1RyYWNrVGhpY2tuZXNzID8gdHJhY2tD
bGlwLndpZHRoKCkgLyAyLjBmIDoga1RyYWNrUmFkaXVzOworICAgIENHRmxvYXQgY29ybmVySGVp
Z2h0ID0gdHJhY2tDbGlwLmhlaWdodCgpIDwga1RyYWNrVGhpY2tuZXNzID8gdHJhY2tDbGlwLmhl
aWdodCgpIC8gMi4wZiA6IGtUcmFja1JhZGl1czsKKworICAgIGJvb2wgcmVhZG9ubHkgPSBpc1Jl
YWRPbmx5Q29udHJvbChib3gpOworCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAg
cGFpbnRTbGlkZXJUaWNrcyhib3gsIHBhaW50SW5mbywgdHJhY2tDbGlwKTsKKyNlbmRpZgorCisg
ICAgLy8gRHJhdyB0aGUgdHJhY2sgZ3JhZGllbnQuCisgICAgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAg
ICBJbnRTaXplIGNvcm5lclNpemUoY29ybmVyV2lkdGgsIGNvcm5lckhlaWdodCk7CisgICAgICAg
IFJvdW5kZWRSZWN0IGlubmVyQm9yZGVyKHRyYWNrQ2xpcCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6
ZSwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5j
bGlwUm91bmRlZFJlY3QoaW5uZXJCb3JkZXIpOworCisgICAgICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIElP
U0dyYWRpZW50UmVmIGdyYWRpZW50ID0gcmVhZG9ubHkgPyBncmFkaWVudFdpdGhOYW1lKFJlYWRv
bmx5U2xpZGVyVHJhY2tHcmFkaWVudCkgOiBncmFkaWVudFdpdGhOYW1lKFNsaWRlclRyYWNrR3Jh
ZGllbnQpOworICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgZHJhd0F4aWFs
R3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudCwgdHJhY2tDbGlwLmxvY2F0aW9uKCksIEZsb2F0
UG9pbnQodHJhY2tDbGlwLngoKSwgdHJhY2tDbGlwLm1heFkoKSksIExpbmVhckludGVycG9sYXRp
b24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRl
eHQsIGdyYWRpZW50LCB0cmFja0NsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludCh0cmFja0NsaXAu
bWF4WCgpLCB0cmFja0NsaXAueSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgfQorCisg
ICAgLy8gRHJhdyB0aGUgdHJhY2sgYm9yZGVyLgorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKHJlYWRvbmx5KQorICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDE3OCwgMTc4LCAxNzgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKENvbG9yKDc2LCA3NiwgNzYpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAg
ICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcm91bmRlZFJlY3RQYXRoID0gYWRvcHRD
RihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOworICAgICAgICBDR1BhdGhBZGRSb3VuZGVkUmVjdChy
b3VuZGVkUmVjdFBhdGguZ2V0KCksIDAsIHRyYWNrQ2xpcCwgY29ybmVyV2lkdGgsIGNvcm5lckhl
aWdodCk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY2dDb250ZXh0LCByb3VuZGVkUmVjdFBh
dGguZ2V0KCkpOworICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY2dDb250ZXh0LCAxKTsK
KyAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjZ0NvbnRleHQpOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBzdHlsZS0+YXBw
ZWFyYW5jZSgpICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBFbmZvcmNlICJib3JkZXItcmFkaXVzOiA1MCUiLgorICAgIExlbmd0aCBsZW5ndGgo
NTAuMGYsIFBlcmNlbnQpOworICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShs
ZW5ndGgsIGxlbmd0aCkpOworCisgICAgLy8gRW5mb3JjZSBhIDE2eDE2IHNpemUgaWYgbm8gc2l6
ZSBpcyBwcm92aWRlZC4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSB8fCBzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgTGVuZ3RoIGxlbmd0aCA9
IExlbmd0aChrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSwgRml4ZWQpOworICAgICAgICBzdHlsZS0+
c2V0V2lkdGgobGVuZ3RoKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOworICAg
IH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25z
KFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3Jk
ZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworCisgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBG
bG9hdFBvaW50IGJvdHRvbUNlbnRlcihjbGlwLngoKSArIGNsaXAud2lkdGgoKSAvIDIuMGYsIGNs
aXAubWF4WSgpKTsKKyAgICBpZiAoaXNQcmVzc2VkKGJveCkpCisgICAgICAgIGRyYXdBeGlhbEdy
YWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTbGlkZXJUaHVtYk9wYXF1ZVByZXNz
ZWRHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5t
YXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZHJhd0F4
aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCBj
bGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwgTGluZWFy
SW50ZXJwb2xhdGlvbik7CisgICAgICAgIGRyYXdSYWRpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdy
YWRpZW50V2l0aE5hbWUoU2hpbmVHcmFkaWVudCksIGJvdHRvbUNlbnRlciwgMC4wZiwgYm90dG9t
Q2VudGVyLCBzdGQ6Om1heChjbGlwLndpZHRoKCksIGNsaXAuaGVpZ2h0KCkpLCBFeHBvbmVudGlh
bEludGVycG9sYXRpb24pOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyLT5pc1Byb2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY29uc3QgaW50IHByb2dyZXNzQmFySGVpZ2h0ID0gOTsKKyAgICBjb25zdCBm
bG9hdCB2ZXJ0aWNhbE9mZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NCYXJIZWlnaHQp
IC8gMi4wOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7CisgICAgaWYgKHJlY3Qud2lkdGgoKSA8IDEwIHx8IHJlY3QuaGVpZ2h0
KCkgPCA5KSB7CisgICAgICAgIC8vIFRoZSByZWN0IGlzIHNtYWxsZXIgdGhhbiB0aGUgc3RhbmRh
cmQgcHJvZ3Jlc3MgYmFyLiBXZSBjbGlwIHRvIHRoZSBlbGVtZW50J3MgcmVjdCB0byBhdm9pZAor
ICAgICAgICAvLyBsZWFraW5nIHBpeGVscyBvdXRzaWRlIHRoZSByZXBhaW50IHJlY3QuCisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHJlY3QpOworICAgIH0KKworICAgIC8vIDEpIERy
YXcgdGhlIHByb2dyZXNzIGJhciB0cmFjay4KKyAgICAvLyAxLjEpIERyYXcgdGhlIHdoaXRlIGJh
Y2tncm91bmQgd2l0aCBncmV5IGdyYWRpZW50IGJvcmRlci4KKyAgICBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlj
a25lc3MoMC42OCk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwor
CisgICAgY29uc3QgZmxvYXQgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiA9IHJlY3QueSgpICsg
dmVydGljYWxPZmZzZXQ7CisgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudCA9IEdy
YWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3Np
dGlvbiksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBw
cm9ncmVzc0JhckhlaWdodCAtIDEpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuMCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC40NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMC41NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0
cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigweDhkLCAweDhkLCAweDhkKSk7
CisgICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoc3Ryb2tlR3JhZGllbnQucmVsZWFzZSgp
KTsKKworICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9y
U3BhY2UoKTsKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUsIDI1NSks
IGNvbG9yU3BhY2UpOworCisgICAgUGF0aCB0cmFja1BhdGg7CisgICAgRmxvYXRSZWN0IHRyYWNr
UmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1LCBy
ZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41KTsKKyAgICBGbG9hdFNp
emUgcm91bmRlZENvcm5lclJhZGl1cyg1LCA0KTsKKyAgICB0cmFja1BhdGguYWRkUm91bmRlZFJl
Y3QodHJhY2tSZWN0LCByb3VuZGVkQ29ybmVyUmFkaXVzKTsKKyAgICBjb250ZXh0LT5kcmF3UGF0
aCh0cmFja1BhdGgpOworCisgICAgLy8gMS4yKSBEcmF3IHRvcCBncmFkaWVudCBvbiB0aGUgdXBw
ZXIgaGFsZi4gSXQgaXMgc3VwcG9zZWQgdG8gb3ZlcmxheSB0aGUgZmlsbCBmcm9tIHRoZSBiYWNr
Z3JvdW5kIGFuZCBkYXJrZXIgdGhlIHN0cm9rZWQgcGF0aC4KKyAgICBGbG9hdFJlY3QgYm9yZGVy
KHJlY3QueCgpLCByZWN0LnkoKSArIHZlcnRpY2FsT2Zmc2V0LCByZWN0LndpZHRoKCksIHByb2dy
ZXNzQmFySGVpZ2h0KTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KGJv
cmRlciwgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENv
cm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cyk7CisKKyAgICBmbG9hdCB1cHBlckdyYWRp
ZW50SGVpZ2h0ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKKyAgICBSZWZQdHI8R3JhZGllbnQ+
IHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkpOworICAg
IHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDEzMywgMTMzLCAxMzMsIDE4
OCkpOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDE4LCAxOCwg
MTgsIDUxKSk7CisgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KHVwcGVyR3JhZGllbnQucmVs
ZWFzZSgpKTsKKworICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVy
dGljYWxSZW5kZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0
KSk7CisKKyAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dy
ZXNzKHJlbmRlcmVyKTsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkg
eworICAgICAgICAvLyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAgIGRvdWJsZSBw
b3NpdGlvbiA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIDAuMCwgMS4wKTsK
KyAgICAgICAgZG91YmxlIGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0LndpZHRoKCk7CisgICAg
ICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0
UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBv
aW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWln
aHQgLSAxKSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigx
OTUsIDIxNywgMjQ3KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwg
Q29sb3IoMTE4LCAxNjQsIDIyOCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNDksIENvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjUxLCBDb2xvcigzNiwgMTE0LCAyMTApKTsKKyAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjU1LCBDb2xvcigzNiwgMTE0LCAyMTApKTsKKyAgICAgICAgYmFyR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDU3LCAxNDIsIDI0NCkpOworICAgICAgICBj
b250ZXh0LT5zZXRGaWxsR3JhZGllbnQoYmFyR3JhZGllbnQucmVsZWFzZSgpKTsKKworICAgICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShG
bG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0
IC0gMSkpOworICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29s
b3IoOTUsIDEwNywgMTgzKSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC41LCBDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOworICAgICAgICBiYXJTdHJva2VHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMzgsIDEwNCwgMTY2KSk7CisgICAgICAgIGNv
bnRleHQtPnNldFN0cm9rZUdyYWRpZW50KGJhclN0cm9rZUdyYWRpZW50LnJlbGVhc2UoKSk7CisK
KyAgICAgICAgUGF0aCBiYXJQYXRoOworICAgICAgICBpbnQgbGVmdCA9IHJlY3QueCgpOworICAg
ICAgICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKKyAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAtIGJhcldpZHRoOworICAgICAgICBG
bG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiAr
IDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjApLCBwcm9ncmVzc0JhckhlaWdodCAt
IDAuNSk7CisgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFyUmVjdCwgcm91bmRlZENv
cm5lclJhZGl1cyk7CisgICAgICAgIGNvbnRleHQtPmRyYXdQYXRoKGJhclBhdGgpOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKKworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorSW50U2l6ZSBSZW5kZXJUaGVtZUlP
Uzo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vMTIyNzE3OTE+IE1FUkdFQk9UOiBDb3JyZWN0IHZhbHVlcyBmb3Igc2xpZGVyIHRpY2sgb2Yg
PGlucHV0IHR5cGU9InJhbmdlIj4gZWxlbWVudHMgKHJlcXVpcmVzIEVOQUJMRV9EQVRBTElTVF9F
TEVNRU5UKQorICAgIHJldHVybiBJbnRTaXplKDEsIDMpOworfQorCitpbnQgUmVuZGVyVGhlbWVJ
T1M6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vMTIyNzE3OTE+IE1FUkdFQk9UOiBDb3JyZWN0IHZhbHVlcyBm
b3Igc2xpZGVyIHRpY2sgb2YgPGlucHV0IHR5cGU9InJhbmdlIj4gZWxlbWVudHMgKHJlcXVpcmVz
IEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKQorICAgIHJldHVybiAtOTsKK30KKyNlbmRpZgorCit2
b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7
CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxl
LCBlbGVtZW50KTsKKworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFzdHlsZS0+aGFzQm9yZGVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJv
eCogYm94ID0gZWxlbWVudC0+cmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJl
dHVybjsKKworICAgIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKCpzdHlsZSwgYm94KTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9i
amVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5m
bywgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9y
LCBzdHlsZSwgZWxlbWVudCk7CisKKyAgICAvLyBTZXQgcGFkZGluZzogMCAxLjBlbTsgb24gYnV0
dG9ucy4KKyAgICAvLyBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludCBvbmx5IG5l
ZWRzIHRoZSBlbGVtZW50J3Mgc3R5bGUgdG8gY2FsY3VsYXRlIGVtIGxlbmd0aHMuCisgICAgLy8g
U2luY2UgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGluIGEgZG9jdW1lbnQsIGp1c3QgcGFzcyBu
dWxscHRyIGZvciB0aGUgcm9vdCBlbGVtZW50IHN0eWxlLgorICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gZW1TaXplID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAgICBpbnQgcGl4ZWxzID0gZW1TaXplLT5jb21wdXRlTGVu
Z3RoPGludD4oc3R5bGUsIG51bGxwdHIpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm94KExlbmd0
aEJveCgwLCBwaXhlbHMsIDAsIHBpeGVscykpOworCisgICAgaWYgKCFlbGVtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IGVsZW1lbnQtPnJlbmRlckJveCgpOwor
ICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBhZGp1c3RSb3VuZEJvcmRlclJh
ZGl1cygqc3R5bGUsIGJveCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9u
RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFB1c2hCdXR0b25EZWNv
cmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6
OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBGbG9h
dFJlY3QgY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QpOworCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoYm94LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNEYXJrKCkpCisgICAgICAgIGRy
YXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb252ZXhHcmFkaWVu
dCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBM
aW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZHJhd0F4aWFsR3JhZGll
bnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCBjbGlwLmxvY2F0
aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xh
dGlvbik7CisgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRo
TmFtZShTaGluZUdyYWRpZW50KSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBj
bGlwLmxvY2F0aW9uKCksIEV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQg
YXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAo
IXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5p
c0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8g
ZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCisgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihDb250cm9sQmFzZUhlaWdodCAvIENv
bnRyb2xCYXNlRm9udFNpemUgKiBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXpl
KCkpLCBGaXhlZCkpOworfQorCitjb25zdCBpbnQga1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRo
ID0gMTsKK2NvbnN0IGludCBrVGh1bWJuYWlsQm9yZGVyQ29ybmVyUmFkaXVzID0gMTsKK2NvbnN0
IGludCBrVmlzaWJsZUJhY2tncm91bmRJbWFnZVdpZHRoID0gMTsKK2NvbnN0IGludCBrTXVsdGlw
bGVUaHVtYm5haWxTaHJpbmtTaXplID0gMjsKKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRG
aWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCogYnV0
dG9uUmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBJY29uKiBpY29uLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgZmlsZVVwbG9hZERlY29yYXRp
b25zKQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJ
bmZvLmNvbnRleHQpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplKGtUaHVtYm5haWxCb3JkZXJD
b3JuZXJSYWRpdXMsIGtUaHVtYm5haWxCb3JkZXJDb3JuZXJSYWRpdXMpOworICAgIENvbG9yIHBp
Y3R1cmVGcmFtZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIgPyBidXR0b25SZW5kZXJlci0+c3R5bGUo
KS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcikgOiBDb2xv
cig3Ni4wZiwgNzYuMGYsIDc2LjBmKTsKKworICAgIEludFJlY3QgdGh1bWJuYWlsUGljdHVyZUZy
YW1lUmVjdCA9IHJlY3Q7CisgICAgSW50UmVjdCB0aHVtYm5haWxSZWN0ID0gcmVjdDsKKyAgICB0
aHVtYm5haWxSZWN0LmNvbnRyYWN0KDIgKiBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGgsIDIg
KiBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGgpOworICAgIHRodW1ibmFpbFJlY3QubW92ZShr
VGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGgsIGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aCk7
CisKKyAgICBpZiAoZmlsZVVwbG9hZERlY29yYXRpb25zID09IE11bHRpcGxlRmlsZXMpIHsKKyAg
ICAgICAgLy8gU21hbGxlciB0aHVtYm5haWxzIGZvciBtdWx0aXBsZSBzZWxlY3Rpb24gYXBwZWFy
YW5jZS4KKyAgICAgICAgdGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdC5jb250cmFjdChrTXVsdGlw
bGVUaHVtYm5haWxTaHJpbmtTaXplLCBrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXplKTsKKyAg
ICAgICAgdGh1bWJuYWlsUmVjdC5jb250cmFjdChrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXpl
LCBrTXVsdGlwbGVUaHVtYm5haWxTaHJpbmtTaXplKTsKKworICAgICAgICAvLyBCYWNrZ3JvdW5k
IHBpY3R1cmUgZnJhbWUgYW5kIHNpbXBsZSBiYWNrZ3JvdW5kIGljb24gd2l0aCBhIGdyYWRpZW50
IG1hdGNoaW5nIHRoZSBidXR0b24uCisgICAgICAgIENvbG9yIGJhY2tncm91bmRJbWFnZUNvbG9y
ID0gYnV0dG9uUmVuZGVyZXIgPyBDb2xvcihidXR0b25SZW5kZXJlci0+c3R5bGUoKS52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpKSA6IENvbG9y
KDIwNi4wZiwgMjA2LjBmLCAyMDYuMGYpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+Zmls
bFJvdW5kZWRSZWN0KHRodW1ibmFpbFBpY3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5l
clNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHRodW1i
bmFpbFJlY3QsIGJhY2tncm91bmRJbWFnZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
MigqcGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5jbGlwKHRodW1ibmFpbFJlY3QpOworICAgICAgICAgICAgaWYgKGJh
Y2tncm91bmRJbWFnZUNvbG9yLmlzRGFyaygpKQorICAgICAgICAgICAgICAgIGRyYXdBeGlhbEdy
YWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb252ZXhHcmFkaWVudCksIHRodW1i
bmFpbFJlY3QubG9jYXRpb24oKSwgRmxvYXRQb2ludCh0aHVtYm5haWxSZWN0LngoKSwgdGh1bWJu
YWlsUmVjdC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRX
aXRoTmFtZShTaGFkZUdyYWRpZW50KSwgdGh1bWJuYWlsUmVjdC5sb2NhdGlvbigpLCBGbG9hdFBv
aW50KHRodW1ibmFpbFJlY3QueCgpLCB0aHVtYm5haWxSZWN0Lm1heFkoKSksIExpbmVhckludGVy
cG9sYXRpb24pOworICAgICAgICAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwg
Z3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgRmxvYXRQb2ludCh0aHVtYm5haWxSZWN0
LngoKSwgdGh1bWJuYWlsUmVjdC5tYXhZKCkpLCB0aHVtYm5haWxSZWN0LmxvY2F0aW9uKCksIEV4
cG9uZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBNb3ZlIHRoZSByZWN0cyBmb3IgdGhlIEZvcmVncm91bmQgcGljdHVyZSBmcmFtZSBh
bmQgaWNvbi4KKyAgICAgICAgaW50IGluc2V0ID0ga1Zpc2libGVCYWNrZ3JvdW5kSW1hZ2VXaWR0
aCArIGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aDsKKyAgICAgICAgdGh1bWJuYWlsUGljdHVy
ZUZyYW1lUmVjdC5tb3ZlKGluc2V0LCBpbnNldCk7CisgICAgICAgIHRodW1ibmFpbFJlY3QubW92
ZShpbnNldCwgaW5zZXQpOworICAgIH0KKworICAgIC8vIEZvcmVncm91bmQgcGljdHVyZSBmcmFt
ZSBhbmQgaWNvbi4KKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KHRodW1i
bmFpbFBpY3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUs
IGNvcm5lclNpemUsIHBpY3R1cmVGcmFtZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBpY29uLT5wYWludChwYWludEluZm8uY29udGV4dCwgdGh1bWJuYWlsUmVjdCk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisgICAgCitDb2xvciBSZW5kZXJUaGVtZUlPUzo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcjo6
dHJhbnNwYXJlbnQ7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lSU9TOjpwbGF0Zm9ybUluYWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OnRy
YW5zcGFyZW50OworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpzaG91bGRTaG93UGxhY2Vob2xk
ZXJXaGVuRm9jdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVJT1M6OnNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEZvbnRXZWlnaHQgZnJvbUNURm9u
dFdlaWdodChmbG9hdCBmb250V2VpZ2h0KQoreworICAgIGlmIChmb250V2VpZ2h0IDw9IC0wLjgp
CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MTAwOworICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQg
PD0gLTAuNCkKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQyMDA7CisgICAgZWxzZSBpZiAoZm9u
dFdlaWdodCA8PSAtMC4yKQorICAgICAgICByZXR1cm4gRm9udFdlaWdodDMwMDsKKyAgICBlbHNl
IGlmIChmb250V2VpZ2h0IDw9IDAuMCkKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7Cisg
ICAgZWxzZSBpZiAoZm9udFdlaWdodCA8PSAwLjIpCisgICAgICAgIHJldHVybiBGb250V2VpZ2h0
NTAwOworICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gMC4zKQorICAgICAgICByZXR1cm4gRm9u
dFdlaWdodDYwMDsKKyAgICBlbHNlIGlmIChmb250V2VpZ2h0IDw9IDAuNCkKKyAgICAgICAgcmV0
dXJuIEZvbnRXZWlnaHQ3MDA7CisgICAgZWxzZSBpZiAoZm9udFdlaWdodCA8PSAwLjYpCisgICAg
ICAgIHJldHVybiBGb250V2VpZ2h0ODAwOworICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gMC44
KQorICAgICAgICByZXR1cm4gRm9udFdlaWdodDkwMDsKKworICAgIHJldHVybiBGb250V2VpZ2h0
Tm9ybWFsOworfQorCit2b2lkIFJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQg
dmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3lzdGVtRm9udDsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBoZWFkbGluZUZvbnQ7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gYm9keUZvbnQ7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3ViaGVhZGxpbmVGb250OworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGZvb3Rub3RlRm9udDsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uMUZvbnQ7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gY2FwdGlvbjJGb250Owor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0SGVhZGxpbmVG
b250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0Qm9k
eUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRT
dWJoZWFkbGluZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlv
bj4gc2hvcnRGb290bm90ZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNj
cmlwdGlvbj4gc2hvcnRDYXB0aW9uMUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZv
bnREZXNjcmlwdGlvbj4gdGFsbEJvZHlGb250OworCisgICAgc3RhdGljIENGU3RyaW5nUmVmIHVz
ZXJUZXh0U2l6ZSA9IGNvbnRlbnRTaXplQ2F0ZWdvcnkoKTsKKworICAgIGlmICh1c2VyVGV4dFNp
emUgIT0gY29udGVudFNpemVDYXRlZ29yeSgpKSB7CisgICAgICAgIHVzZXJUZXh0U2l6ZSA9IGNv
bnRlbnRTaXplQ2F0ZWdvcnkoKTsKKworICAgICAgICBoZWFkbGluZUZvbnQuc2V0SXNBYnNvbHV0
ZVNpemUoZmFsc2UpOworICAgICAgICBib2R5Rm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7
CisgICAgICAgIHN1YmhlYWRsaW5lRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAg
ICAgIGZvb3Rub3RlRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIGNhcHRp
b24xRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIGNhcHRpb24yRm9udC5z
ZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIHNob3J0SGVhZGxpbmVGb250LnNldElz
QWJzb2x1dGVTaXplKGZhbHNlKTsKKyAgICAgICAgc2hvcnRCb2R5Rm9udC5zZXRJc0Fic29sdXRl
U2l6ZShmYWxzZSk7CisgICAgICAgIHNob3J0U3ViaGVhZGxpbmVGb250LnNldElzQWJzb2x1dGVT
aXplKGZhbHNlKTsKKyAgICAgICAgc2hvcnRGb290bm90ZUZvbnQuc2V0SXNBYnNvbHV0ZVNpemUo
ZmFsc2UpOworICAgICAgICBzaG9ydENhcHRpb24xRm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxz
ZSk7CisgICAgICAgIHRhbGxCb2R5Rm9udC5zZXRJc0Fic29sdXRlU2l6ZShmYWxzZSk7CisgICAg
fQorCisgICAgRm9udERlc2NyaXB0aW9uKiBjYWNoZWREZXNjOworICAgIFJldGFpblB0cjxDVEZv
bnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvcjsKKyAgICBDRlN0cmluZ1JlZiB0ZXh0U3R5
bGU7CisgICAgc3dpdGNoICh2YWx1ZUlEKSB7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVt
SGVhZGxpbmU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmaGVhZGxpbmVGb250OworICAgICAgICB0
ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVIZWFkbGluZTsKKyAgICAgICAgaWYgKCFoZWFk
bGluZUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0g
YWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVz
ZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVT
eXN0ZW1Cb2R5OgorICAgICAgICBjYWNoZWREZXNjID0gJmJvZHlGb250OworICAgICAgICB0ZXh0
U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVCb2R5OworICAgICAgICBpZiAoIWJvZHlGb250Lmlz
QWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUs
IDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtU3ViaGVh
ZGxpbmU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmc3ViaGVhZGxpbmVGb250OworICAgICAgICB0
ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVTdWJoZWFkOworICAgICAgICBpZiAoIXN1Ymhl
YWRsaW5lRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHRleHRTdHlsZSwg
dXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBcHBs
ZVN5c3RlbUZvb3Rub3RlOgorICAgICAgICBjYWNoZWREZXNjID0gJmZvb3Rub3RlRm9udDsKKyAg
ICAgICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlRm9vdG5vdGU7CisgICAgICAgIGlm
ICghZm9vdG5vdGVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0
eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1
ZUFwcGxlU3lzdGVtQ2FwdGlvbjE6CisgICAgICAgIGNhY2hlZERlc2MgPSAmY2FwdGlvbjFGb250
OworICAgICAgICB0ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVDYXB0aW9uMTsKKyAgICAg
ICAgaWYgKCFjYXB0aW9uMUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0
ZXh0U3R5bGUsIHVzZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1ZhbHVlQXBwbGVTeXN0ZW1DYXB0aW9uMjoKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZjYXB0aW9u
MkZvbnQ7CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZUNhcHRpb24yOwor
ICAgICAgICBpZiAoIWNhcHRpb24yRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAg
Zm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0
eWxlKHRleHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Ly8gU2hvcnQgdmVyc2lvbi4KKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1TaG9ydEhlYWRs
aW5lOgorICAgICAgICBjYWNoZWREZXNjID0gJnNob3J0SGVhZGxpbmVGb250OworICAgICAgICB0
ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVTaG9ydEhlYWRsaW5lOworICAgICAgICBpZiAo
IXNob3J0SGVhZGxpbmVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVz
Y3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4
dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NW
YWx1ZUFwcGxlU3lzdGVtU2hvcnRCb2R5OgorICAgICAgICBjYWNoZWREZXNjID0gJnNob3J0Qm9k
eUZvbnQ7CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZVNob3J0Qm9keTsK
KyAgICAgICAgaWYgKCFzaG9ydEJvZHlGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAg
ICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0
U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtU2hvcnRTdWJoZWFkbGluZToKKyAgICAgICAgY2FjaGVk
RGVzYyA9ICZzaG9ydFN1YmhlYWRsaW5lRm9udDsKKyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlG
b250VGV4dFN0eWxlU2hvcnRTdWJoZWFkOworICAgICAgICBpZiAoIXNob3J0U3ViaGVhZGxpbmVG
b250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4
dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVt
U2hvcnRGb290bm90ZToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZzaG9ydEZvb3Rub3RlRm9udDsK
KyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlU2hvcnRGb290bm90ZTsKKyAg
ICAgICAgaWYgKCFzaG9ydEZvb3Rub3RlRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAg
ICAgZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4
dFN0eWxlKHRleHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ1NTVmFsdWVBcHBsZVN5c3RlbVNob3J0Q2FwdGlvbjE6CisgICAgICAgIGNhY2hlZERl
c2MgPSAmc2hvcnRDYXB0aW9uMUZvbnQ7CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRl
eHRTdHlsZVNob3J0Q2FwdGlvbjE7CisgICAgICAgIGlmICghc2hvcnRDYXB0aW9uMUZvbnQuaXNB
YnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZv
bnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVzZXJUZXh0U2l6ZSwg
MCkpOworICAgICAgICBicmVhazsKKworICAgIC8vIFRhbGwgdmVyc2lvbi4KKyAgICBjYXNlIENT
U1ZhbHVlQXBwbGVTeXN0ZW1UYWxsQm9keToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZ0YWxsQm9k
eUZvbnQ7CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZVRhbGxCb2R5Owor
ICAgICAgICBpZiAoIXRhbGxCb2R5Rm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAg
Zm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0
eWxlKHRleHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgdGV4dFN0eWxlID0ga0NURm9udERlc2NyaXB0b3JUZXh0U3R5bGVF
bXBoYXNpemVkOworICAgICAgICBjYWNoZWREZXNjID0gJnN5c3RlbUZvbnQ7CisgICAgICAgIGlm
ICghc3lzdGVtRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0
b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVGb3JVSVR5cGUoa0NURm9udFN5c3Rl
bUZvbnRUeXBlLCAwLCBudWxscHRyKSk7CisgICAgfQorCisgICAgaWYgKGZvbnREZXNjcmlwdG9y
KSB7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnQgPSBhZG9wdENGKENURm9udENy
ZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgMCwgbnVsbHB0cikp
OworICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICAgICAg
Y2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsK
KyAgICAgICAgY2FjaGVkRGVzYy0+c2V0T25lRmFtaWx5KHRleHRTdHlsZSk7CisgICAgICAgIGNh
Y2hlZERlc2MtPnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmdldCgpKSk7Cisg
ICAgICAgIGNhY2hlZERlc2MtPnNldFdlaWdodChmcm9tQ1RGb250V2VpZ2h0KEZvbnRDYWNoZTo6
d2VpZ2h0T2ZDVEZvbnQoZm9udC5nZXQoKSkpKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRh
bGljKDApOworICAgIH0KKyAgICBmb250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKK30KKwor
I2lmIEVOQUJMRShWSURFTykKK1N0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFDb250cm9sc1N0
eWxlU2hlZXQoKQoreworI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCisgICAgcmV0
dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzaU9TVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1l
ZGlhQ29udHJvbHNpT1NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisjZWxzZQorICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworI2VuZGlmCit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUlPUzo6bWVkaWFD
b250cm9sc1NjcmlwdCgpCit7CisjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKKyAg
ICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNBcHBsZUphdmFTY3JpcHQsIHNpemVvZihtZWRp
YUNvbnRyb2xzQXBwbGVKYXZhU2NyaXB0KSk7CisjZWxzZQorICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworI2VuZGlmCit9CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit9CisKKyNlbmRpZiAv
L1BMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgK
aW5kZXggNGI2Y2ZlYmFlNjJhYTE2ZmQ1ODQ1MjhkMmZjMmY2ZjIxZjhkOTdlNy4uNTYyYWRhMjZk
ZDQzNGIzYWEwOTY4MGQ1ZWM5MGFkNzhlZDJmOGZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLmgKQEAgLTE5LDYgKzE5LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgogICoKICAqLworI2lmICFQTEFURk9STShJT1MpCiAKICNpZm5kZWYgUmVu
ZGVyVGhlbWVNYWNfaAogI2RlZmluZSBSZW5kZXJUaGVtZU1hY19oCkBAIC0yMzUsMyArMjM2LDUg
QEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclRo
ZW1lTWFjX2gKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMmRkMmRmOTk1NjU3MTg2YmI4YWQ1NTlmZGRi
MWE1MGM5MTI3OTk1NC4uYmI1NGNmMTZiMjMxYmY4Y2M3NjZkMzIwODdjMzI3MDhiNjZiNWFhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMTYsNiAr
MTYsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICovCisjaWYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJS
ZW5kZXJUaGVtZU1hYy5oIgpAQCAtMTkzMywzICsxOTM0LDUgQEAgU3RyaW5nIFJlbmRlclRoZW1l
TWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0
IEZvbnQKIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKaW5kZXggZTMxYzQ2
ZjExMWJiYTI0M2U4YjgyNzAyMDlhOGFiNTMxMGJkYmM4Mi4uZmU3ZDNlYTQyNmNlMjdhYmIzODcy
MjJjMjUwMGY0OGVkY2MzMmEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZGVvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlk
ZW8uY3BwCkBAIC0xMTYsMTEgKzExNiwxMyBAQCBMYXlvdXRTaXplIFJlbmRlclZpZGVvOjpjYWxj
dWxhdGVJbnRyaW5zaWNTaXplKCkKICAgICBpZiAodmlkZW9FbGVtZW50KCkuc2hvdWxkRGlzcGxh
eVBvc3RlckltYWdlKCkgJiYgIW1fY2FjaGVkSW1hZ2VTaXplLmlzRW1wdHkoKSAmJiAhaW1hZ2VS
ZXNvdXJjZSgpLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBtX2NhY2hlZEltYWdl
U2l6ZTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gV2hlbiB0aGUgbmF0dXJhbCBzaXpl
IG9mIHRoZSB2aWRlbyBpcyB1bmF2YWlsYWJsZSwgd2UgdXNlIHRoZSBwcm92aWRlZAogICAgIC8v
IHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcyBvZiB0aGUgdmlkZW8gZWxlbWVudCBhcyB0aGUg
aW50cmluc2ljIHNpemUgdW50aWwKICAgICAvLyBiZXR0ZXIgdmFsdWVzIGJlY29tZSBhdmFpbGFi
bGUuCiAgICAgaWYgKHZpZGVvRWxlbWVudCgpLmhhc0F0dHJpYnV0ZSh3aWR0aEF0dHIpICYmIHZp
ZGVvRWxlbWVudCgpLmhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkKICAgICAgICAgcmV0dXJuIExh
eW91dFNpemUodmlkZW9FbGVtZW50KCkud2lkdGgoKSwgdmlkZW9FbGVtZW50KCkuaGVpZ2h0KCkp
OworI2VuZGlmCiAKICAgICAvLyA8dmlkZW8+IGluIHN0YW5kYWxvbmUgbWVkaWEgZG9jdW1lbnRz
IHNob3VsZCBub3QgdXNlIHRoZSBkZWZhdWx0IDMwMHgxNTAKICAgICAvLyBzaXplIHNpbmNlIHRo
ZXkgYWxzbyBoYXZlIGF1ZGlvLW9ubHkgZmlsZXMuIEJ5IHNldHRpbmcgdGhlIGludHJpbnNpYwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDdiOTNmMDNiODExYzYy
Nzk2YWQxMGYwNWVmM2Y0YTJmMDBmZDg0NTAuLjdlNTZmYzI1YjBiYTZmNTZkZGY3NmRlMDRhNDJl
ODU3ZWI2MzY2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAg
LTEzNyw2ICsxMzcsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJWaWV3OjphdmFpbGFibGVMb2dpY2Fs
SGVpZ2h0KEF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRUeXBlKSBjb25zdAogICAgIC8vIElmIHdlIGhh
dmUgY29sdW1ucywgdGhlbiB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgaGVpZ2h0IGlzIHJlZHVjZWQg
dG8gdGhlIGNvbHVtbiBoZWlnaHQuCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkKICAgICAgICAgcmV0
dXJuIGNvbHVtbkluZm8oKS0+Y29sdW1uSGVpZ2h0KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS83MTY2ODA4Pi4KKyAgICBpZiAoZG9j
dW1lbnQoKS5pc1BsdWdpbkRvY3VtZW50KCkgJiYgZnJhbWVWaWV3KCkudXNlRml4ZWRMYXlvdXQo
KSkKKyAgICAgICAgcmV0dXJuIGZyYW1lVmlldygpLmZpeGVkTGF5b3V0U2l6ZSgpLmhlaWdodCgp
OworI2VuZGlmCiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVZp
ZXcoKS52aXNpYmxlSGVpZ2h0KCkgOiBmcmFtZVZpZXcoKS52aXNpYmxlV2lkdGgoKTsKIH0KIApA
QCAtMzYzLDYgKzM2OCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlclZpZXc6OnBhZ2VPclZpZXdMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gdmlld0xvZ2ljYWxIZWlnaHQoKTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBpbmxpbmUgTGF5b3V0U2l6ZSBmaXhlZFBvc2l0aW9u
T2Zmc2V0KGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3KQoreworICAgIHJldHVybiBmcmFtZVZp
ZXcudXNlQ3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKSA/IChmcmFtZVZpZXcuY3VzdG9t
Rml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5sb2NhdGlvbigpIC0gTGF5b3V0UG9pbnQoKSkgOiBm
cmFtZVZpZXctPnNjcm9sbE9mZnNldCgpOworfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyVmlldzo6
bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUsIE1hcENvb3JkaW5hdGVz
RmxhZ3MgbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0CiB7CiAgICAgLy8gSWYgYSBjb250YWlu
ZXIgd2FzIHNwZWNpZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVuZGVyVmlldywKQEAgLTM3
Nyw3ICszODksMTEgQEAgdm9pZCBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWkKICAgICB9CiAgICAgCiAgICAg
aWYgKG1vZGUgJiBJc0ZpeGVkKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdHJhbnNmb3Jt
U3RhdGUubW92ZShmaXhlZFBvc2l0aW9uT2Zmc2V0KG1fZnJhbWVWaWV3KSk7CisjZWxzZQogICAg
ICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVk
UG9zaXRpb24oKSk7CisjZW5kaWYKIH0KIAogY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJWaWV3
OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFu
Y2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKQEAg
LTM4Niw3ICs0MDIsMTEgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJWaWV3OjpwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmoKICAgICAvLyB0aGVuIHdl
IHNob3VsZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KICAgICBBU1NFUlRfQVJHKGFuY2VzdG9yVG9T
dG9wQXQsICFhbmNlc3RvclRvU3RvcEF0IHx8IGFuY2VzdG9yVG9TdG9wQXQgPT0gdGhpcyk7CiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQgPSBmaXhlZFBv
c2l0aW9uT2Zmc2V0KGZyYW1lVmlldygpKTsKKyNlbHNlCiAgICAgTGF5b3V0U2l6ZSBzY3JvbGxP
ZmZzZXQgPSBmcmFtZVZpZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCk7CisjZW5k
aWYKIAogICAgIGlmICghYW5jZXN0b3JUb1N0b3BBdCAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9t
Q29udGFpbmVyKDApKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CkBAIC00MDEs
NyArNDIxLDExIEBAIGNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyVmlldzo6cHVzaE1hcHBpbmdU
b0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqCiB2b2lkIFJlbmRlclZpZXc6Om1h
cEFic29sdXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwgVHJhbnNmb3Jt
U3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIGlmIChtb2RlICYgSXNGaXhlZCkK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoZml4ZWRQb3Np
dGlvbk9mZnNldChmcmFtZVZpZXcoKSkpOworI2Vsc2UKICAgICAgICAgdHJhbnNmb3JtU3RhdGUu
bW92ZShmcmFtZVZpZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkpOworI2VuZGlm
CiAKICAgICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJv
bUNvbnRhaW5lcigwKSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OwpAQCAtNTcy
LDcgKzU5NiwxMiBAQCB2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0
IExheW91dFJlY3QmIHVyLCBib29sIGltbWVkaWF0ZSkgY29ucwogICAgICAgICBmcmFtZVZpZXco
KS5yZXBhaW50Q29udGVudFJlY3RhbmdsZShwaXhlbFNuYXBwZWRJbnRSZWN0KHVyKSwgaW1tZWRp
YXRlKTsKICAgICBlbHNlIGlmIChSZW5kZXJCb3gqIG9iaiA9IGVsdC0+cmVuZGVyQm94KCkpIHsK
ICAgICAgICAgTGF5b3V0UmVjdCB2ciA9IHZpZXdSZWN0KCk7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICAvLyBEb24ndCBjbGlwIHVzaW5nIHRoZSB2aXNpYmxlIHJlY3Qgc2luY2UgY2xpcHBp
bmcgaXMgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCBvbiBpUGhvbmUuCisgICAgICAgIExheW91
dFJlY3QgciA9IHVyOworI2Vsc2UKICAgICAgICAgTGF5b3V0UmVjdCByID0gaW50ZXJzZWN0aW9u
KHVyLCB2cik7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRyYWN0IG91dCB0aGUg
Y29udGVudHNYIGFuZCBjb250ZW50c1kgb2Zmc2V0cyB0byBnZXQgb3VyIGNvb3JkcyB3aXRoaW4g
dGhlIHZpZXdpbmcKICAgICAgICAgLy8gcmVjdGFuZ2xlLgpAQCAtNjM2LDggKzY2NSwxMyBAQCB2
b2lkIFJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udAogICAgICAgICAgICAgcmVjdC5zZXRYKHZpZXdXaWR0aCgp
IC0gcmVjdC5tYXhYKCkpOwogICAgIH0KIAotICAgIGlmIChmaXhlZCkKKyAgICBpZiAoZml4ZWQp
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJlY3QubW92ZShmaXhlZFBvc2l0aW9uT2Zm
c2V0KGZyYW1lVmlldygpKSk7CisjZWxzZQogICAgICAgICByZWN0Lm1vdmUoZnJhbWVWaWV3KCku
c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpKTsKKyNlbmRpZgorICAgIH0KICAgICAgICAg
CiAgICAgLy8gQXBwbHkgb3VyIHRyYW5zZm9ybSBpZiB3ZSBoYXZlIG9uZSAoYmVjYXVzZSBvZiBm
dWxsIHBhZ2Ugem9vbWluZykuCiAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyICYmIGxheWVyKCkg
JiYgbGF5ZXIoKS0+dHJhbnNmb3JtKCkpCkBAIC0xMTU2LDYgKzExOTAsMjQgQEAgRmxvd1RocmVh
ZENvbnRyb2xsZXImIFJlbmRlclZpZXc6OmZsb3dUaHJlYWRDb250cm9sbGVyKCkKICAgICByZXR1
cm4gKm1fZmxvd1RocmVhZENvbnRyb2xsZXI7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0
aWMgYm9vbCBpc0ZpeGVkUG9zaXRpb25JblZpZXdwb3J0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyKQoreworICAgIHJldHVybiAocmVu
ZGVyZXIuc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pICYmIHJlbmRlcmVyLmNv
bnRhaW5lcigpID09IGNvbnRhaW5lcjsKK30KKworYm9vbCBSZW5kZXJWaWV3OjpoYXNDdXN0b21G
aXhlZFBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENvbnRhaW5pbmdCbG9j
a0NoZWNrIGNoZWNrQ29udGFpbmVyKSBjb25zdAoreworICAgIGlmICghZnJhbWVWaWV3KCkudXNl
Q3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGNoZWNrQ29udGFpbmVyID09IENoZWNrQ29udGFpbmluZ0Jsb2NrKQorICAgICAg
ICByZXR1cm4gaXNGaXhlZFBvc2l0aW9uSW5WaWV3cG9ydChyZW5kZXJlciwgdGhpcyk7CisKKyAg
ICByZXR1cm4gcmVuZGVyZXIuc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247Cit9
CisjZW5kaWYKKwogdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxv
d1RocmVhZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKIHsKICAgICBpZiAoIW1fZmxvd1Ro
cmVhZENvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBl
MmIyODQyN2Y3YTEwODY3MjZmMjY4NjE2OThlNGNiYTFlMDE2YTRiLi42ZjNiYjdkZDRlMDc1MTQ4
YWI1NmZiZGY1NWUxYjQ2MGU3MjA5YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKQEAgLTIwNCw2ICsyMDQsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KSBPVkVSUklERTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbnVtIENvbnRhaW5pbmdCbG9j
a0NoZWNrIHsgQ2hlY2tDb250YWluaW5nQmxvY2ssIERvbnRDaGVja0NvbnRhaW5pbmdCbG9jayB9
OworICAgIGJvb2wgaGFzQ3VzdG9tRml4ZWRQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmLCBD
b250YWluaW5nQmxvY2tDaGVjayA9IENoZWNrQ29udGFpbmluZ0Jsb2NrKSBjb25zdDsKKyNlbmRp
ZgorCiAgICAgSW50ZXJ2YWxBcmVuYSogaW50ZXJ2YWxBcmVuYSgpOwogCiAgICAgSW50U2l6ZSB2
aWV3cG9ydFNpemUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKaW5kZXggZmMyMDk1ZDA4ZmIxODhiNWY2MDI0ODc1NDJjNTA4OGMzNzE2OGEwOC4uMWFm
ZDkxNmJjNTg1OGYxZTNhMGVlYzM2MWUyY2I0ZmYzNGRmYWE1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTkxLDYgKzkxLDExIEBAIFJlbmRlcldpZGdl
dDo6UmVuZGVyV2lkZ2V0KEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OndpbGxCZURlc3Ryb3llZCgpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNMYXllcigpKQorICAgICAgICBsYXllcigpLT53
aWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgorCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBjYWNoZS0+
Y2hpbGRyZW5DaGFuZ2VkKHRoaXMtPnBhcmVudCgpKTsKICAgICAgICAgY2FjaGUtPnJlbW92ZSh0
aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCAx
OGQ3Mzg5MWQ5MmQwZTVhNjZhZGMyZTBkZTE4MWQxNjlmNjFlOGY4Li40ZjllOTJiOWQwZmU1ZjM0
MGUxYmYzZWQ1NzU0ZjVmOTI2ODY1OTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCkBAIC04NDYsNyArODQ2LDExIEBAIHZvaWQgUm9vdElubGluZUJveDo6
YXNjZW50QW5kRGVzY2VudEZvckJveChJbmxpbmVCb3gqIGJveCwgR2x5cGhPdmVyZmxvd0FuZEZh
bGxiCiAgICAgYm9vbCBzZXRVc2VkRm9udFdpdGhMZWFkaW5nID0gZmFsc2U7CiAKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LT5saW5lU3R5bGUoKTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgaWYgKHVzZWRGb250cyAmJiAhdXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYg
KGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAm
JiBpbmNsdWRlTGVhZGluZykpICYmICFib3gtPnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5zZXR0aW5n
cygpLT5hbHdheXNVc2VCYXNlbGluZU9mUHJpbWFyeUZvbnQoKSkgeworI2Vsc2UKICAgICBpZiAo
dXNlZEZvbnRzICYmICF1c2VkRm9udHMtPmlzRW1wdHkoKSAmJiAoaW5jbHVkZUZvbnQgfHwgKGJv
eExpbmVTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkp
IHsKKyNlbmRpZgogICAgICAgICB1c2VkRm9udHMtPmFwcGVuZChib3hMaW5lU3R5bGUuZm9udCgp
LnByaW1hcnlGb250KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVzZWRGb250
cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0
cmljcyA9IHVzZWRGb250cy0+YXQoaSktPmZvbnRNZXRyaWNzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAppbmRleCA1OTNmZWVmMWFiYzhkM2EyY2YyMWM1ZWE5NGNl
MjA3MjkyMTUyMGExLi43MDRkZmZlYmNlNzdjZDEyYjc4YmNiZWZmZjM4MzI1ZDE2ZGJjMjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAKQEAgLTMyLDcgKzMyLDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q2hhcmFjdGVyTmFtZXMuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5o
PgogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218603</attachid>
            <date>2013-12-06 10:08:05 -0800</date>
            <delta_ts>2013-12-06 10:53:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125239-20131206100801.patch</filename>
            <type>text/plain</type>
            <size>226649</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMjI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc3Mzk2N2ZiZTU1ZmU3
N2I5NmI5NThjNmViNDE3OWYwMDY0ZjllYi4uM2IwYjBlZTc3M2M5NDNkODBmNTg2MWE1ZWY4ZGU3
ZTY0NWQ1NTExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1MiBAQAorMjAxMy0xMi0wNCAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0g
V2ViQ29yZS9yZW5kZXJpbmcgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVCb3g6OnByZXZpb3VzT25MaW5lRXhpc3RzKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KTogTW9kaWZpZWQgdG8gcXVlcnkgUmVuZGVyU3R5bGUKKyAgICAgICAgb24gaU9TIGZvciB0aGUg
Y29tcG9zaXRpb24gZmlsbCBjb2xvci4gQWRkZWQgRklYTUUgdG8gbWFrZSB0aGlzIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREZWNv
cmF0aW9uKTogQWRkZWQgaU9TLXNwZWNpZmljIGRlY29yYXRpb24gY29kZS4KKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVTdHlsZUZvck1hcmtlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4g
QWxzbywgYWRkZWQKKyAgICAgICAgRklYTUUgdG8gbWFrZSB0aGlzIGNvZGUgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOiBDaGFuZ2Vk
IGFjY2VzcyBjb250cm9sIG9mIGxvZ2ljYWx7TGVmdCwgUmlnaHR9U2VsZWN0aW9uT2Zmc2V0KCkK
KyAgICAgICAgZnJvbSBwcml2YXRlIHRvIHByb3RlY3RlZCBzbyB0aGF0IHRoZXNlIG1ldGhvZHMg
Y2FuIGJlIHVzZWQgZnJvbSBSZW5kZXJJbWFnZTo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKCkuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmJvcmRlclJhZGlpKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZC4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS82MjA5NzYzPgorICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4gCisgICAgICAgIChXZWJDb3JlOjpjdXN0b21Db250YWluaW5nQmxv
Y2tXaWR0aCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJD
b3JlOjpjdXN0b21Db250YWluaW5nQmxvY2tIZWlnaHQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFU
Rk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNv
cmU6OmN1c3RvbUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3VzdG9tQ29udGFpbmluZ0Jsb2Nr
QXZhaWxhYmxlTG9naWNhbEhlaWdodCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUyku
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2lu
Zyk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlOyBjYWxscyBjdXN0b21Db250YWluaW5nQmxvY2tB
dmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgY29kZTsgY2FsbHMgY3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoKCkuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQ
b3NpdGlvbmVkKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGU7IGNhbGxzIGN1c3RvbUNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxIZWlnaHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpzdGlja3lQb3NpdGlvbk9mZnNldCk6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZpeGVk
UG9zaXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZpZXdw
b3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6bGF5b3V0
KTogQWRkZWQ7IGlPUy1zcGVjaWZpYy4gSW5jbHVkZXMgRklYTUUgY29tbWVudC4KKyAgICAgICAg
U2VlIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVEaWRDaGFuZ2UpOiBNb2RpZmllZCB0byBv
bmx5IGNhbGwgYXJlQ3Vyc29yc0VxdWFsKCkgYW5kCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2No
ZWR1bGVDdXJzb3JVcGRhdGUoKSBvbiBhIG5vbi1pT1MgcG9ydC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOiBBZGRlZCBpT1Mtc3Bl
Y2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbik6IFRoaXMgbWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBs
ZW1lbnRhdGlvbiBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uV2l0aERlc2NyaXB0aW9uKTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5vZGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVU
ZXh0VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzKTogRGl0
dG87IEFsc28gYWRkZWQgRklYTUUgY29tbWVudCBhcyB0aGlzIGNvZGUgbWF5IG5vdAorICAgICAg
ICBiZSBzcGVjaWZpYyB0byBpT1MuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5o
OiBBZGRlZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZCB0byBSZW5kZXJPYmplY3Q6OnJlbmRlck5h
bWUoKS4gQWRkZWQKKyAgICAgICAgRklYTUUgY29tbWVudCB0byBkZXRlcm1pbmUgd2hldGhlciB0
aGlzIHdvcmthcm91bmQgaXMgc3RpbGwgYXBwbGljYWJsZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNvbGxlY3RT
ZWxlY3Rpb25SZWN0cyk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRBcmVhRWxlbWVudEZvY3VzUmluZyk6IFRoaXMg
bWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzRm9yU2Vs
ZWN0aW9uKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6IEFkZGVkIGlP
Uy1zcGVjaWZpYyBtZW1iZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6flJlbmRlckxheWVyKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6d2lsbEJlRGVzdHJveWVkKTogQWRkZWQ7IGlPUy1zcGVj
aWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNBY2NlbGVyYXRlZFRvdWNo
U2Nyb2xsaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFuZGxl
VG91Y2hFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVOZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmcpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSBhcyB3ZSB1c2Ug
VUlLaXQKKyAgICAgICAgdG8gY29tcG9zaXRlIG91ciBzY3JvbGwgYmFycy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOiBNb2RpZmll
ZCB0byBtYWtlIHVzZSBvZiB0aGUgcGFzc2VkIFN0eWxlRGlmZmVyZW5jZSBvbiBpT1MuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0KTogQWRkZWQ7IGlP
Uy1zcGVjaWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9s
bCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KTogQWRkIGlPUy1zcGVjaWZpYyB3b3JrYXJvdW5kIHdpdGggRklYTUUu
IFNlZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKTog
QWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFwaGljc0xh
eWVyKTogTW9kaWZpZWQgdG8gbm90IGFwcGx5IHBhZ2Ugc2NhbGUgb24gaU9TCisgICAgICAgIGFz
IHdlIGFwcGx5IGEgcGFnZSBzY2FsZSBhdCBhIGRpZmZlcmVudCB0aW1lIGluIHRoZSBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpsYXllcldpbGxCZURlc3Ryb3ll
ZCk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJDb3JlOjps
YXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JTY3JvbGxpbmcpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgdmFyaWFudCB3aXRoIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNob3VsZENsaXBDb21wb3NpdGVkQm91bmRzKTogQWRkZWQgaU9TLXNwZWNp
ZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZWdpc3RlclNjcm9sbGluZ0xheWVy
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVT
Y3JvbGxpbmdMYXllcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCk6IENhbGwgUmVuZGVyTGF5ZXI6Omhhc0JveERl
Y29yYXRpb25zT3JCYWNrZ3JvdW5kKCkKKyAgICAgICAgd2hlbiBidWlsZGluZyBvbiBpT1MgU2lt
dWxhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYXJlbnRGb3JT
dWJsYXllcnMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSBhbmQgRklYTUUgY29tbWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRzSW50b1dpbmRvdyk6IE9w
dC1pbnRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGNvZGUgcGF0aC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdCk6IEFkZGVk
IGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludEludG9MYXllcik6IENvbXBpbGUtb3V0IEFTU0VSVF9OT1RfUkVBQ0hFRCBmb3IgaU9T
IGFuZCBhZGRlZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjptaW5pbXVtRG9jdW1lbnRTY2FsZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JN
KElPUykuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFsbG93Q29tcG9z
aXRpbmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0o
SU9TKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
aHJvbWVDbGllbnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMp
OiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhh
c0Rpc3BsYXlOb25lKTogQWRkZWQ7IGlPUy1zcGVjaWZpYy4KKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDdXN0b21MYXllcnNBZnRlckZsdXNoKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNoQ2hh
bmdlc0ZvckxheWVyKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZENoYW5nZVZpc2libGVSZWN0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCk6
IERvbid0IGFwcGx5IHBhZ2Ugc2NhbGUgZmFjdG9yIG9uIGlPUy4gV2UgYXBwbHkKKyAgICAgICAg
dGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGF0IGEgZGlmZmVyZW50IHRpbWUgaW4gdGhlIGNvZGUuIEFs
c28sIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6IEFkZGVkIGlPUy1zcGVj
aWZpYyB3b3JrYXJvdW5kLgorICAgICAgICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzgzNDgzMzc+IGZv
ciBtb3JlIGRldGFpbHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNldElzSW5XaW5kb3cpOiBVc2Ugbm9uLU1hYyBjb2RlIHBhdGggZm9yIGlPUy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWxsb3dzSW5kZXBlbmRlbnRseUNvbXBv
c2l0ZWRGcmFtZXMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzT3duQmFj
a2luZ1N0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlYXNvbnNGb3JDb21wb3NpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKTogT3B0
LWludG8gY2FsbGluZworICAgICAgICBBbmltYXRpb25Db250cm9sbGVyOjppc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKCkgb24gaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsaW5nKTogQWRkZWQ7IGd1YXJk
ZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OmlzU3RpY2t5SW5BY2NlbGVy
YXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbik6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZpeGVkUG9z
aXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZpZXdwb3J0
Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6bWluaW11bURvY3VtZW50U2NhbGUpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjphbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXZpY2VTY2FsZUZhY3Rvcik6IEFk
ZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpwYWdlU2NhbGVGYWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29udGVudHNTY2FsZU11bHRpcGxpZXJGb3JOZXdUaWxlcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290
TGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUZpeGVkVmlld3BvcnRDb25zdHJhaW50cyk6IFVzZSBGcmFtZVZpZXc6OmN1c3RvbUZp
eGVkUG9zaXRpb25MYXlvdXRSZWN0KCkKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZVZpZXc6OnZp
ZXdwb3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0
ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcik6IFRoaXMgbWV0aG9kIGhhcyBhbiBl
bXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TCisgICAgICAgIGFzIHdlIGJhdGNoIHVwZGF0ZSB2
aWV3cG9ydC1jb25zdHJhaW5lZCBsYXllcnMgaW4gdGhlIGlPUy1zcGVjaWZpYyBtZXRob2QsIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgpLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycyk6IEFkZGVkOyBn
dWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVucmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsU2Ny
b2xsaW5nTGF5ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3Jv
bGxpbmdMYXllclJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c3RhcnRJbml0aWFsTGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oOiBBZGRlZCBpT1Mtc3BlY2lmaWMgQ2xh
bmcgd29ya2Fyb3VuZCB0byBpZ25vcmUKKyAgICAgICAgYW4gdW51c2VkIHByaXZhdGUgZmllbGQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNlbGVjdGVkT3B0aW9uQ291bnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1Mp
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KTogT24g
aU9TIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwSXNWaXNpYmxl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6On5SZW5kZXJNZW51TGlzdCk6IE9u
IGlPUyB3ZSBkb24ndCBtYWtlIHVzZSBvZiBSZW5kZXJNZW51TGlzdDo6bV9wb3B1cC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKTogQWRkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21FbGVtZW50
KTogT24gaU9TIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwLgor
ICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tT3B0aW9uKTogQWRkIGlPUy1zcGVj
aWZpYyBjb2RlLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCk6IERlZmluZSBS
ZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkgdG8gQVNTRVJUX05PVF9SRUFDSEVEKCkgb24gaU9T
IGFzCisgICAgICAgIHdlIGRvbid0IG1ha2UgdXNlIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVw
LgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmhpZGVQb3B1cCk6IFRoaXMgbWV0aG9kIGhhcyBh
biBlbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgaU9TIGFzIHdlIGRvbid0IG1ha2UgdXNlCisgICAg
ICAgIG9mIFJlbmRlck1lbnVMaXN0OjptX3BvcHVwLgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6
OnBvcHVwRGlkSGlkZSk6IFRoaXMgbWV0aG9kIGhhcyBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBm
b3IgaU9TIGFzIHdlIGRvbid0IG1ha2UgdXNlCisgICAgICAgIG9mIFJlbmRlck1lbnVMaXN0Ojpt
X3BvcHVwSXNWaXNpYmxlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojpjb2x1bW5OdW1iZXJGb3JPZmZzZXQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLiBBbHNvLCBhZGRlZCBhIEZJWE1FIGNvbW1lbnQgdG8KKyAgICAgICAgbWFr
ZSB0aGlzIGZ1bmN0aW9uIHJldHVybiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGluc3RlYWQgb2YgYSBz
aWduZWQgaW50ZWdlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNl
bGVjdGlvblJlY3RzKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZGVzdHJveSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppbm5lckxpbmVIZWlnaHQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKTogQWRk
ZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
OiBDaGFuZ2UgdGhlIGFjY2VzcyBjb250cm9sIG9mIFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JC
b3hTaWRlKCkgZnJvbSBwcm90ZWN0ZWQgdG8KKyAgICAgICAgcHVibGljIHNvIHRoYXQgaXQgY2Fu
IGJlIHVzZWQgZnJvbSBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSgp
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVF1YWRzRm9yU2VsZWN0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmg6IENoYW5nZSB0aGUg
YWNjZXNzIGNvbnRyb2wgb2YgUmVuZGVyU2Nyb2xsYmFyOjpnZXRTY3JvbGxiYXJQc2V1ZG9TdHls
ZSgpIGZyb20KKyAgICAgICAgcHJpdmF0ZSB0byBwdWJsaWMgc28gdGhhdCBpdCBjYW4gYmUgdXNl
ZCBmcm9tIHRoZSBpT1Mtc3BlY2lmaWMgc3RhdGljIGZ1bmN0aW9uLCBzY3JvbGxiYXJIYXNEaXNw
bGF5Tm9uZSwKKyAgICAgICAgZGVmaW5lZCBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVRleHQpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29k
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c2V0VGV4dEludGVy
bmFsKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y2FuU2Nyb2xsKTog
QWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjppbm5lckxpbmVIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmU6OmdldEF2Z0NoYXJXaWR0aCk6IENvbXBpbGUtb3V0IGNvZGUgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
OmNyZWF0ZUlubmVyVGV4dFN0eWxlKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lk
dGgpOiBDb21waWxlLW91dCBjb2RlIHdoZW4gYnVpbGRpbmcgZm9yIGlPUy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2lj
YWxXaWR0aCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6cG9zaXRpb25Gb3JQ
b2ludCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJP
bmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0
aW9ucyk6IE1vZGlmaWVkIHRvIGNhbGwgdGhlIGNvbnRyb2wtc3BlY2lmaWMgcGFpbnQqRGVjb3Jh
dGlvbnMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwYWludENoZWNrYm94RGVjb3JhdGlvbnMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbkRlY29yYXRpb25z
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGRE
ZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
VGV4dEFyZWFEZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBhaW50TWVudUxpc3REZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50RmlsZVVwbG9hZEljb25E
ZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyk6IEFkZGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oOiBEb24ndCBjb21waWxlIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKTogQ29tcGlsZS1vdXQgY29kZSB3
aGVuIGJ1aWxkaW5nIGZvciBpT1MuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXZhaWxhYmxlTG9naWNhbEhlaWdodCk6
IEFkZCBpT1Mtc3BlY2lmaWMgd29ya2Fyb3VuZC4gU2VlIDxyZGFyOi8vcHJvYmxlbS83MTY2ODA4
Pi4KKyAgICAgICAgKFdlYkNvcmU6OmZpeGVkUG9zaXRpb25PZmZzZXQpOiBBZGRlZDsgdXNlZCBp
biBpT1Mtc3BlY2lmaWMgY29kZSAoZS5nLiBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29udGFpbmVy
KCkpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bWFwTG9jYWxUb0NvbnRhaW5lcik6
IFVzZSBXZWJDb3JlOjpmaXhlZFBvc2l0aW9uT2Zmc2V0KCkgaW5zdGVhZCBvZiAKKyAgICAgICAg
RnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGaXhlZFBvc2l0aW9uSW5WaWV3cG9ydCk6IEFk
ZGVkOyB1c2VkIGluIFJlbmRlclZpZXc6Omhhc0N1c3RvbUZpeGVkUG9zaXRpb24oKS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6Omhhc0N1c3RvbUZpeGVkUG9zaXRpb24pOiBBZGRlZDsg
Z3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJXaWRnZXQ6OndpbGxCZURlc3Ryb3llZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBj
b2RlLgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3gpOiBEaXR0by4KKyAg
ICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwOiBPbmx5IGluY2x1ZGUgaGVhZGVyIDxD
b3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+IHdoZW4gYnVpbGRpbmcgZm9yIE1hYy4KKwogMjAx
My0xMi0wNiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFr
ZSByZW1haW5pbmcgQ1NTVmFsdWUgY29uc3RydWN0b3JzIHJldHVybiBQYXNzUmVmLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZm
NDAxOTdkZjg1OWMxMDBhNTcxYTY3NmUwZjI0YTIzMTJjMmU1NDguLjY5NTViYjRhZDFiOTc0ZDhi
YWE1OGJiMDUwNjFjOTgxMmIxZGZmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0MzksNiArNTQzOSw4IEBACiAJCUNFN0Iy
REI1MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIxMTU4NkFCQUQw
MDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRTdCMkRCNjE1ODZBQkFEMDA5OEIzRkEg
LyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U3QjJEQjIxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5tbSAqLzsgfTsKIAkJQ0U5NTIwOEExODExQjQ3NTAwN0E1MzkyIC8q
IFdlYlNhZmVJbmNyZW1lbnRhbFN3ZWVwZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQzRDQjFEMTYxQTEzMTIwMEQyMTREQSAvKiBXZWJTYWZl
SW5jcmVtZW50YWxTd2VlcGVySU9TLmggKi87IH07CisJCUZFRDEzRDUyMENFQTk0OTcwMEQ4OTQ2
NiAvKiBSZW5kZXJUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVEMTNENTAwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJlbmRlclRoZW1lSU9TLmgg
Ki87IH07CisJCUM1NUM3QkExMTcxOEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJUaGVtZUlPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUM3QkEwMTcx
OEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJUaGVtZUlPUy5tbSAqLzsgfTsKIAkJQ0VDQURGQzYxNTM3
NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0FERkMyMTUzNzc4RkYwMEUzNzA2OCAv
KiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5jcHAgKi87IH07CiAJCUNFQ0FERkM3MTUzNzc4RkYwMEUz
NzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQURGQzMxNTM3NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlv
bkFsdGVybmF0aXZlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0VDQURGQzgxNTM3NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlvbkNvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQURGQzQx
NTM3NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlvbkNvbW1hbmQuY3BwICovOyB9OwpAQCAtMTI1NTgs
NiArMTI1NjAsOCBAQAogCQlDRTdCMkRCMDE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVU
ZXh0VUlDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tOyBwYXRoID0gbWFjL0FsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U3QjJE
QjExNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaDsgcGF0
aCA9IG1hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0U3QjJEQjIxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhS
YW5nZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5tbTsgcGF0aCA9IG1hYy9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRDEzRDUwMENFQTk0OTcwMEQ4OTQ2
NiAvKiBSZW5kZXJUaGVtZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJUaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTVDN0JBMDE3
MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJUaGVtZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0VDQURGQzIxNTM3NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlvbkFsdGVybmF0
aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpY3RhdGlvbkFs
dGVybmF0aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VDQURGQzMxNTM3
NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNFQ0FERkM0MTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25Db21tYW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpY3RhdGlvbkNvbW1h
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEyNDAsNiArMjEyNDQsOCBA
QAogCQkJCTg2RkY4ODVGMTVERTNCODIwMEJENkIyOCAvKiBSZW5kZXJUZXh0VHJhY2tDdWUuaCAq
LywKIAkJCQlCQ0VBNDg0QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWUuY3BwICovLAog
CQkJCUJDRUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovLAorCQkJCUZF
RDEzRDUwMENFQTk0OTcwMEQ4OTQ2NiAvKiBSZW5kZXJUaGVtZUlPUy5oICovLAorCQkJCUM1NUM3
QkEwMTcxOEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJUaGVtZUlPUy5tbSAqLywKIAkJCQlCQ0VBNDg0
ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLywKIAkJCQlCQ0VBNDg0OTA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMubW0gKi8sCiAJCQkJOTM5NTVBNDIwM0Q3
MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVBc1RleHQuY3BwICovLApAQCAtMjQzNjEsNiArMjQz
NjcsNyBAQAogCQkJCTQzOTA0NkRFMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxNYXRo
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFMDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVy
TWF0aE1MT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkUyMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxSb290LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUQxM0Q1MjBD
RUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQz
OTA0NkU0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxSb3cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOTA0NkU2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzgzMjI4NTE4MDEzRUQ4MDA5OTlFMEMgLyogTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMwMyw2ICsyODMxMCw3IEBA
CiAJCQkJOTc2RDZDN0IxMjJCOEEzRDAwMUZEMUY3IC8qIFdlYktpdEJsb2JCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE1MEI5MjM5MTVGMDhEQzQwMEUxMDk4NiAvKiBXZWJLaXRDU1NB
cnJheUZ1bmN0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTJFOEFFMzAxNkE0OEUx
QzAwNkJCM0FBIC8qIFdlYktpdENTU0ZpbHRlclJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzU1QzdCQTExNzE4QUZCQTAwMTMyN0U0IC8qIFJlbmRlclRoZW1lSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwNjAzNkYxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEyODhFNzQwRTMwMDVE
NjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCmluZGV4IDUxMWM2OTVlN2Q4OTVkM2Ri
Nzg3Y2FkNTk1MzE5Yjk4OWNmMDc2NjYuLjM1ZDE3ZGYzZGY4YzZjY2ZkY2M4MTVlMTgyMDkyNGE0
MGYxZjRmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCkBAIC0xOTMs
NiArMTkzLDE1IEBAIGJvb2wgSW5saW5lQm94OjpuZXh0T25MaW5lRXhpc3RzKCkgY29uc3QKICAg
ICByZXR1cm4gbV9iaXRmaWVsZHMubmV4dE9uTGluZUV4aXN0cygpOwogfQogCitib29sIElubGlu
ZUJveDo6cHJldmlvdXNPbkxpbmVFeGlzdHMoKSBjb25zdAoreworICAgIGlmICghcGFyZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocHJldk9uTGluZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGFyZW50KCktPnByZXZpb3VzT25MaW5lRXhpc3RzKCk7
Cit9CisKIElubGluZUJveCogSW5saW5lQm94OjpuZXh0TGVhZkNoaWxkKCkgY29uc3QKIHsKICAg
ICBJbmxpbmVCb3gqIGxlYWYgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCmlu
ZGV4IGY2NTI0MTlkYjBiN2U2M2Q0NzhkYWI1NmIwM2Y1ZDRjNGUwZjkyNDUuLmE2Y2U1ZGVjZjA2
OTBmOTFkMGUyOWY3YWU2MDU5ZTY3NGYzODY0NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lQm94LmgKQEAgLTEzMSw2ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJldiA9IHBy
ZXY7CiAgICAgfQogICAgIGJvb2wgbmV4dE9uTGluZUV4aXN0cygpIGNvbnN0OworICAgIGJvb2wg
cHJldmlvdXNPbkxpbmVFeGlzdHMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0xlYWYo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAKaW5kZXggYTA5OGYzNWExZGE2YTA0Njk4MTc2ZTU5OTFlOGU2NGUx
NGI5MDkwNy4uMmMzODFlN2Q5ZWEyMmU0Y2JiYjljNmE5OGM4NDQyMmU0YjFkMzUxNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtNzE2LDcgKzcxNiwx
MyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRgogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKIAorI2lmICFQTEFURk9STShJT1MpCisgICAgLy8g
RklYTUU6IElzIHRoaXMgY29sb3Igc3RpbGwgYXBwbGljYWJsZSBhcyBvZiBNYXZlcmlja3M/IGZv
ciBub24tTWFjIHBvcnRzPyBXZSBzaG91bGQKKyAgICAvLyBiZSBhYmxlIHRvIG1vdmUgdGhpcyBj
b2xvciBpbmZvcm1hdGlvbiB0byBSZW5kZXJTdHlsZS4KICAgICBDb2xvciBjID0gQ29sb3IoMjI1
LCAyMjEsIDg1KTsKKyNlbHNlCisgICAgQ29sb3IgYyA9IHN0eWxlLmNvbXBvc2l0aW9uRmlsbENv
bG9yKCk7CisjZW5kaWYKICAgICAKICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoKmNvbnRleHQs
IFRleHRQYWludFN0eWxlKGMsIHN0eWxlLmNvbG9yU3BhY2UoKSkpOyAvLyBEb24ndCBkcmF3IHRl
eHQgYXQgYWxsIQogCkBAIC0xMDAxLDcgKzEwMDcsMjAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JgogICAgIAogICAgIC8vIFVzZSBhIHNwZWNpYWwgZnVuY3Rpb24gZm9yIHVuZGVybGluZXMgdG8g
Z2V0IHRoZSBwb3NpdGlvbmluZyBleGFjdGx5IHJpZ2h0LgogICAgIGJvb2wgaXNQcmludGluZyA9
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpOworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3ModGV4dERlY29yYXRpb25UaGlja25lc3MpOwor
I2Vsc2UKKyAgICAvLyBPbiBpT1Mgd2Ugd2FudCB0byBkcmF3IGNyaXNwIGRlY29yYXRpb25zLiBU
aGUgZnVuY3Rpb24gZHJhd0xpbmVGb3JUZXh0IHRha2VzIHRoZSBjb250ZXh0J3MKKyAgICAvLyBz
dHJva2VUaGlja25lc3MgYW5kIHJlbmRlcnMgdGhhdCBhdCBkZXZpY2UgcGl4ZWwgc2NhbGUgKGku
ZS4gYSBzdHJva2VUaGlja25lc3Mgb2YgMSB3aWxsCisgICAgLy8gcHJvZHVjZSBhIDEgZGV2aWNl
IHBpeGVsIGxpbmUsIHNvIHRoaW5uZXIgb24gcmV0aW5hIHRoYW4gbm9uLXJldGluYSkuIFdlIHdp
bGwgYWxzbyBzY2FsZQorICAgIC8vIG91ciB0aGlja25lc3MgYmFzZWQgb24gdGhlIHNpemUgb2Yg
dGhlIGZvbnQuIFNpbmNlIG91ciBkZWZhdWx0IHNpemUgaXMgMTZweCB3ZSdsbCB1c2UgdGhhdAor
ICAgIC8vIGFzIGEgc2NhbGUgcmVmZXJlbmNlLgorICAgIGZsb2F0IGRvY3VtZW50U2NhbGUgPSBy
ZW5kZXJlcigpLmZyYW1lKCkuZG9jdW1lbnRTY2FsZSgpOworICAgIGNvbnN0IGZsb2F0IHRleHRE
ZWNvcmF0aW9uQmFzZUZvbnRTaXplID0gMTY7CisgICAgZmxvYXQgZm9udFNpemVTY2FsaW5nID0g
cmVuZGVyZXIoKS5zdHlsZSgpLmZvbnRTaXplKCkgLyB0ZXh0RGVjb3JhdGlvbkJhc2VGb250U2l6
ZTsKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSByb3VuZGYodGV4dERlY29yYXRpb25UaGlj
a25lc3MgKiBmb250U2l6ZVNjYWxpbmcgKiBkb2N1bWVudFNjYWxlKTsKKyAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MpOworI2VuZGlmCiAKICAgICBib29sIGxp
bmVzQXJlT3BhcXVlID0gIWlzUHJpbnRpbmcgJiYgKCEoZGVjb3JhdGlvbiAmIFRleHREZWNvcmF0
aW9uVW5kZXJsaW5lKSB8fCB1bmRlcmxpbmUuYWxwaGEoKSA9PSAyNTUpICYmICghKGRlY29yYXRp
b24gJiBUZXh0RGVjb3JhdGlvbk92ZXJsaW5lKSB8fCBvdmVybGluZS5hbHBoYSgpID09IDI1NSkg
JiYgKCEoZGVjb3JhdGlvbiAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpIHx8IGxpbmV0aHJv
dWdoLmFscGhhKCkgPT0gMjU1KTsKIApAQCAtMTE2NCw2ICsxMTgzLDExIEBAIHN0YXRpYyBHcmFw
aGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIGxpbmVTdHlsZUZvck1hcmtlclR5
cGUoRG9jdW1lbnRNCiAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFy
a2VyQXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudExpbmVTdHlsZTsKICAgICBjYXNlIERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CiAgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQ6OkRvY3VtZW50TWFya2VyRGljdGF0aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzOgorICAgICAgICAvLyBGSVhNRTogUmVuYW1lIFRleHRDaGVja2luZ0Rp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGUgYW5kIHJlbW92ZSB0aGUgUExB
VEZPUk0oSU9TKS1ndWFyZC4KKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENo
ZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0xpbmVTdHlsZTsKKyNlbmRpZgog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOwpAQCAt
MTMwNCw2ICsxMzI4LDEwIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtl
cnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3I6CiAgICAgICAgICAgICBjYXNl
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudDoKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgICAgICAg
ICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoK
KyNlbmRpZgogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMzQsNiArMTM2Miwx
MiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyOgogICAgICAgICAgICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXIocHQsIGJv
eE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLy8gRklYTUU6IFNlZSA8cmRhcjov
L3Byb2JsZW0vODkzMzM1Mj4uIEFsc28sIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4K
KyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXM6CisgICAgICAgICAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcihwdCwgYm94T3Jp
Z2luLCBtYXJrZXIsIHN0eWxlLCBmb250LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyNlbmRpZgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgogICAg
ICAgICAgICAgICAgIHBhaW50VGV4dE1hdGNoTWFya2VyKHB0LCBib3hPcmlnaW4sIG1hcmtlciwg
c3R5bGUsIGZvbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMjkxYTQ3NzZjZjIxYjQwZTVkYTc0YjAwOWU4ZTRm
ZmMzZGFiOWYzZi4uYzZjYzIxYzI1OGE1ZmQ5OTg1NDEwY2E3Nzc5NmVhNmU3MjE4MGYxNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yMjEwLDcgKzIyMTAs
MTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92
ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3guaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNp
emUocGFpbnRJbmZvLnBoYXNlKSk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3Rl
ZFBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHBhaW50
SW5mby5yZWN0KSkKKyAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHBhaW50SW5m
by5yZWN0KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1h
eSBiZSBhcHBsaWNhYmxlIHRvIG5vbi1pT1MgcG9ydHMuCisgICAgICAgICAgICAmJiAoIWhhc0xh
eWVyKCkgfHwgIWxheWVyKCktPmlzQ29tcG9zaXRlZCgpKQorI2VuZGlmCisgICAgICAgICkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1NTksNiArMzU2NCwxNSBAQCBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyhSZW5k
ZXJCbG9jayYgcGFyZW50LAogICAgIC8vIElmIHdlIGNhbid0IGZpbmQgYW4gYW5jZXN0b3IgdG8g
Y2hlY2sgZWRpdGFiaWxpdHkgb24sIG9yIGVkaXRhYmlsaXR5IGlzIHVuY2hhbmdlZCwgd2UgcmVj
dXIgbGlrZSBub3JtYWwKICAgICBpZiAoaXNFZGl0aW5nQm91bmRhcnkoYW5jZXN0b3IsIGNoaWxk
KSkKICAgICAgICAgcmV0dXJuIGNoaWxkLnBvc2l0aW9uRm9yUG9pbnQocG9pbnRJbkNoaWxkQ29v
cmRpbmF0ZXMpOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBPbiB0aGUgcGhvbmUg
d2Ugd2FudCB0byBjb25zdHJhaW4gVmlzaWJsZVBvc2l0aW9ucyB0byB0aGUgZWRpdGFibGUgcmVn
aW9uIGNsb3Nlc3QgdG8gdGhlIGlucHV0IHBvc2l0aW9uLCBzbworICAgIC8vIHdlIHdpbGwgYWxs
b3cgZGVzY2VudCBmcm9tIG5vbi1lZHRpYWJsZSB0byBlZGl0YWJsZSBjb250ZW50LgorICAgIC8v
IEZJWE1FOiBUaGlzIGNvbnN0cmFpbmluZyBtdXN0IGJlIGRvbmUgYXQgYSBoaWdoZXIgbGV2ZWwg
b25jZSB3ZSBpbXBsZW1lbnQgY29udGVudEVkaXRhYmxlLiBGb3Igbm93LCBpZiBzb21ldGhpbmcK
KyAgICAvLyBpcyBlZGl0YWJsZSwgdGhlIHdob2xlIGRvY3VtZW50IHdpbGwgYmUuCisgICAgaWYg
KGNoaWxkRWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhYW5jZXN0b3ItPmVsZW1lbnQo
KS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkLnBvc2l0aW9uRm9y
UG9pbnQocG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXMpOworI2VuZGlmCiAKICAgICAvLyBPdGhlcndp
c2UgcmV0dXJuIGJlZm9yZSBvciBhZnRlciB0aGUgY2hpbGQsIGRlcGVuZGluZyBvbiBpZiB0aGUg
Y2xpY2sgd2FzIHRvIHRoZSBsb2dpY2FsIGxlZnQgb3IgbG9naWNhbCByaWdodCBvZiB0aGUgY2hp
bGQKICAgICBMYXlvdXRVbml0IGNoaWxkTWlkZGxlID0gcGFyZW50LmxvZ2ljYWxXaWR0aEZvckNo
aWxkKGNoaWxkKSAvIDI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4
IDg2ZTIxZjFlZDMyMTIxNGMyOGJhYzQ1MjA4MzhmZmU1MmM1ZjVjMjkuLmNmNWUwMjQ3YmRmYmEx
YzY4NTY2YTA3OWZkNzY3ZWFmY2JlZjQ3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCkBAIC00NDEsNiArNDQxLDkgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBzZXRE
ZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQsIExheW91dFVuaXQpOwogCisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBM
YXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJik7
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sm
IHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9m
ZnNldENhY2hlcyYpOworCiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVPdmVyZmxv
dyhMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1dGVGbG9hdHMgPSBm
YWxzZSk7CiAgICAgdm9pZCBjbGVhckxheW91dE92ZXJmbG93KCk7CkBAIC01NjEsOSArNTY0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVu
aXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3Qg
TG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopOwogICAgIExh
eW91dFJlY3QgYmxvY2tTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3Qg
TGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIExheW91dFVuaXQgbGFzdExvZ2ljYWxUb3As
IExheW91dFVuaXQgbGFzdExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxhc3RMb2dpY2FsUmlnaHQs
IExheW91dFVuaXQgbG9naWNhbEJvdHRvbSwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENh
Y2hlcyYsIGNvbnN0IFBhaW50SW5mbyopOwotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTZWxl
Y3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwg
Y29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYpOwotICAgIExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExheW91dFVu
aXQgcG9zaXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmKTsKLSAgICAK
KwogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwg
Y2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwgdm9pZCBj
bGlwT3V0RmxvYXRpbmdPYmplY3RzKFJlbmRlckJsb2NrJiwgY29uc3QgUGFpbnRJbmZvKiwgY29u
c3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRTaXplJikgeyB9OwogICAgIGZyaWVuZCBjbGFz
cyBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAppbmRleCBhNmU0NzBlZWMyYjJhNDczY2Q2YWZlNDViYjExYzVjNWY1MTg2NDlm
Li5jZjZlYzNlOWI1NzgyNWU5MDRlMDNlMmM1NWFmYTU2ODM5MGFkOTE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtNTk2LDYgKzYwMCwxOCBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29uc3RyYWluQ29udGVudEJveExvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRV
bml0IGxvZ2ljYQogICAgIHJldHVybiBzdGQ6Om1heChsb2dpY2FsSGVpZ2h0LCBjb21wdXRlQ29u
dGVudExvZ2ljYWxIZWlnaHQoc3R5bGVUb1VzZS5sb2dpY2FsTWluSGVpZ2h0KCkpKTsKIH0KIAor
Um91bmRlZFJlY3Q6OlJhZGlpIFJlbmRlckJveDo6Ym9yZGVyUmFkaWkoKSBjb25zdAoreworICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgTGF5b3V0UmVjdCBib3Vu
ZHMgPSBmcmFtZVJlY3QoKTsKKworICAgIHVuc2lnbmVkIGJvcmRlckxlZnQgPSBzdHlsZS5ib3Jk
ZXJMZWZ0V2lkdGgoKTsKKyAgICB1bnNpZ25lZCBib3JkZXJUb3AgPSBzdHlsZS5ib3JkZXJUb3BX
aWR0aCgpOworICAgIGJvdW5kcy5tb3ZlQnkoTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCwgYm9yZGVy
VG9wKSk7CisgICAgYm91bmRzLmNvbnRyYWN0KGJvcmRlckxlZnQgKyBzdHlsZS5ib3JkZXJSaWdo
dFdpZHRoKCksIGJvcmRlclRvcCArIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgIHJl
dHVybiBzdHlsZS5nZXRSb3VuZGVkQm9yZGVyRm9yKGJvdW5kcykucmFkaWkoKTsKK30KKwogSW50
UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CiB7CiAgICAgLy8gVGhp
cyBpcyB3cm9uZyB3aXRoIHRyYW5zZm9ybXMgYW5kIGZsaXBwZWQgd3JpdGluZyBtb2Rlcy4KQEAg
LTExNTksNiArMTE3NSwxNCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgIExheW91dFJl
Y3QgcGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHBhaW50SW5mby5yZW5kZXJSZWdp
b24pOwogICAgIHBhaW50UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS82MjA5NzYzPi4gRm9y
Y2UgdGhlIHBhaW50aW5nIGJvdW5kcyBvZiBjaGVja2JveGVzIGFuZCByYWRpbyBjb250cm9scyB0
byBiZSBzcXVhcmUuCisgICAgaWYgKHN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFy
dCB8fCBzdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKKyAgICAgICAgaW50IHdp
ZHRoID0gc3RkOjptaW4ocGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgIGludCBoZWlnaHQgPSB3aWR0aDsKKyAgICAgICAgcGFpbnRSZWN0ID0gSW50UmVjdChw
YWludFJlY3QueCgpLCBwYWludFJlY3QueSgpICsgKHRoaXMtPmhlaWdodCgpIC0gaGVpZ2h0KSAv
IDIsIHdpZHRoLCBoZWlnaHQpOyAvLyBWZXJ0aWNhbGx5IGNlbnRlciB0aGUgY2hlY2tib3gsIGxp
a2Ugb24gZGVza3RvcAorICAgIH0KKyNlbmRpZgogICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5j
ZSBibGVlZEF2b2lkYW5jZSA9IGRldGVybWluZUJhY2tncm91bmRCbGVlZEF2b2lkYW5jZShwYWlu
dEluZm8uY29udGV4dCk7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGV2ZW50dWFsbHkgZ2l2ZSB0
aGUgdGhlbWUgY29udHJvbCBvdmVyIHdoZXRoZXIgdGhlIGJveCBzaGFkb3cgc2hvdWxkIHBhaW50
LCBzaW5jZSBjb250cm9scyBjb3VsZCBoYXZlCkBAIC0yMTA5LDkgKzIxMzMsMTUgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGEKICAgICByZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwogICAgIGlm
IChvLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJCb3gqIGNvbnRhaW5lckJv
eCA9IHRvUmVuZGVyQm94KG8pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKCFjb250
YWluZXJCb3gtPmxheWVyKCkgfHwgIWNvbnRhaW5lckJveC0+bGF5ZXIoKS0+aGFzQWNjZWxlcmF0
ZWRUb3VjaFNjcm9sbGluZygpKSB7CisjZW5kaWYKICAgICAgICAgY29udGFpbmVyQm94LT5hcHBs
eUNhY2hlZENsaXBBbmRTY3JvbGxPZmZzZXRGb3JSZXBhaW50KHJlY3QpOwogICAgICAgICBpZiAo
cmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICB9IAorI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKGNvbnRhaW5lclNraXBwZWQpIHsK
QEAgLTI5MDIsNiArMjkzMiwzMyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6YXZhaWxhYmxlTG9n
aWNhbEhlaWdodChBdmFpbGFibGVMb2dpY2FsSGVpZ2h0VHlwZSBoZWlnaHRUeQogICAgIHJldHVy
biBjb25zdHJhaW5Mb2dpY2FsSGVpZ2h0QnlNaW5NYXgoYXZhaWxhYmxlTG9naWNhbEhlaWdodFVz
aW5nKHN0eWxlKCkubG9naWNhbEhlaWdodCgpLCBoZWlnaHRUeXBlKSk7CiB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCitzdGF0aWMgaW5saW5lIGludCBjdXN0b21Db250YWluaW5nQmxvY2tXaWR0aChj
b25zdCBSZW5kZXJWaWV3JiB2aWV3LCBjb25zdCBSZW5kZXJCb3gmIGNvbnRhaW5pbmdCbG9ja0Jv
eCkKK3sKKyAgICByZXR1cm4gdmlldy5mcmFtZVZpZXcoKS5jdXN0b21GaXhlZFBvc2l0aW9uTGF5
b3V0UmVjdCgpLndpZHRoKCkgLSBjb250YWluaW5nQmxvY2tCb3guYm9yZGVyTGVmdCgpIC0gY29u
dGFpbmluZ0Jsb2NrQm94LmJvcmRlclJpZ2h0KCkgLSBjb250YWluaW5nQmxvY2tCb3gudmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjdXN0b21Db250YWlu
aW5nQmxvY2tIZWlnaHQoY29uc3QgUmVuZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVyQm94JiBj
b250YWluaW5nQmxvY2tCb3gpCit7CisgICAgcmV0dXJuIHZpZXcuZnJhbWVWaWV3KCkuY3VzdG9t
Rml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5oZWlnaHQoKSAtIGNvbnRhaW5pbmdCbG9ja0JveC5i
b3JkZXJUb3AoKSAtIGNvbnRhaW5pbmdCbG9ja0JveC5ib3JkZXJCb3R0b20oKSAtIGNvbnRhaW5p
bmdCbG9ja0JveC5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbnQg
Y3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgUmVuZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVyQm94JiBjb250YWluaW5nQmxv
Y2tCb3gpCit7CisgICAgcmV0dXJuIHN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBj
dXN0b21Db250YWluaW5nQmxvY2tXaWR0aCh2aWV3LCBjb250YWluaW5nQmxvY2tCb3gpIDogY3Vz
dG9tQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KHZpZXcsIGNvbnRhaW5pbmdCbG9ja0JveCk7Cit9CisK
K3N0YXRpYyBpbnQgY3VzdG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodChjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclZpZXcmIHZpZXcsIGNvbnN0IFJlbmRlckJveCYg
Y29udGFpbmluZ0Jsb2NrQm94KQoreworICAgIHJldHVybiBzdHlsZS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY3VzdG9tQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KHZpZXcsIGNvbnRhaW5pbmdC
bG9ja0JveCkgOiBjdXN0b21Db250YWluaW5nQmxvY2tXaWR0aCh2aWV3LCBjb250YWluaW5nQmxv
Y2tCb3gpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjdXN0b21Db250YWluaW5nQmxvY2tBdmFp
bGFibGVMb2dpY2FsSGVpZ2h0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVy
VmlldyYgdmlldykKK3sKKyAgICByZXR1cm4gc3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IHZpZXcuZnJhbWVWaWV3KCkuY3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5oZWln
aHQoKSA6IHZpZXcuZnJhbWVWaWV3KCkuY3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS53
aWR0aCgpOworfQorI2VuZGlmCisKIExheW91dFVuaXQgUmVuZGVyQm94OjphdmFpbGFibGVMb2dp
Y2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoLCBBdmFpbGFibGVMb2dpY2FsSGVpZ2h0VHlw
ZSBoZWlnaHRUeXBlKSBjb25zdAogewogICAgIC8vIFdlIG5lZWQgdG8gc3RvcCBoZXJlLCBzaW5j
ZSB3ZSBkb24ndCB3YW50IHRvIGluY3JlYXNlIHRoZSBoZWlnaHQgb2YgdGhlIHRhYmxlCkBAIC0y
OTE0LDkgKzI5NzEsMjEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxI
ZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgsIEF2YWlsYWJsZUxvZ2kKICAgICB9CiAKICAgICBp
ZiAoaC5pc1BlcmNlbnQoKSAmJiBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhaXNSZW5kZXJG
bG93VGhyZWFkKCkpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIFJlbmRlckJsb2NrKiBj
b250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgLy8gSWYg
d2UncmUgZml4ZWQsIGFuZCBvdXIgY29udGFpbmVyIGlzIHRoZSBSZW5kZXJWaWV3LCB1c2UgdGhl
IGN1c3RvbSBmaXhlZCBwb3NpdGlvbiByZWN0IGZvciBzaXppbmcuCisgICAgICAgIGlmIChjb250
YWluaW5nQmxvY2stPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBSZW5kZXJWaWV3JiB2
aWV3ID0gdG9SZW5kZXJWaWV3KCpjb250YWluaW5nQmxvY2spOworICAgICAgICAgICAgaWYgKHZp
ZXcuaGFzQ3VzdG9tRml4ZWRQb3NpdGlvbigqdGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGFkanVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6aW5nKHZhbHVlRm9yTGVuZ3Ro
KGgsIGN1c3RvbUNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoY29udGFpbmlu
Z0Jsb2NrLT5zdHlsZSgpLCB2aWV3KSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFk
anVzdENvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0Rm9yQm94U2l6aW5nKHZhbHVlRm9yTGVuZ3RoKGgs
IGNvbnRhaW5pbmdCbG9jay0+YXZhaWxhYmxlTG9naWNhbEhlaWdodChoZWlnaHRUeXBlKSkpOwor
I2Vsc2UKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgdGhlIGNvbnRhaW5pbmdC
bG9jayBoYXMgYSBwZXJwZW5kaWN1bGFyIHdyaXRpbmcgbW9kZS4KICAgICAgICAgTGF5b3V0VW5p
dCBhdmFpbGFibGVIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRp
b25lZChjb250YWluaW5nQmxvY2soKSk7CiAgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94
TG9naWNhbEhlaWdodEZvckJveFNpemluZyh2YWx1ZUZvckxlbmd0aChoLCBhdmFpbGFibGVIZWln
aHQpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIExheW91dFVuaXQgaGVpZ2h0SW5jbHVkaW5nU2Ny
b2xsYmFyID0gY29tcHV0ZUNvbnRlbnRBbmRTY3JvbGxiYXJMb2dpY2FsSGVpZ2h0VXNpbmcoaCk7
CkBAIC0yOTgxLDggKzMwNTAsMTUgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW8KIAogICAgIGlm
IChjb250YWluaW5nQmxvY2stPmlzQm94KCkpIHsKICAgICAgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgaWYgKCFm
bG93VGhyZWFkKQorICAgICAgICBpZiAoIWZsb3dUaHJlYWQpIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgICAgICBpZiAodmlldygpLmhhc0N1c3RvbUZpeGVkUG9zaXRpb24oKnRoaXMpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyQm94JiBjb250YWluaW5nQmxvY2tCb3ggPSB0
b1JlbmRlckJveCgqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Vz
dG9tQ29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoKGNvbnRhaW5pbmdCbG9ja0JveC5zdHlsZSgp
LCAmdmlldygpLCBjb250YWluaW5nQmxvY2tCb3gpOworICAgICAgICAgICAgfQorI2VuZGlmCiAg
ICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goY29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIHN0eWxlKCkucG9zaXRpb24oKSA9PSBGaXhlZFBv
c2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+dmlldygpLmNsaWVu
dExvZ2ljYWxXaWR0aCgpOwpAQCAtMzAzOCw2ICszMTE0LDEwIEBAIExheW91dFVuaXQgUmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5k
ZXJCb3hNCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3Np
dGlvbmVkKGNvbnRhaW5pbmdCbG9jaywgMCwgZmFsc2UpOwogCiAgICAgaWYgKGNvbnRhaW5pbmdC
bG9jay0+aXNCb3goKSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKHZpZXcoKS5o
YXNDdXN0b21GaXhlZFBvc2l0aW9uKCp0aGlzKSkKKyAgICAgICAgICAgIHJldHVybiBjdXN0b21D
b250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KHN0eWxlKCksIHZpZXcoKSwgdG9SZW5kZXJCb3go
KmNvbnRhaW5pbmdCbG9jaykpOworI2VuZGlmCiAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBj
YiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgTGF5b3V0VW5pdCBy
ZXN1bHQgPSBjYi0+Y2xpZW50TG9naWNhbEhlaWdodCgpOwogICAgICAgICBSZW5kZXJGbG93VGhy
ZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwpAQCAtNDQ2MCw3
ICs0NTQwLDExIEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQ
cm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiAgICAgICAgIHJlY3QudW5pdGUo
bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwogCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0gPSBoYXNMYXll
cigpICYmIGxheWVyKCktPnRyYW5zZm9ybSgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAo
aXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgKGhhc1RyYW5zZm9ybSAmJiBkb2N1bWVudCgpLnNldHRp
bmdzKCktPnNob3VsZFRyYW5zZm9ybXNBZmZlY3RPdmVyZmxvdygpKSkgeworI2Vsc2UKICAgICBp
ZiAoaXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgaGFzVHJhbnNmb3JtKSB7CisjZW5kaWYKICAgICAg
ICAgLy8gSWYgd2UgYXJlIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBvciBpZiB3ZSBoYXZlIGEgdHJh
bnNmb3JtLCB0aGVuIHdlIGhhdmUgdG8gY29udmVydAogICAgICAgICAvLyB0aGlzIHJlY3Rhbmds
ZSBpbnRvIHBoeXNpY2FsIGNvb3JkaW5hdGVzLCBhcHBseSByZWxhdGl2ZSBwb3NpdGlvbmluZyBh
bmQgdHJhbnNmb3JtcwogICAgICAgICAvLyB0byBpdCwgYW5kIHRoZW4gY29udmVydCBpdCBiYWNr
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDUwMjA5YWMyMzc0ZDFiNWE3
ZGQ2ZjBmNTMxZGMxYWI4NmExYzZiMGEuLjM0YTQ5NDFlMmE0YjI3OWY4ZGM1NGVmOGFiYzQyOTBh
NWMxZDhkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTE1Nyw2ICsx
NTcsOCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkg
Y29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX2ZyYW1lUmVjdC5waXhlbFNuYXBw
ZWRTaXplKCkpOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvcmRlckJvdW5kaW5nQm94KCkgY29u
c3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gcGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpOyB9
CiAKKyAgICBSb3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFkaWkoKSBjb25zdDsKKwogICAgIC8v
IFRoZSBjb250ZW50IGFyZWEgb2YgdGhlIGJveCAoZXhjbHVkZXMgcGFkZGluZyAtIGFuZCBpbnRy
aW5zaWMgcGFkZGluZyBmb3IgdGFibGUgY2VsbHMsIGV0Yy4uLiAtIGFuZCBib3JkZXIpLgogICAg
IExheW91dFJlY3QgY29udGVudEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpLCBj
b250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKTsgfQogICAgIC8vIFRoZSBjb250ZW50IGJv
eCBpbiBhYnNvbHV0ZSBjb29yZHMuIElnbm9yZXMgdHJhbnNmb3Jtcy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGNlZjc0M2Zh
N2EzYzNlY2UwNWQyOWUzNzAxM2UwNWNhMmZhZTVhMmMuLmVkM2RmZmQwNzA2NDBlYjMzM2U0Mjk3
NGQ3NjA3YTExMzQ1YmU0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNDMyLDcgKzQzMiwxMSBAQCBMYXlvdXRTaXplIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpzdGlja3lQb3NpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgICAg
IEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5nQ2xpcHBp
bmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9j
YXRpb24oc2Nyb2xsT2Zmc2V0KTsKICAgICB9IGVsc2UgeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgTGF5b3V0UmVjdCB2aWV3cG9ydFJlY3QgPSB2aWV3KCkuZnJhbWVWaWV3KCkuY3VzdG9t
Rml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKTsKKyNlbHNlCiAgICAgICAgIExheW91dFJlY3Qgdmll
d3BvcnRSZWN0ID0gdmlldygpLmZyYW1lVmlldygpLnZpZXdwb3J0Q29uc3RyYWluZWRWaXNpYmxl
Q29udGVudFJlY3QoKTsKKyNlbmRpZgogICAgICAgICBmbG9hdCBzY2FsZSA9IHZpZXcoKS5mcmFt
ZVZpZXcoKS5mcmFtZSgpLmZyYW1lU2NhbGVGYWN0b3IoKTsKICAgICAgICAgdmlld3BvcnRSZWN0
LnNjYWxlKDEgLyBzY2FsZSk7CiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3QgPSB2aWV3cG9ydFJl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4IDU3MjJm
MWNjYjc4OWI3YjY3YmE3MmRhNGFhODRiMTcwMTlkZjliMTguLmRmMzFjMjZjNTA1YzFjYTZkMzQ0
ZGJhNDZiZDQ4YjZmYTg4MWYyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCdXR0b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
dXR0b24uY3BwCkBAIC0yOSw2ICsyOSwxMCBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVJT1MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xOTIsNCArMTk2LDE0IEBAIHZvaWQgUmVu
ZGVyQnV0dG9uOjp0aW1lckZpcmVkKFRpbWVyPFJlbmRlckJ1dHRvbj4qKQogICAgIHJlcGFpbnQo
KTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVuZGVyQnV0dG9uOjpsYXlvdXQoKQor
eworICAgIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXQoKTsKKworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IGJlIGFkanVzdGluZyBzdHlsZXMgZHVyaW5nIGxheW91dC4gU2VlIDxyZGFyOi8v
cHJvYmxlbS83Njc1NDkzPi4KKyAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJS
YWRpdXMoc3R5bGUoKSwgdGhpcyk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGM5ZWNi
OWYwNjRmZTg5MDljMmZlYTIzYTc4OWYzZDczYTkzODlmNWIuLjVlNTY5NThiMjljN2JlNDVmMzQy
OGRkYzBlNTg4ODAwZWZhZTljZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKQEAgLTg0Niw2ICs4NDYsMTAgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpzdHls
ZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXcK
ICAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkKQogICAgICAgICAgICAgZG9jdW1lbnQoKS5z
ZXRBbm5vdGF0ZWRSZWdpb25zRGlydHkodHJ1ZSk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1Mp
ICYmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkK
KyAgICAgICAgICAgIGRvY3VtZW50KCkuZGlydHlUb3VjaEV2ZW50UmVjdHMoKTsKKyNlbmRpZgog
ICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpIHsKICAgICAgICAgICAgIGlmIChBWE9iamVj
dENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAg
ICAgICAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hhbmdlZChwYXJlbnQoKSk7CkBAIC05MjMsNiAr
OTI3LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXcKICAgICB9CiB9CiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCiB7CiAgICAgQVNTRVJUKGEt
PmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOwpAQCAtOTMzLDYgKzkzOCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBhcmVDdXJzb3JzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKQogewogICAgIHJldHVybiBhLT5jdXJzb3IoKSA9PSBiLT5jdXJzb3IoKSAm
JiAoYS0+Y3Vyc29ycygpID09IGItPmN1cnNvcnMoKSB8fCBhcmVOb25JZGVudGljYWxDdXJzb3JM
aXN0c0VxdWFsKGEsIGIpKTsKIH0KKyNlbmRpZgogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpCiB7CkBAIC05NzIsOCArOTc4LDEwIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTCiAgICAg
Ly8gRG9uJ3QgY2hlY2sgZm9yIHJlcGFpbnQgaGVyZTsgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRo
ZSBsYXllciBoYXMgYmVlbgogICAgIC8vIHVwZGF0ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgd2Ug
a25vdyBpZiB3ZSBoYXZlIHRvIHJlcGFpbnQgKGluIHNldFN0eWxlKCkpLgogCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAob2xkU3R5bGUgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRTdHlsZSwg
JnN0eWxlKCkpKQogICAgICAgICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLnNjaGVkdWxlQ3Vyc29y
VXBkYXRlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJFbGVtZW50OjppbnNlcnRlZEludG9U
cmVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwCmluZGV4IGIyNzQ2ODM4NjBlYjNhNTg0YTlkMzJiNmIzZTcwMWJhNTk0YTA4ZDEuLjJh
OWRiZTU4OGQ5MWJmM2M2MjIxYjc1YzA5YmNhOTllYWMzZTA1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMTM0LDEwICsx
MzQsMTYgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cmVxdWlyZXNMYXllcigpIGNvbnN0
CiAKIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKSBjb25zdAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBUaGUgdGltaW5nIG9mIGxh
eWVyIGNyZWF0aW9uIGlzIGRpZmZlcmVudCBvbiB0aGUgcGhvbmUsIHNpbmNlIHRoZSBwbHVnaW4g
Y2FuIG9ubHkgYmUgbWFuaXB1bGF0ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgcmV0dXJu
IHdpZGdldCgpICYmIHdpZGdldCgpLT5pc1BsdWdpblZpZXdCYXNlKCkgJiYgdG9QbHVnaW5WaWV3
QmFzZSh3aWRnZXQoKSktPndpbGxQcm92aWRlUGx1Z2luTGF5ZXIoKTsKKyNlbHNlCiAgICAgcmV0
dXJuIHdpZGdldCgpICYmIHdpZGdldCgpLT5pc1BsdWdpblZpZXdCYXNlKCkgJiYgdG9QbHVnaW5W
aWV3QmFzZSh3aWRnZXQoKSktPnBsYXRmb3JtTGF5ZXIoKTsKKyNlbmRpZgogfQogI2VuZGlmCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIFN0cmluZyB1bmF2YWlsYWJsZVBsdWdpblJlcGxh
Y2VtZW50VGV4dChSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFz
b24gcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pCiB7CiAgICAgc3dpdGNoIChwbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbikgewpAQCAtMTU0LDYgKzE2MCw3IEBAIHN0YXRpYyBTdHJpbmcgdW5h
dmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQoUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdp
blVuYXZhCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQorI2VuZGlmCiAKIHN0YXRpYyBib29sIHNob3VsZFVuYXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJl
QnV0dG9uKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKQogewpAQCAtMTYz
LDExICsxNzAsMTkgQEAgc3RhdGljIGJvb2wgc2hvdWxkVW5hdmFpbGFibGVQbHVnaW5NZXNzYWdl
QmVCdXR0b24oRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJFbWIKIAogdm9pZCBSZW5kZXJFbWJl
ZGRlZE9iamVjdDo6c2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24oUGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24gcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pCiB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIFVOVVNFRF9QQVJBTShwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbik7CisjZWxz
ZQogICAgIHNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uV2l0aERlc2NyaXB0aW9uKHBsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uLCB1bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dChw
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uV2l0aERlc2NyaXB0aW9u
KFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBj
b25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVT
RURfUEFSQU0ocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pOworICAgIFVOVVNFRF9QQVJBTShk
ZXNjcmlwdGlvbik7CisjZWxzZQogICAgIEFTU0VSVCghbV9pc1BsdWdpblVuYXZhaWxhYmxlKTsK
ICAgICBtX2lzUGx1Z2luVW5hdmFpbGFibGUgPSB0cnVlOwogICAgIG1fcGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24gPSBwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbjsKQEAgLTE3Niw2ICsxOTEs
NyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbldpdGhEZXNjcmlwdGlvbihQbHVnaW5VbgogICAgICAgICBtX3VuYXZhaWxhYmxlUGx1Z2lu
UmVwbGFjZW1lbnRUZXh0ID0gdW5hdmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQocGx1Z2lu
VW5hdmFpbGFiaWxpdHlSZWFzb24pOwogICAgIGVsc2UKICAgICAgICAgbV91bmF2YWlsYWJsZVBs
dWdpblJlcGxhY2VtZW50VGV4dCA9IGRlc2NyaXB0aW9uOworI2VuZGlmCiB9CiAKIHZvaWQgUmVu
ZGVyRW1iZWRkZWRPYmplY3Q6OnNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2Vk
KGJvb2wgcHJlc3NlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IDE5ZTllYTNlZDViZGY3YzU3OTAyMmJhZWU5YmNj
NTcyYmIxZjA4YzEuLjIwN2RmMjU3ZjJkZWNhNTllZDkyZjgwNzJmYzEwZWU1MzE3MDY0MDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcApAQCAtMzcsMTUgKzM3LDI1IEBACiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgi
CiAjaW5jbHVkZSA8bWF0aC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlN0cmlu
Z1RydW5jYXRvci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogY29uc3QgaW50IGFmdGVyQnV0dG9uU3BhY2luZyA9IDQ7Cisj
aWYgIVBMQVRGT1JNKElPUykKIGNvbnN0IGludCBpY29uSGVpZ2h0ID0gMTY7CiBjb25zdCBpbnQg
aWNvbldpZHRoID0gMTY7CiBjb25zdCBpbnQgaWNvbkZpbGVuYW1lU3BhY2luZyA9IDI7CiBjb25z
dCBpbnQgZGVmYXVsdFdpZHRoTnVtQ2hhcnMgPSAzNDsKKyNlbHNlCisvLyBPbiBpT1MgdGhlIGlj
b24gaGVpZ2h0IG1hdGNoZXMgdGhlIGJ1dHRvbiBoZWlnaHQsIHRvIG1heGltaXplIHRoZSBpY29u
IHNpemUuCitjb25zdCBpbnQgaWNvbkZpbGVuYW1lU3BhY2luZyA9IGFmdGVyQnV0dG9uU3BhY2lu
ZzsKK2NvbnN0IGludCBkZWZhdWx0V2lkdGhOdW1DaGFycyA9IDM4OworI2VuZGlmCiBjb25zdCBp
bnQgYnV0dG9uU2hhZG93SGVpZ2h0ID0gMjsKIAogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OlJl
bmRlckZpbGVVcGxvYWRDb250cm9sKEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0LCBQYXNzUmVmPFJl
bmRlclN0eWxlPiBzdHlsZSkKQEAgLTkzLDggKzEwMywxOCBAQCBzdGF0aWMgaW50IG5vZGVXaWR0
aChOb2RlKiBub2RlKQogICAgIHJldHVybiAobm9kZSAmJiBub2RlLT5yZW5kZXJCb3goKSkgPyBu
b2RlLT5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkV2lkdGgoKSA6IDA7CiB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCitzdGF0aWMgaW50IG5vZGVIZWlnaHQoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1
cm4gKG5vZGUgJiYgbm9kZS0+cmVuZGVyQm94KCkpID8gbm9kZS0+cmVuZGVyQm94KCktPnBpeGVs
U25hcHBlZEhlaWdodCgpIDogMDsKK30KKyNlbmRpZgorCiBpbnQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6Om1heEZpbGVuYW1lV2lkdGgoKSBjb25zdAogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBpbnQgaWNvbldpZHRoID0gbm9kZUhlaWdodCh1cGxvYWRCdXR0b24oKSk7CisjZW5kaWYKICAg
ICByZXR1cm4gc3RkOjptYXgoMCwgY29udGVudEJveFJlY3QoKS5waXhlbFNuYXBwZWRXaWR0aCgp
IC0gbm9kZVdpZHRoKHVwbG9hZEJ1dHRvbigpKSAtIGFmdGVyQnV0dG9uU3BhY2luZwogICAgICAg
ICAtIChpbnB1dEVsZW1lbnQoKS5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmlsZW5hbWVTcGFj
aW5nIDogMCkpOwogfQpAQCAtMTIxLDYgKzE0MSwxMCBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bgogICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQs
IGRpc3BsYXllZEZpbGVuYW1lLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uLCBSZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKTsKICAgICAg
ICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBpbnQgaWNvbkhlaWdodCA9IG5vZGVIZWlnaHQodXBsb2FkQnV0dG9uKCkpOworICAg
ICAgICBpbnQgaWNvbldpZHRoID0gaWNvbkhlaWdodDsKKyNlbmRpZgogICAgICAgICAvLyBEZXRl
cm1pbmUgd2hlcmUgdGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgTGF5b3V0
VW5pdCBjb250ZW50TGVmdCA9IHBhaW50T2Zmc2V0LngoKSArIGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCk7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9hZEJ1dHRv
bigpOwpAQCAtMTU4LDggKzE4MiwxNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpw
YWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbgogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGljb25YID0gY29udGVudExlZnQgKyBjb250ZW50
V2lkdGgoKSAtIGJ1dHRvbldpZHRoIC0gYWZ0ZXJCdXR0b25TcGFjaW5nIC0gaWNvbldpZHRoOwog
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKFJlbmRlckJ1dHRvbiogYnV0dG9u
UmVuZGVyZXIgPSB0b1JlbmRlckJ1dHRvbihidXR0b24tPnJlbmRlcmVyKCkpKSB7CisgICAgICAg
ICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZSBpY29uIGFuZCBkZWNvcmF0aW9ucy4KKyAgICAgICAg
ICAgICAgICBJbnRSZWN0IGljb25SZWN0KGljb25YLCBpY29uWSwgaWNvbldpZHRoLCBpY29uSGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICBSZW5kZXJUaGVtZTo6RmlsZVVwbG9hZERlY29yYXRpb25z
IGRlY29yYXRpb25zVHlwZSA9IGlucHV0RWxlbWVudCgpLmZpbGVzKCktPmxlbmd0aCgpID09IDEg
PyBSZW5kZXJUaGVtZTo6U2luZ2xlRmlsZSA6IFJlbmRlclRoZW1lOjpNdWx0aXBsZUZpbGVzOwor
ICAgICAgICAgICAgICAgIHRoZW1lKCktPnBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0aW9ucyh0
aGlzLCBidXR0b25SZW5kZXJlciwgcGFpbnRJbmZvLCBpY29uUmVjdCwgaW5wdXRFbGVtZW50KCku
aWNvbigpLCBkZWNvcmF0aW9uc1R5cGUpOworICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAg
ICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbgogICAgICAgICAgICAgaW5wdXRFbGVtZW50KCkuaWNv
bigpLT5wYWludChwYWludEluZm8uY29udGV4dCwgSW50UmVjdChyb3VuZFRvSW50KGljb25YKSwg
cm91bmRUb0ludChpY29uWSksIGljb25XaWR0aCwgaWNvbkhlaWdodCkpOworI2VuZGlmCiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTI0MSw2ICsyNzQsMTAgQEAgU3RyaW5nIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpidXR0b25WYWx1ZSgpCiBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmZpbGVUZXh0VmFsdWUoKSBjb25zdAogewogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQoKS5maWxl
cygpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGlucHV0RWxlbWVudCgpLmZpbGVzKCkt
Pmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRl
KGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBzdHls
ZSgpLmZvbnQoKSwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKKyNlbmRp
ZgogICAgIHJldHVybiB0aGVtZSgpLT5maWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQo
KS5maWxlcygpLCBzdHlsZSgpLmZvbnQoKSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBpbnB1dEVsZW1l
bnQoKS5tdWx0aXBsZSgpKTsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuY3BwCmluZGV4IDFjZjA3MTk1Nzc0MzkwNjgzZWI2NTgzNGM2MWZhZjllNzE0
NTMxM2UuLjQxNjM5MmY1OTE3MjU1YzQ3YjQ5MzczODBjYjAxMTQ1ZjQyMjAxODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcApAQCAtNTE0LDcgKzUxNCwx
MiBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpwb3NpdGlvbkZyYW1lcygpCiAgICAgICAgICAgICBp
ZiAod2lkdGggIT0gY2hpbGQtPndpZHRoKCkgfHwgaGVpZ2h0ICE9IGNoaWxkLT5oZWlnaHQoKSkg
ewogICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgICAgICAg
ICAgY2hpbGQtPnNldEhlaWdodChoZWlnaHQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBpT1Mtc3BlY2lmaWM/CisgICAgICAgICAgICAgICAg
Y2hpbGQtPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisjZWxzZQogICAgICAgICAgICAg
ICAgIGNoaWxkLT5zZXROZWVkc0xheW91dCgpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgY2hp
bGQtPmxheW91dCgpOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySUZyYW1lLmgKaW5kZXggZWE4NTk2NGIzMGIxNGQ2YzA2ZDFiMTA5MWNkMzcxMjE3NDNlNjA2
NC4uYWUxNDM2ODA5MDBmMTk1NDcwYzlmZDg2MTdmNzBiNWM0MTE5ZmUwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJRnJhbWUuaApAQCAtNTQsNyArNTQsMTIgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklGcmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIHRydWU7IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogRG8gd2Ugc3Rp
bGwgbmVlZCB0aGlzIHdvcmthcm91bmQgdG8gYXZvaWQgYnJlYWtpbmcgbGF5b3V0IHRlc3RzPwor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuICJSZW5kZXJQYXJ0T2JqZWN0IjsgfQorI2Vsc2UKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVySUZyYW1lIjsgfQor
I2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURF
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCBiMmVlMzE3
YTU4OTg5YmQ1OTA2NWZjNTY2ODhiYmIyZTIwNmM5NWYzLi43OWI1Njg3YzIyZWRlOGQwZjA4ZDQ3
Y2E3NDBhMDA3YmVhMDk0MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAKQEAgLTQ3LDggKzQ3LDcxIEBACiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKICNpbmNsdWRl
IDx3dGYvU3RhY2tTdGF0cy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkxvZ2lj
YWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorLy8gRklY
TUU6IFRoaXMgZG9lc24ndCBiZWhhdmUgY29ycmVjdGx5IGZvciBmbG9hdGluZyBvciBwb3NpdGlv
bmVkIGltYWdlcywgYnV0IFdlYkNvcmUgZG9lc24ndCBoYW5kbGUgdGhvc2Ugd2VsbAorLy8gZHVy
aW5nIHNlbGVjdGlvbiBjcmVhdGlvbiB5ZXQgYW55d2F5LgorLy8gRklYTUU6IFdlIGNhbid0IHRl
bGwgd2hldGhlciBvciBub3Qgd2UgY29udGFpbiB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBzZWxl
Y3RlZCBSYW5nZSB1c2luZyBvbmx5IHRoZSBvZmZzZXRzCisvLyBvZiB0aGUgc3RhcnQgYW5kIGVu
ZCwgd2UgbmVlZCB0byBrbm93IHRoZSB3aG9sZSBQb3NpdGlvbi4KK3ZvaWQgUmVuZGVySW1hZ2U6
OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCB1bnNp
Z25lZCwgdW5zaWduZWQpCit7CisgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHRo
aXMtPmNvbnRhaW5pbmdCbG9jaygpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3Q7CisgICAgLy8g
RklYTUU6IEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBwYWNrYWdlIGxpbmUgYm91bmRzIGludG8g
U2VsZWN0aW9uUmVjdHMuIFdlIHNob3VsZCBmaW5kCisgICAgLy8gdGhlIHJpZ2h0IGFuZCBsZWZ0
IGV4dGVudCBvZiB0aGUgc2VsZWN0aW9uIG9uY2UgZm9yIHRoZSBlbnRpcmUgc2VsZWN0ZWQgUmFu
Z2UsIHBlcmhhcHMKKyAgICAvLyB1c2luZyB0aGUgUmFuZ2UncyBjb21tb24gYW5jZXN0b3IuCisg
ICAgSW50UmVjdCBsaW5lRXh0ZW50UmVjdDsKKyAgICBib29sIGlzRmlyc3RPbkxpbmUgPSBmYWxz
ZTsKKyAgICBib29sIGlzTGFzdE9uTGluZSA9IGZhbHNlOworCisgICAgSW5saW5lQm94KiBpbmxp
bmVCb3ggPSBpbmxpbmVCb3hXcmFwcGVyKCk7CisgICAgaWYgKCFpbmxpbmVCb3gpIHsKKyAgICAg
ICAgLy8gVGhpcyBpcyBhIGJsb2NrIGltYWdlLgorICAgICAgICBpbWFnZVJlY3QgPSBJbnRSZWN0
KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAgICAgaXNGaXJzdE9uTGluZSA9IHRydWU7
CisgICAgICAgIGlzTGFzdE9uTGluZSA9IHRydWU7CisgICAgICAgIGxpbmVFeHRlbnRSZWN0ID0g
aW1hZ2VSZWN0OworICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBsaW5lRXh0ZW50UmVjdC5zZXRYKGNvbnRhaW5pbmdC
bG9jay0+eCgpKTsKKyAgICAgICAgICAgIGxpbmVFeHRlbnRSZWN0LnNldFdpZHRoKGNvbnRhaW5p
bmdCbG9jay0+d2lkdGgoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lRXh0
ZW50UmVjdC5zZXRZKGNvbnRhaW5pbmdCbG9jay0+eSgpKTsKKyAgICAgICAgICAgIGxpbmVFeHRl
bnRSZWN0LnNldEhlaWdodChjb250YWluaW5nQmxvY2stPmhlaWdodCgpKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gIWNvbnRhaW5p
bmdCbG9jay0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gaW5saW5lQm94
LT5yb290KCkuc2VsZWN0aW9uVG9wKCkgLSBsb2dpY2FsVG9wKCkgOiBsb2dpY2FsQm90dG9tKCkg
LSBpbmxpbmVCb3gtPnJvb3QoKS5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICAgICAgaW1hZ2VSZWN0
ID0gSW50UmVjdCgwLCAgc2VsZWN0aW9uVG9wLCBsb2dpY2FsV2lkdGgoKSwgaW5saW5lQm94LT5y
b290KCkuc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgICAgICBpc0ZpcnN0T25MaW5lID0gIWlubGlu
ZUJveC0+cHJldmlvdXNPbkxpbmVFeGlzdHMoKTsKKyAgICAgICAgaXNMYXN0T25MaW5lID0gIWlu
bGluZUJveC0+bmV4dE9uTGluZUV4aXN0cygpOworICAgICAgICBMb2dpY2FsU2VsZWN0aW9uT2Zm
c2V0Q2FjaGVzIGNhY2hlKCpjb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGxl
ZnRPZmZzZXQgPSBjb250YWluaW5nQmxvY2stPmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KCpj
b250YWluaW5nQmxvY2ssIGlubGluZUJveC0+bG9naWNhbFRvcCgpLCBjYWNoZSk7CisgICAgICAg
IExheW91dFVuaXQgcmlnaHRPZmZzZXQgPSBjb250YWluaW5nQmxvY2stPmxvZ2ljYWxSaWdodFNl
bGVjdGlvbk9mZnNldCgqY29udGFpbmluZ0Jsb2NrLCBpbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKSwg
Y2FjaGUpOworICAgICAgICBsaW5lRXh0ZW50UmVjdCA9IEludFJlY3QobGVmdE9mZnNldCAtIGxv
Z2ljYWxMZWZ0KCksIGltYWdlUmVjdC55KCksIHJpZ2h0T2Zmc2V0IC0gbGVmdE9mZnNldCwgaW1h
Z2VSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKCFpbmxpbmVCb3gtPmlzSG9yaXpvbnRhbCgp
KSB7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBpbWFnZVJlY3QudHJhbnNwb3NlZFJlY3QoKTsK
KyAgICAgICAgICAgIGxpbmVFeHRlbnRSZWN0ID0gbGluZUV4dGVudFJlY3QudHJhbnNwb3NlZFJl
Y3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNGaXhlZCA9IGZhbHNlOworICAg
IEludFJlY3QgYWJzb2x1dGVCb3VuZHMgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChp
bWFnZVJlY3QpLCBmYWxzZSwgJmlzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAg
SW50UmVjdCBsaW5lRXh0ZW50Qm91bmRzID0gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
bGluZUV4dGVudFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIGlmICghY29udGFp
bmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBsaW5lRXh0ZW50
Qm91bmRzID0gbGluZUV4dGVudEJvdW5kcy50cmFuc3Bvc2VkUmVjdCgpOworCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBjb25zaWRlciBlaXRoZXIgbWFraW5nIFNlbGVjdGlvblJlY3QgYSBzdHJ1
Y3Qgb3IgYmV0dGVyIG9yZ2FuaXplIGl0cyBvcHRpb25hbCBmaWVsZHMgaW50bworICAgIC8vIGFu
IGF1eGlsaWFyeSBzdHJ1Y3QgdG8gc2ltcGxpZnkgaXRzIGluaXRpYWxpemF0aW9uLgorICAgIHJl
Y3RzLmFwcGVuZChTZWxlY3Rpb25SZWN0KGFic29sdXRlQm91bmRzLCBjb250YWluaW5nQmxvY2st
PnN0eWxlKCkuZGlyZWN0aW9uKCksIGxpbmVFeHRlbnRCb3VuZHMueCgpLCBsaW5lRXh0ZW50Qm91
bmRzLm1heFgoKSwgbGluZUV4dGVudEJvdW5kcy5tYXhZKCksIDAsIGZhbHNlIC8qIGxpbmUgYnJl
YWsgKi8sIGlzRmlyc3RPbkxpbmUsIGlzTGFzdE9uTGluZSwgZmFsc2UgLyogY29udGFpbnMgc3Rh
cnQgKi8sIGZhbHNlIC8qIGNvbnRhaW5zIGVuZCAqLywgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIGlzRml4ZWQsIGZhbHNlIC8qIHJ1YnkgdGV4dCAq
LywgY29sdW1uTnVtYmVyRm9yT2Zmc2V0KGFic29sdXRlQm91bmRzLngoKSkpKTsKK30KKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBSZW5kZXJJbWFnZTo6UmVuZGVySW1h
Z2UoRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCkBAIC00NjIs
NiArNTI1LDkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAKIHZvaWQgUmVuZGVySW1hZ2U6
OnBhaW50QXJlYUVsZW1lbnRGb2N1c1JpbmcoUGFpbnRJbmZvJiBwYWludEluZm8pCiB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOworI2Vsc2UKICAgICBp
ZiAoZG9jdW1lbnQoKS5wcmludGluZygpIHx8ICFmcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNl
ZEFuZEFjdGl2ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC00OTMsNiArNTU5LDcgQEAg
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRBcmVhRWxlbWVudEZvY3VzUmluZyhQYWludEluZm8mIHBh
aW50SW5mbykKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ZvY3VzUmluZyhwYXRoLCBvdXRs
aW5lV2lkdGgsCiAgICAgICAgIGFyZWFFbGVtZW50U3R5bGUtPm91dGxpbmVPZmZzZXQoKSwKICAg
ICAgICAgYXJlYUVsZW1lbnRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
T3V0bGluZUNvbG9yKSk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJJbWFnZTo6YXJlYUVsZW1l
bnRGb2N1c0NoYW5nZWQoSFRNTEFyZWFFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAppbmRleCBjMjNhMjY5MWUzMGY4OGNkZGQ4ZjRjNGNhZWY1Y2Mz
MmQyYzdiNTg0Li44NGRmYzkwYWYyMmY0YzRhZWY1ODRmZGVhNDNmY2E3NzY2NjVmODA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaApAQCAtNTYsNiArNTYsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgYXJlYUVsZW1lbnRGb2N1c0NoYW5nZWQoSFRNTEFyZWFFbGVtZW50Kik7
CiAKICAgICB2b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVySW1h
Z2U+Kik7CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiwgdW5zaWduZWQsIHVuc2lnbmVk
KSBPVkVSUklERTsKKyNlbmRpZgogCiAgICAgdm9pZCBzZXRJc0dlbmVyYXRlZENvbnRlbnQoYm9v
bCBnZW5lcmF0ZWQgPSB0cnVlKSB7IG1faXNHZW5lcmF0ZWRDb250ZW50ID0gZ2VuZXJhdGVkOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggMjljNWI3
MzliNDQyNzY2ZWIzYzY4MDNhYzA3N2QwNmE2NDM0ZDRiZC4uNjY5NTFlN2U3MWI0ZGIwMWQyNGQ1
YWQ0N2I0MWY2MmFhNDgxZDZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAKQEAgLTY5Nyw2ICs2OTcsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKICAg
ICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVF1YWRzKHF1YWRzLCB3YXNGaXhlZCk7CiB9CiAK
KyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVRdWFkc0ZvclNl
bGVjdGlvbihWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIGNvbnN0Cit7CisgICAgQWJzb2x1dGVR
dWFkc0dlbmVyYXRvckNvbnRleHQgY29udGV4dCh0aGlzLCBxdWFkcyk7CisgICAgZ2VuZXJhdGVM
aW5lQm94UmVjdHMoY29udGV4dCk7Cit9CisjZW5kaWYKKwogTGF5b3V0VW5pdCBSZW5kZXJJbmxp
bmU6Om9mZnNldExlZnQoKSBjb25zdAogewogICAgIExheW91dFBvaW50IHRvcExlZnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggN2Q4NzgxNmNmNDI0MzUzMGQz
M2M5MzVjNzZiMjYxZDY5OTMyNDQ1MS4uNjNkMWNlZGQ4YTBlM2MxYTg2ZWRlYzMxYTYzNjA5YTkw
YjZlYTMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAtNjgs
NiArNjgsMTAgQEAgcHVibGljOgogICAgIElubGluZUJveCogZmlyc3RMaW5lQm94SW5jbHVkaW5n
Q3VsbGluZygpIGNvbnN0IHsgcmV0dXJuIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpID8gZmlyc3RM
aW5lQm94KCkgOiBjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKTsgfQogICAgIElubGluZUJveCog
bGFzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nKCkgY29uc3QgeyByZXR1cm4gYWx3YXlzQ3JlYXRl
TGluZUJveGVzKCkgPyBsYXN0TGluZUJveCgpIDogY3VsbGVkSW5saW5lTGFzdExpbmVCb3goKTsg
fQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzRm9y
U2VsZWN0aW9uKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QgT1ZFUlJJREU7CisjZW5k
aWYKKwogICAgIHZpcnR1YWwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHZpcnR1YWxDb250aW51YXRp
b24oKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiBjb250aW51YXRpb24oKTsgfQogICAg
IFJlbmRlcklubGluZSogaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAxNmE5NmJiZTJlZDdmYzM3
NjBjMDZhOTY2MDQwNDE0NDEwYTZhNWQzLi4zNmYwZWNjYmJhN2EyNTkzMzdhNTQwYTczN2FiZGMy
NjY2YjNiOTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTE4Miw2ICsxODIsMTIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5kaXJlY3RDb21w
b3NpdGluZ1JlYXNvbihOb0luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24pCiAgICAgLCBtX3ZpZXdw
b3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikK
ICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoZmFsc2UpCisgICAgLCBtX2luVXNlclNjcm9sbChmYWxzZSkKKyAgICAsIG1f
cmVxdWlyZXNTY3JvbGxCb3VuZHNPcmlnaW5VcGRhdGUoZmFsc2UpCisjZW5kaWYKICAgICAsIG1f
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQogICAgICwgbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0yMzcsNiArMjQz
LDkgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CiAKICAgICBpZiAoIXJlbmRl
cmVyKCkuZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRp
ZgogICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQog
ICAgICAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbE9mZnNldChtX3Njcm9sbE9m
ZnNldCk7CiAgICAgfQpAQCAtMTc2Nyw2ICsxNzc2LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVu
ZGVyCiAgICAgfQogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZW5kZXJMYXllcjo6d2ls
bEJlRGVzdHJveWVkKCkKK3sKKyAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBsYXllckJhY2tp
bmcgPSBiYWNraW5nKCkpCisgICAgICAgIGxheWVyQmFja2luZy0+bGF5ZXJXaWxsQmVEZXN0cm95
ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxheWVyOjphZGRDaGlsZChSZW5kZXJMYXll
ciogY2hpbGQsIFJlbmRlckxheWVyKiBiZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJMYXllciog
cHJldlNpYmxpbmcgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSA6IGxhc3RDaGlsZCgpOwpAQCAtMjA4NCw2ICsyMTAxLDU1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBM
YXlvdXRSCiAgICAgcmVjdC5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorYm9vbCBSZW5kZXJMYXllcjo6aGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9s
bGluZygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElO
RykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLnNldHRp
bmdzKCk7CisKKyAgICAvLyBGSVhNRTogc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBudWxsIGF0IHRo
aXMgcG9pbnQuIElmIHlvdSBmaW5kIGEgcmVsaWFibGUgd2F5IHRvIGhpdCB0aGlzIGFzc2VydGlv
biwgcGxlYXNlIGZpbGUgYSBidWcuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS8xMDI2NjEw
MT4uCisgICAgQVNTRVJUKHNldHRpbmdzKTsKKworICAgIHJldHVybiByZW5kZXJlcigpLnN0eWxl
KCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+
YWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCitib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3Jt
VG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVk
IHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktp
dC4KKyAgICBpZiAoaGFzQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQo
dG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllcjo6cmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgaWYgKCFyZW5kZXJlcigpLmVs
ZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRUb3Vj
aEV2ZW50TGlzdGVuZXIocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJM
YXllcjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAg
ICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIoKS5k
b2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRMaXN0ZW5lcihyZW5kZXJlcigpLmVsZW1lbnQoKSk7
CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxz
ZTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QKQEAgLTIxMDcsOSArMjE3MywxMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVOZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKQogICAgICAgICAgICAgJiYgY2FuQmVTdGFja2luZ0NvbnRh
aW5lcigpCiAgICAgICAgICAgICAmJiAhaGFzT3V0T2ZGbG93UG9zaXRpb25lZERlc2NlbmRhbnQo
KTsKIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCisjaWYgIVBM
QVRGT1JNKElPUykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKICAg
ICAgICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBmb3JjZVVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKTsK
ICNlbHNlCisgICAgICAgIC8vIE9uIGlPUyB3ZSBkb24ndCB3YW50IHRvIG9wdCBpbnRvIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLCB3aGljaCBjcmVhdGVzIHNjcm9sbCBiYXIKKyAg
ICAgICAgLy8gbGF5ZXJzIGluIFdlYkNvcmUsIGJlY2F1c2Ugd2UgdXNlIFVJS2l0IHRvIGNvbXBv
c2l0ZSBvdXIgc2Nyb2xsIGJhcnMuCiAgICAgICAgIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5n
ID0gZm9yY2VVc2VDb21wb3NpdGVkU2Nyb2xsaW5nOwogI2VuZGlmCiAgICAgICAgIC8vIFdlIGdh
dGhlciBhIGJvb2xlYW4gdmFsdWUgZm9yIHVzZSB3aXRoIEdvb2dsZSBVTUEgaGlzdG9ncmFtcyB0
bwpAQCAtMjI0MSw2ICsyMzA5LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4
LCBpbnQgeSkKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBj
b21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4K
ICAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQogICAgICAgICAgICAgY29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChhZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgaW50IG1heFggPSBz
Y3JvbGxXaWR0aCgpIC0gYm94LT5jbGllbnRXaWR0aCgpOworICAgICAgICAgICAgaWYgKHggPiBt
YXhYIC0gY2FyZXRXaWR0aCkgeworICAgICAgICAgICAgICAgIHggKz0gY2FyZXRXaWR0aDsKKyAg
ICAgICAgICAgICAgICBpZiAoeCA8PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICB4
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA8IG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCkg
LSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgIHggLT0gY2FyZXRXaWR0aDsKKyAgICAgICAg
fQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5LCB3ZSB3aWxs
IHdhbnQgdG8gcGVyZm9ybSBhIGJsaXQuICBGb3Igbm93IG5ldmVyCkBAIC0yMjQ5LDggKzIzMjgs
MTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQogICAgIC8vIGlz
IGVpdGhlciBvY2NsdWRlZCBieSBhbm90aGVyIGxheWVyIG9yIGNsaXBwZWQgYnkgYW4gZW5jbG9z
aW5nCiAgICAgLy8gbGF5ZXIgb3IgY29udGFpbnMgZml4ZWQgYmFja2dyb3VuZHMsIGV0Yy4pLgog
ICAgIEludFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZSh4IC0gc2Nyb2xsT3JpZ2luKCku
eCgpLCB5IC0gc2Nyb2xsT3JpZ2luKCkueSgpKTsKLSAgICBpZiAobV9zY3JvbGxPZmZzZXQgPT0g
bmV3U2Nyb2xsT2Zmc2V0KQorICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBuZXdTY3JvbGxPZmZz
ZXQpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChtX3JlcXVpcmVzU2Nyb2xsQm91
bmRzT3JpZ2luVXBkYXRlKQorICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKK30KICAgICBtX3Njcm9sbE9mZnNl
dCA9IG5ld1Njcm9sbE9mZnNldDsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFNjcm9sbExheWVyKCZyZW5kZXJlcigpLmZyYW1lKCkpOwpAQCAtMjI3Niw2ICsyMzYwLDEwIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKICAgICAgICAgICAgIC8v
IHdoZW4gdGhhdCBjb21wbGV0ZXMuCiAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7CiAgICAgICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRpcnR5VG91Y2hF
dmVudFJlY3RzKCk7CisjZW5kaWYKICAgICB9CiAKICAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJl
cigpLmZyYW1lKCk7CkBAIC0yMjk2LDcgKzIzODQsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG8oaW50IHgsIGludCB5KQogI2VuZGlmCiAKICAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVs
bCByZXBhaW50IG9mIG91ciBvYmplY3QuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghaGFz
QWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKQorI2Vsc2UKICAgICBpZiAocmVxdWlyZXNSZXBh
aW50KQorI2VuZGlmCiAgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJl
cGFpbnRDb250YWluZXIsIHBpeGVsU25hcHBlZEludFJlY3QobV9yZXBhaW50UmVjdCkpOwogCiAg
ICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0yMzg2LDEwICsyNDc4LDE1
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCwgY29uc3QgU2Nyb2xsQWxpZ25tCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudExh
eWVyID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxl
Q29udGVudFJlY3QoKTsKICAgICAgICAgICAgIExheW91dFJlY3QgdmlzaWJsZVJlY3RSZWxhdGl2
ZVRvRG9jdW1lbnQgPSB2aWV3UmVjdDsKICAgICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0
UmVsYXRpdmVUb0RvY3VtZW50ID0gZnJhbWVWaWV3LnNjcm9sbE9mZnNldFJlbGF0aXZlVG9Eb2N1
bWVudCgpOwogICAgICAgICAgICAgdmlzaWJsZVJlY3RSZWxhdGl2ZVRvRG9jdW1lbnQuc2V0TG9j
YXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0UmVsYXRpdmVUb0RvY3VtZW50LndpZHRoKCksIHNj
cm9sbE9mZnNldFJlbGF0aXZlVG9Eb2N1bWVudC5oZWlnaHQoKSkpOworI2Vsc2UKKyAgICAgICAg
ICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcuYWN0dWFsVmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpc2libGVSZWN0UmVsYXRpdmVUb0RvY3Vt
ZW50ID0gdmlld1JlY3Q7CisjZW5kaWYKIAogICAgICAgICAgICAgTGF5b3V0UmVjdCByID0gZ2V0
UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB2aXNpYmxlUmVjdFJlbGF0aXZlVG9Eb2N1bWVudCwgcmVj
dCwgYWxpZ25YLCBhbGlnblkpOwogICAgICAgICAgICAgICAgIApAQCAtMjYyNCw2ICsyNzIxLDEz
IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdChWaXNpYmxlQ29udGVu
dFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NyCiAgICAgaWYgKHNjcm9sbGJhckluY2x1c2lvbiA9
PSBJbmNsdWRlU2Nyb2xsYmFycykgewogICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0g
KHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIXZlcnRpY2FsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNj
cm9sbGJhcigpKSA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwOwogICAgICAgICBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9y
aXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBob3Jpem9udGFsU2Ny
b2xsYmFyKCktPmhlaWdodCgpIDogMDsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYg
KGhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9IDA7CisgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gMDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVybiBJbnRSZWN0
KEludFBvaW50KHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKSwKQEAgLTI3NjEsNiAr
Mjg2NSwyNyBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3Vs
ZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lk
IFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBy
ZW5kZXJlcigpLmZyYW1lKCkucGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQo
KS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVu
ZFNjcm9sbCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigpLmZyYW1lKCkucGFn
ZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9s
bCgpOworfQorICAgIAordm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKK3sKKyAg
ICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlz
IGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIGlmIChQYWdlKiBwYWdlID0gcmVu
ZGVyZXIoKS5mcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCku
ZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgorCiBJbnRQb2ludCBS
ZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9u
KCk7CkBAIC0yODMyLDYgKzI5NTcsMTIgQEAgSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFy
T2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiB2b2lkIFJlbmRlckxh
eWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gTm8gbmVlZCB0byBp
bnZhbGlkYXRlIHNjcm9sbGJhcnMgaWYgd2UncmUgdXNpbmcgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5n
LgorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChz
Y3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CiAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewpAQCAtMjg2Myw2ICsyOTk0LDEy
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRh
dGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIC8vIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgc2Nyb2xsIGNvcm5lciBpZiB3
ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBzY3JvbGxpbmcuCisgICAgaWYgKGhhc0FjY2VsZXJhdGVk
VG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewogICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOwpAQCAtMjk4NCw2ICszMTIxLDEyIEBAIGludCBSZW5kZXJMYXllcjo6dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kp
CiB7CiAgICAgaWYgKCFtX3ZCYXIgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYg
KHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCiAgICAgICAgIHJldHVybiAwOworCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpIAor
ICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsK
IH0KIApAQCAtMjk5MSw2ICszMTM0LDEyIEBAIGludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuCiB7CiAg
ICAgaWYgKCFtX2hCYXIgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2
YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCiAgICAgICAgIHJldHVybiAwOworCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpIAorICAgICAg
ICByZXR1cm4gMDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7CiB9CiAK
QEAgLTMyMTksOCArMzM2OCwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQoKQogICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFu
IGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAogICAgICAgICAv
LyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhl
bSB1cCB0byB0aGUgbWluKS4KICAgICAgICAgSW50U2l6ZSBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBz
aG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCisg
ICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0
ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVk
Z2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBp
dHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxz
LgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisjZW5k
aWYKICAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCiAg
ICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OwpAQCAtMzI2MCw2ICszNDE5LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dD
b250cm9scyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50CiAgICAgaWYg
KCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gRG9uJ3QgcmVuZGVyIChjdXN0b20pIHNjcm9sbGJhcnMgaWYg
d2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcuCisgICAgaWYgKGhhc0FjY2VsZXJhdGVkVG91
Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICAvLyBPdmVybGF5
IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVl
IHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CiAgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxz
ZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNv
bnRyb2xzCiAgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhl
IHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCkBAIC01MjQzLDcg
KzU0MDgsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENs
aXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAgICAgY2xpcFJlY3RzLnNl
dE92ZXJmbG93Q2xpcFJlY3QoY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpOwogICAgIAogICAgIC8v
IFVwZGF0ZSB0aGUgY2xpcCByZWN0cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGNoaWxkIGxheWVy
cy4KKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZs
b3dDbGlwKCkgJiYgKGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNw
ZWN0T3ZlcmZsb3dDbGlwIHx8IHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIpKSB7
CisjZWxzZQogICAgIGlmICgocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoY2xpcFJl
Y3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXAgfHwg
dGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllcikpIHx8IHJlbmRlcmVyKCkuaGFzQ2xp
cCgpKSB7CisjZW5kaWYKICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAg
b2Ygc29tZSBraW5kLgogCiAgICAgICAgIC8vIFRoaXMgb2Zmc2V0IGNhbm5vdCB1c2UgY29udmVy
dFRvTGF5ZXJDb29yZHMsIGJlY2F1c2Ugc29tZXRpbWVzIG91ciByb290TGF5ZXIgbWF5IGJlIGFj
cm9zcwpAQCAtNjE4Myw2ICs2MzUyLDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3Jt
YWxGbG93T25seSgpIGNvbnN0CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICAmJiAh
cmVuZGVyZXIoKS5oYXNGaWx0ZXIoKQogI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICAgICAgJiYgIWhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKQorI2VuZGlmCiAjaWYgRU5B
QkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgJiYgIXJlbmRlcmVyKCkuaGFzQmxlbmRNb2Rl
KCkKICNlbmRpZgpAQCAtNjM5Nyw3ICs2NTY5LDcgQEAgaW5saW5lIGJvb2wgUmVuZGVyTGF5ZXI6
Om5lZWRzQ29tcG9zaXRpbmdMYXllcnNSZWJ1aWx0Rm9yT3ZlcmZsb3coY29uc3QgUmVuZGVyU3QK
IAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotdm9pZCBSZW5kZXJM
YXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQordm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgYm9vbCBpc05vcm1hbEZs
b3dPbmx5ID0gc2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwogICAgIGlmIChpc05vcm1hbEZsb3dP
bmx5ICE9IG1faXNOb3JtYWxGbG93T25seSkgewpAQCAtNjQ3Nyw2ICs2NjQ5LDEzIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKICAgICB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykgJiYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VSZWNvbXBv
c2l0ZUxheWVyIHx8IGRpZmYgPj0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1vdmVt
ZW50T25seSkKKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRpcnR5VG91Y2hFdmVudFJl
Y3RzKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkaWZmKTsKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQogICAgIHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIo
KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC02NTEwLDYgKzY2ODksMTgg
QEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVy
ZmxvdykKICAgICAgICAgdXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiAjZW5kaWYK
ICAgICB9CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Cisg
ICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmco
KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNo
IGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2Ug
YmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBh
IHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAxNDJiNTZjNmJhMmY0NjEwYmJiODM1ODA2MmFj
YTc3MzQ1MmIwMWM3Li5kNThlZTJhMTE0ZDJhMWIzMTk2ZjZmMDZlNjIzMDRhODNmMjNjMzYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMzIwLDYgKzMyMCwxMCBA
QCBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRnZXQgKGlmIGFueSkgaGFzIGJl
ZW4gbnVsbGVkIG91dC4KKyAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOworI2VuZGlmCiAgICAg
U3RyaW5nIG5hbWUoKSBjb25zdDsKIAogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRl
cmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQpAQCAtNDIwLDYgKzQyNCwyNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CiAgICAgdmlydHVhbCBTY3JvbGxhYmxl
QXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKIAorI2lmIFBM
QVRGT1JNKElPUykKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBpc1RvdWNoU2Nyb2xsYWJsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IHRydWU7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBpc092ZXJmbG93U2Nyb2xsKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRT
dGFydFNjcm9sbCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRTY3JvbGwoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldElzVXNlclNjcm9sbChib29sIGlzVXNlclNjcm9sbCkgT1ZFUlJJ
REUgeyBtX2luVXNlclNjcm9sbCA9IGlzVXNlclNjcm9sbDsgfQorCisgICAgYm9vbCBpc0luVXNl
clNjcm9sbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5Vc2VyU2Nyb2xsOyB9CisKKyAgICBib29sIHJl
cXVpcmVzU2Nyb2xsQm91bmRzT3JpZ2luVXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJl
c1Njcm9sbEJvdW5kc09yaWdpblVwZGF0ZTsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxC
b3VuZHNPcmlnaW5VcGRhdGUoYm9vbCByZXF1aXJlc1VwZGF0ZSA9IHRydWUpIHsgbV9yZXF1aXJl
c1Njcm9sbEJvdW5kc09yaWdpblVwZGF0ZSA9IHJlcXVpcmVzVXBkYXRlOyB9CisKKyAgICBib29s
IGhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSBjb25zdDsKKworI2VuZGlmCisKICAgICBp
bnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKICAgICBpbnQgaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplKSBjb25zdDsKIApAQCAtNzI4LDYgKzc1MywxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1f
c3RhdGljSW5saW5lUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3RhdGljQmxv
Y2tQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljQmxvY2tQb3NpdGlvbiA9
IHBvc2l0aW9uOyB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBhZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5k
aWYKKwogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5o
YXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhl
IHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC0xMDQ0LDYg
KzEwNzQsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVzU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKICAgICAvLyBSZWN0YW5nbGUgZW5jb21w
YXNzaW5nIHRoZSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyIHJlY3QuCiAgICAgSW50UmVjdCBz
Y3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0OwogCkBAIC0xMjA0LDYgKzEyMzksMTMg
QEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3Np
dGVkUmVhc29uIDogMjsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgbV9h
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOworICAgIGJvb2wgbV9pblVzZXJT
Y3JvbGwgOiAxOworICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbEJvdW5kc09yaWdpblVwZGF0ZSA6
IDE7CisjZW5kaWYKKwogICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMg
OiAxOwogICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggY2VhNmFi
OTkwN2E5Njc3ZmQ0NmM0MDNiOTk1NDA1YzNmZDRlYzcyZi4uN2I4OTI0NjFiODI5MWIyMGRjYTYw
MWE1YWQ2N2Q5NTM4NGFjYzg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKQEAgLTMxMiw4ICszMTIsMTEgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFwaGljc0xheWVyKCkKICAgICAgICAgbV9jaGlsZENv
bnRhaW5tZW50TGF5ZXIgPSBjcmVhdGVHcmFwaGljc0xheWVyKCJUaWxlZEJhY2tpbmcgRmxhdHRl
bmluZyBMYXllciIpOwogCiAgICAgaWYgKG1faXNNYWluRnJhbWVSZW5kZXJWaWV3TGF5ZXIpIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQorICAgICAgICAvLyBQYWdlIHNjYWxlIGlzIGFwcGxpZWQgYWJv
dmUgdGhlIFJlbmRlclZpZXcgb24gaU9TLgogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKHRydWUpOwogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFwcGxpZXNQ
YWdlU2NhbGUoKTsKKyNlbmRpZgogICAgIH0KIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENB
KQpAQCAtMzM0LDYgKzMzNywxOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlUHJp
bWFyeUdyYXBoaWNzTGF5ZXIoKQogI2VuZGlmCiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6bGF5ZXJXaWxsQmVEZXN0cm95ZWQoKQoreworICAgIFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5p
c0VtYmVkZGVkT2JqZWN0KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyZW5kZXJlcikuYWxs
b3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CisgICAgICAgIFBsdWdpblZpZXdCYXNlKiBw
bHVnaW5WaWV3QmFzZSA9IHRvUGx1Z2luVmlld0Jhc2UodG9SZW5kZXJXaWRnZXQocmVuZGVyZXIp
LndpZGdldCgpKTsKKyAgICAgICAgaWYgKHBsdWdpblZpZXdCYXNlICYmIG1fZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNMYXllckZvck1lZGlhKCkpCisgICAgICAgICAgICBwbHVnaW5WaWV3QmFzZS0+
ZGV0YWNoUGx1Z2luTGF5ZXIoKTsKKyAgICB9Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OmRlc3Ryb3lHcmFwaGljc0xheWVycygpCiB7CiAgICAgaWYgKG1fZ3JhcGhpY3NM
YXllcikgewpAQCAtMzk1LDI3ICs0MTAsNDggQEAgc3RhdGljIGJvb2wgaGFzTm9uWmVyb1RyYW5z
Zm9ybU9yaWdpbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgICAgICB8fCAoc3R5
bGUudHJhbnNmb3JtT3JpZ2luWSgpLnR5cGUoKSA9PSBGaXhlZCAmJiBzdHlsZS50cmFuc2Zvcm1P
cmlnaW5ZKCkudmFsdWUoKSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCisvLyBGSVhNRTogV2Ug
c2hvdWxkIG1lcmdlIHRoZSBjb25jZXB0IG9mIFJlbmRlckxheWVyOjp7aGFzQWNjZWxlcmF0ZWRU
b3VjaFNjcm9sbGluZywgbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nfSgpCisvLyBzbyB0aGF0IHdl
IGNhbiByZW1vdmUgdGhpcyBpT1Mtc3BlY2lmaWMgdmFyaWFudC4KK3N0YXRpYyBib29sIGxheWVy
T3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclNjcm9sbGluZyhSZW5kZXJMYXllciYgbGF5ZXIpCit7
CisgICAgZm9yIChSZW5kZXJMYXllciogY3VyciA9ICZsYXllcjsgY3VycjsgY3VyciA9IGN1cnIt
PnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8fCBjdXJyLT5o
YXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZWxzZQogc3RhdGljIGJvb2wgbGF5ZXJP
ckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3NpdGVkU2Nyb2xsaW5nKFJlbmRlckxh
eWVyJiBsYXllcikKIHsKICAgICBmb3IgKFJlbmRlckxheWVyKiBjdXJyID0gJmxheWVyOyBjdXJy
OyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKGN1cnItPmhhc1RyYW5zZm9y
bSgpIHx8IGN1cnItPm5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQotCisjZW5kaWYK
KyAgICAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGRDbGlwQ29tcG9zaXRlZEJvdW5k
cygpIGNvbnN0CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBTY3JvbGxiYXIgbGF5ZXJz
IHVzZSB0aGlzIGxheWVyIGZvciByZWxhdGl2ZSBwb3NpdGlvbmluZywgc28gZG9uJ3QgY2xpcC4K
ICAgICBpZiAobGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgbGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmICht
X3VzaW5nVGlsZWRDYWNoZUxheWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmIChsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkT3JVc2luZ0Nv
bXBvc2l0ZWRTY3JvbGxpbmcobV9vd25pbmdMYXllcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbHNlCisgICAgaWYgKGxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclNjcm9sbGluZyht
X293bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAKICAgICBpZiAo
bV9vd25pbmdMYXllci5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJl
Z2lvbnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE2LDkgKzU1MiwxNSBAQCBib29s
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckNvbmZpZ3VyYXRpb24oKQog
ICAgIAogICAgIGJvb2wgbmVlZHNEZXNjZW5kZW50c0NsaXBwaW5nTGF5ZXIgPSBjb21wb3NpdG9y
KCkuY2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRzKG1fb3duaW5nTGF5ZXIpOwogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIE91ciBzY3JvbGxpbmcgbGF5ZXIgd2lsbCBjbGlwLgorICAgIGlm
IChtX293bmluZ0xheWVyLmhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAg
bmVlZHNEZXNjZW5kZW50c0NsaXBwaW5nTGF5ZXIgPSBmYWxzZTsKKyNlbHNlCiAgICAgLy8gT3Vy
IHNjcm9sbGluZyBsYXllciB3aWxsIGNsaXAuCiAgICAgaWYgKG1fb3duaW5nTGF5ZXIubmVlZHND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIG5lZWRzRGVzY2VuZGVudHNDbGlwcGluZ0xh
eWVyID0gZmFsc2U7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiAgICAgaWYgKHVwZGF0ZUFu
Y2VzdG9yQ2xpcHBpbmdMYXllcihjb21wb3NpdG9yKCkuY2xpcHBlZEJ5QW5jZXN0b3IobV9vd25p
bmdMYXllcikpKQogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwpAQCAtNTI5LDgg
KzU3MSwxMyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckNv
bmZpZ3VyYXRpb24oKQogICAgIGlmICh1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKHJlcXVp
cmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCksIHJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJM
YXllcigpLCByZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkpKQogICAgICAgICBsYXllckNvbmZp
Z0NoYW5nZWQgPSB0cnVlOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICh1cGRhdGVTY3Jv
bGxpbmdMYXllcnMobV9vd25pbmdMYXllci5oYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCkp
KQorICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOworI2Vsc2UKICAgICBpZiAodXBk
YXRlU2Nyb2xsaW5nTGF5ZXJzKG1fb3duaW5nTGF5ZXIubmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpKQogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKIAogICAgIGlmIChsYXllckNvbmZpZ0NoYW5nZWQpCiAgICAgICAgIHVwZGF0ZUlu
dGVybmFsSGllcmFyY2h5KCk7CkBAIC01NjIsOCArNjA5LDE1IEBAIGJvb2wgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigpCiAKICAgICBpZiAocmVu
ZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdCgmcmVu
ZGVyZXIoKSktPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICBQbHVn
aW5WaWV3QmFzZSogcGx1Z2luVmlld0Jhc2UgPSB0b1BsdWdpblZpZXdCYXNlKHRvUmVuZGVyV2lk
Z2V0KCZyZW5kZXJlcigpKS0+d2lkZ2V0KCkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
aWYgKHBsdWdpblZpZXdCYXNlICYmICFtX2dyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXJGb3JN
ZWRpYSgpKSB7CisgICAgICAgICAgICBwbHVnaW5WaWV3QmFzZS0+ZGV0YWNoUGx1Z2luTGF5ZXIo
KTsKKyAgICAgICAgICAgIHBsdWdpblZpZXdCYXNlLT5hdHRhY2hQbHVnaW5MYXllcigpOworICAg
ICAgICB9CisjZWxzZQogICAgICAgICBpZiAoIXBsdWdpblZpZXdCYXNlLT5zaG91bGROb3RBZGRM
YXllcigpKQogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvTWVkaWEo
cGx1Z2luVmlld0Jhc2UtPnBsYXRmb3JtTGF5ZXIoKSk7CisjZW5kaWYKICAgICB9CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNWaWRlbygpKSB7CkBAIC02Njks
NiArNzIzLDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVy
R2VvbWV0cnkoKQogICAgIGVsc2UKICAgICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9u
ID0gcmVuZGVyZXIoKS52aWV3KCkuZG9jdW1lbnRSZWN0KCkubG9jYXRpb24oKTsKIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBpZiAoY29tcEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rvci0+aGFzQWNj
ZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpKSB7CisgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94
ID0gdG9SZW5kZXJCb3goJmNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CisgICAgICAgIEludFJl
Y3QgcGFkZGluZ0JveChyZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcmVuZGVyQm94LT5ib3JkZXJU
b3AoKSwKKyAgICAgICAgICAgIHJlbmRlckJveC0+d2lkdGgoKSAtIHJlbmRlckJveC0+Ym9yZGVy
TGVmdCgpIC0gcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLAorICAgICAgICAgICAgcmVuZGVyQm94
LT5oZWlnaHQoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJCb3gtPmJvcmRlckJv
dHRvbSgpKTsKKworICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldCA9IGNvbXBBbmNlc3Rvci0+
c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2Nh
dGlvbiA9IHBhZGRpbmdCb3gubG9jYXRpb24oKSAtIHNjcm9sbE9mZnNldDsKKyAgICB9CisjZW5k
aWYKKwogICAgIGlmIChjb21wQW5jZXN0b3IgJiYgY29tcEFuY2VzdG9yLT5uZWVkc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkgewogICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9IHRvUmVuZGVy
Qm94KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zm
c2V0ID0gY29tcEFuY2VzdG9yLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKQEAgLTgyMiw2ICs4
ODgsMzUgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9t
ZXRyeSgpCiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
cGFkZGluZ0JveC5sb2NhdGlvbigpIC0gbG9jYWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigp
KSk7CiAKICAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0U2l6ZShwYWRkaW5nQm94LnNpemUo
KSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBJbnRTaXplIG9sZFNjcm9sbGluZ0xheWVy
T2Zmc2V0ID0gbV9zY3JvbGxpbmdMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CisgICAgICAg
IG1fc2Nyb2xsaW5nTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihJbnRQb2ludCgpIC0gcGFk
ZGluZ0JveC5sb2NhdGlvbigpKTsKKyAgICAgICAgYm9vbCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdl
ZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xsaW5nTGF5ZXItPm9mZnNldEZy
b21SZW5kZXJlcigpOworCisgICAgICAgIGlmIChtX293bmluZ0xheWVyLmlzSW5Vc2VyU2Nyb2xs
KCkpIHsKKyAgICAgICAgICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxs
eSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJl
Y2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgICAgICAgICAgICAvLyBqaXR0ZXIuIFNldCBhIGZsYWcg
dG8gZW5zdXJlIHRoYXQgd2Ugc3luYyB1cCBsYXRlci4KKyAgICAgICAgICAgIG1fb3duaW5nTGF5
ZXIuc2V0UmVxdWlyZXNTY3JvbGxCb3VuZHNPcmlnaW5VcGRhdGUodHJ1ZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50
cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFu
IGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgorICAgICAgICAgICAgbV9zY3JvbGxpbmdMYXll
ci0+c2V0Qm91bmRzT3JpZ2luKEZsb2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LndpZHRoKCksIHNjcm9s
bE9mZnNldC5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJl
c1Njcm9sbEJvdW5kc09yaWdpblVwZGF0ZShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9sbFdpZHRoKCksIG1f
b3duaW5nTGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpOworCisgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVu
dHNMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzY3JvbGxTaXplICE9IG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2l6ZSgpIHx8IHBhZGRp
bmdCb3hPZmZzZXRDaGFuZ2VkKQorICAgICAgICAgICAgbV9zY3JvbGxpbmdDb250ZW50c0xheWVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIt
PnNldFNpemUoc2Nyb2xsU2l6ZSk7CisgICAgICAgIC8vIFNjcm9sbGluZyB0aGUgY29udGVudCBs
YXllciBkb2VzIG5vdCBuZWVkIHRvIHRyaWdnZXIgYSByZXBhaW50LiBUaGUgb2Zmc2V0IHdpbGwg
YmUgY29tcGVuc2F0ZWQgYXdheSBkdXJpbmcgcGFpbnRpbmcuCisgICAgICAgIC8vIEZJWE1FOiBU
aGUgcGFpbnQgb2Zmc2V0IGFuZCB0aGUgc2Nyb2xsIG9mZnNldCBzaG91bGQgcmVhbGx5IGJlIHNl
cGFyYXRlIGNvbmNlcHRzLgorICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE9m
ZnNldEZyb21SZW5kZXJlcihwYWRkaW5nQm94LmxvY2F0aW9uKCkgLSBJbnRQb2ludCgpIC0gc2Ny
b2xsT2Zmc2V0LCBHcmFwaGljc0xheWVyOjpEb250U2V0TmVlZHNEaXNwbGF5KTsKKyAgICAgICAg
CisgICAgICAgIGNvbXBvc2l0b3IoKS5zY3JvbGxpbmdMYXllckFkZGVkT3JVcGRhdGVkKCZtX293
bmluZ0xheWVyKTsKKyNlbHNlCiAgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgtc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1zY3JvbGxPZmZzZXQu
aGVpZ2h0KCkpKTsKIAogICAgICAgICBJbnRTaXplIG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0g
bV9zY3JvbGxpbmdMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CkBAIC04NDAsNiArOTM1LDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgp
CiAgICAgICAgIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+c2V0U2l6ZShzY3JvbGxTaXplKTsK
ICAgICAgICAgLy8gRklYTUU6IFRoZSBwYWludCBvZmZzZXQgYW5kIHRoZSBzY3JvbGwgb2Zmc2V0
IHNob3VsZCByZWFsbHkgYmUgc2VwYXJhdGUgY29uY2VwdHMuCiAgICAgICAgIG1fc2Nyb2xsaW5n
Q29udGVudHNMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHNjcm9sbGluZ0NvbnRlbnRzT2Zm
c2V0LCBHcmFwaGljc0xheWVyOjpEb250U2V0TmVlZHNEaXNwbGF5KTsKKyNlbmRpZgogCiAgICAg
ICAgIGlmIChtX2ZvcmVncm91bmRMYXllcikgewogICAgICAgICAgICAgbV9mb3JlZ3JvdW5kTGF5
ZXItPnNldFNpemUobV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5zaXplKCkpOwpAQCAtOTA5LDYg
KzEwMDUsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRGlyZWN0bHlDb21wb3Np
dGVkQ29udGVudHMoYm9vbCBpc1NpbXBsZUNvbnRhaW5lcgogCiB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cmVnaXN0ZXJTY3JvbGxpbmdMYXllcnMoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBjb21wb3NpdG9yKCkudXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVzKG1fb3duaW5nTGF5
ZXIpOworI2Vsc2UKICAgICAvLyBSZWdpc3RlciBmaXhlZCBwb3NpdGlvbiBsYXllcnMgYW5kIHRo
ZWlyIGNvbnRhaW5lcnMgd2l0aCB0aGUgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yLgogICAgIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHNjcm9sbGluZ0Nvb3JkaW5h
dG9yRnJvbUxheWVyKG1fb3duaW5nTGF5ZXIpOwogICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0
b3IpCkBAIC05MjQsNiArMTAyMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZWdpc3Rl
clNjcm9sbGluZ0xheWVycygpCiAgICAgLy8gbGF5ZXIgYXMgYSBjb250YWluZXIuCiAgICAgYm9v
bCBpc0NvbnRhaW5lciA9IG1fb3duaW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkgJiYgIW1fb3duaW5n
TGF5ZXIuaXNSb290TGF5ZXIoKTsKICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0TGF5ZXJJ
c0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoY2hpbGRGb3JTdXBlcmxheWVycygpLCBp
c0NvbnRhaW5lcik7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUludGVybmFsSGllcmFyY2h5KCkKQEAgLTEzMjAsOCArMTQyMCwxNiBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXll
cnMpCiAgICAgICAgICAgICBsYXllckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNj
cm9sbGluZ0Nvb3JkaW5hdG9yKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKCZtX293bmluZ0xheWVyKTsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBpZiAobV9vd25pbmdMYXllci5wYXJlbnQoKSkK
KyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2Nyb2xsaW5nTGF5ZXJBZGRlZE9yVXBkYXRl
ZCgmbV9vd25pbmdMYXllcik7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9z
Y3JvbGxpbmdMYXllcikgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKCFyZW5kZXJl
cigpLmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5z
Y3JvbGxpbmdMYXllclJlbW92ZWQoJm1fb3duaW5nTGF5ZXIsIG1fc2Nyb2xsaW5nTGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSwgbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLT5wbGF0Zm9ybUxheWVyKCkp
OworI2VuZGlmCiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxpbmdMYXllci5nZXQo
KSk7CiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdl
dCgpKTsKICAgICAgICAgbV9zY3JvbGxpbmdMYXllciA9IG51bGxwdHI7CkBAIC0xMzM0LDggKzE0
NDIsMTAgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyhi
b29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQogICAgIGlmIChsYXllckNoYW5nZWQpIHsKICAgICAg
ICAgdXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKTsKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5z
ZXRQYWludGluZ1BoYXNlKHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSk7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
ICAgICAgICAgY29tcG9zaXRvcigpLnNjcm9sbGluZ0xheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5
ZXIpOworI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyQ2hhbmdlZDsKQEAgLTE3MjUs
OCArMTgzNSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250
ZW50KGJvb2wgaXNTaW1wbGVDb250YWluZXIpIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNW
aWRlbygpICYmIHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIoKSkuc2hvdWxkRGlzcGxheVZpZGVvKCkp
CiAgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLmhhc0JveERlY29yYXRpb25zT3JCYWNrZ3Jv
dW5kKCk7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKLSNlbGlmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpICYmIFVTRShDQSkKKyNlbGlmIEVOQUJMRShXRUJHTCkgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikK
ICAgICBpZiAoaXNBY2NlbGVyYXRlZENhbnZhcygmcmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVy
biBtX293bmluZ0xheWVyLmhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCk7CiAjZW5kaWYK
QEAgLTE5MDMsNyArMjAxMywxNCBAQCBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckJhY2tpbmc6
OnBhcmVudEZvclN1YmxheWVycygpIGNvbnN0CiAgICAgaWYgKG1fc2Nyb2xsaW5nQ29udGVudHNM
YXllcikKICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHJlbW92ZSB0aGlzIGlPUy1z
cGVjaWZpYyBjb2RlIHBhdGg/CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGNsaXBwaW5nTGF5ZXIg
PSB0aGlzLT5jbGlwcGluZ0xheWVyKCkpCisgICAgICAgIHJldHVybiBjbGlwcGluZ0xheWVyOwor
ICAgIHJldHVybiBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7CisjZWxzZQogICAgIHJldHVybiBtX2No
aWxkQ29udGFpbm1lbnRMYXllciA/IG1fY2hpbGRDb250YWlubWVudExheWVyLmdldCgpIDogbV9n
cmFwaGljc0xheWVyLmdldCgpOworI2VuZGlmCiB9CiAKIEdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyQmFja2luZzo6Y2hpbGRGb3JTdXBlcmxheWVycygpIGNvbnN0CkBAIC0xOTIzLDcgKzIwNDAs
NyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRzSW50b1dpbmRvdygpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX293bmluZ0xheWVyLmlzUm9vdExheWVy
KCkpIHsKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oSU9TKSB8fCBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAgICAgICAgIGlmIChjb21wb3NpdG9yKCkuaW5Gb3JjZWRDb21w
b3NpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMjAx
Niw2ICsyMTMzLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWRE
aXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHIpCiAgICAgaWYgKG1fc2Nyb2xsaW5nQ29udGVu
dHNMYXllciAmJiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAg
ICAgICAgIEludFJlY3QgbGF5ZXJEaXJ0eVJlY3QgPSByOwogICAgICAgICBsYXllckRpcnR5UmVj
dC5tb3ZlKC1tX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIEFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKSBiYWtlcyBz
Y3JvbGxPZmZzZXQgaW50byBvZmZzZXRGcm9tUmVuZGVyZXIgb24gaU9TLgorICAgICAgICBsYXll
ckRpcnR5UmVjdC5tb3ZlKC1tX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpKTsKKyNlbmRpZgog
ICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChs
YXllckRpcnR5UmVjdCk7CiAgICAgfQogfQpAQCAtMjAyNSw3ICsyMTQ2LDEyIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyLCBHcmFwCiAgICAgICAgICAgICAgICAgICAgIFBhaW50QmVoYXZpb3IgcGFpbnRC
ZWhhdmlvciwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZSkKIHsKICAg
ICBpZiAocGFpbnRzSW50b1dpbmRvdygpIHx8IHBhaW50c0ludG9Db21wb3NpdGVkQW5jZXN0b3Io
KSkgeworI2lmICFQTEFURk9STShJT1MpCisgICAgICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRo
ZSBDQUxheWVyIHRyZWUgaXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgR3JhcGhpY3NMYXllciBoZWly
YXJjaHkKKyAgICAgICAgLy8gd2hlbiBwYWdlcyBhcmUgcmVzdG9yZWQgZnJvbSB0aGUgUGFnZUNh
Y2hlLgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vODcxMjU4Nz4gQVNTRVJUOiBXaGVuIEdv
aW5nIEJhY2sgdG8gUGFnZSB3aXRoIFBsdWdpbnMgaW4gUGFnZUNhY2hlCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIx
ODMsNiArMjMwOSwxOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c2hvdWxkRHVtcFByb3Bl
cnR5Rm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitmbG9hdCBSZW5kZXJMYXllckJhY2tpbmc6Om1pbmlt
dW1Eb2N1bWVudFNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcG9zaXRvcigpLm1pbmlt
dW1Eb2N1bWVudFNjYWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjphbGxvd0Nv
bXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNv
bXBvc2l0b3IoKS5hbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpOworfQor
I2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dmVyaWZ5
Tm90UGFpbnRpbmcoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5oCmluZGV4IDI0YTNhZmIyOTk5ZTU4NTRlMTIwNzBmZDAyNGJmODg2ODFmMjkxZDku
LmJjNzExZDU0ZDA4YjQxZjZlNmMwMjNjNTMyNGY5Zjg1YzVmOWYzZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTYwLDYgKzYwLDEwIEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJMYXllckJhY2tpbmcoUmVuZGVyTGF5ZXImKTsK
ICAgICB+UmVuZGVyTGF5ZXJCYWNraW5nKCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9p
ZCBsYXllcldpbGxCZURlc3Ryb3llZCgpOworI2VuZGlmCisKICAgICBSZW5kZXJMYXllciYgb3du
aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293bmluZ0xheWVyOyB9CiAKICAgICBlbnVtIFVw
ZGF0ZUFmdGVyTGF5b3V0RmxhZyB7CkBAIC0xNzIsNiArMTc2LDEwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Q3VycmVudFRyYW5zZm9ybShj
b25zdCBHcmFwaGljc0xheWVyKiwgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdCBPVkVSUklE
RTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIGZsb2F0IG1pbmltdW1Eb2N1bWVu
dFNjYWxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGFsbG93Q29tcG9zaXRp
bmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKICAgICB2
aXJ0dWFsIGJvb2wgaXNUcmFja2luZ1JlcGFpbnRzKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBib29sIHNob3VsZFNraXBMYXllckluRHVtcChjb25zdCBHcmFwaGljc0xheWVyKikgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZER1bXBQcm9wZXJ0eUZvckxheWVy
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpIGNvbnN0IE9W
RVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAppbmRleCAxYzYyMjhjNDM0ODgxNDE3Y2NmZjEwM2RlYjY0MGQzMTkwZDFiMjY1
Li4wM2UwNmYxNjc5Y2VhMDE0NWU3NzIzNGNkYjA1MTM1MjAxOTllYTVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNjYs
NiArNjYsMTIgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJl
Z2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlRpbGVDYWNo
ZS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICNpbmNs
dWRlICJIVE1MQXVkaW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgpA
QCAtODgsNyArOTQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50
IGNhbnZhc0FyZWFUaHJlc2hvbGRSZXF1aXJpbmdDb21wb3NpdGluZyA9IDUwICogMTAwOwogLy8g
RHVyaW5nIHBhZ2UgbG9hZGluZyBkZWxheSBsYXllciBmbHVzaGVzIHVwIHRvIHRoaXMgbWFueSBz
ZWNvbmRzIHRvIGFsbG93IHRoZW0gY29hbGVzY2UsIHJlZHVjaW5nIHdvcmtsb2FkLgorI2lmIFBM
QVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCBkb3VibGUgdGhyb3R0bGVkTGF5ZXJGbHVzaEluaXRp
YWxEZWxheSA9IC41Oworc3RhdGljIGNvbnN0IGRvdWJsZSB0aHJvdHRsZWRMYXllckZsdXNoRGVs
YXkgPSAxLjU7CisjZWxzZQogc3RhdGljIGNvbnN0IGRvdWJsZSB0aHJvdHRsZWRMYXllckZsdXNo
RGVsYXkgPSAuNTsKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCkBAIC0z
NjAsNiArMzcxLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY2hlZHVsZUxheWVy
Rmx1c2goYm9vbCBjYW5UaHJvdHRsZSkKIHsKICAgICBBU1NFUlQoIW1fZmx1c2hpbmdMYXllcnMp
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChjYW5UaHJvdHRsZSkKKyAgICAgICAgc3Rh
cnRJbml0aWFsTGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQoKTsKKyNlbmRpZgorCiAgICAgaWYgKGNh
blRocm90dGxlICYmIGlzVGhyb3R0bGluZ0xheWVyRmx1c2hlcygpKSB7CiAgICAgICAgIG1faGFz
UGVuZGluZ0xheWVyRmx1c2ggPSB0cnVlOwogICAgICAgICByZXR1cm47CkBAIC0zNjcsNiArMzgz
LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY2hlZHVsZUxheWVyRmx1c2goYm9v
bCBjYW5UaHJvdHRsZSkKICAgICBzY2hlZHVsZUxheWVyRmx1c2hOb3coKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK0Nocm9tZUNsaWVudCogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjaHJvbWVD
bGllbnQoKSBjb25zdAoreworICAgIFBhZ2UqIHBhZ2UgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCkuZnJhbWUoKS5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gJnBhZ2UtPmNocm9tZSgpLmNsaWVudCgpOworfQorI2VuZGlmCisKIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoYm9vbCBpc0ZsdXNo
Um9vdCkKIHsKICAgICAvLyBGcmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGlu
Z1N1YmZyYW1lcygpIGZsdXNoZXMgZWFjaCBzdWJmcmFtZSwKQEAgLTM3Nyw2ICs0MDMsOSBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wg
aXNGbHVzaFJvb3QpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAocm9vdExheWVyQXR0
YWNobWVudCgpID09IFJvb3RMYXllclVuYXR0YWNoZWQpIHsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgICAgIHN0YXJ0TGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQoKTsKKyNlbmRpZgogICAgICAgICBt
X3Nob3VsZEZsdXNoT25SZWF0dGFjaCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zODgsMjYgKzQxNyw4MiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3QpCiAgICAgbV9mbHVzaGluZ0xheWVycyA9
IHRydWU7CiAKICAgICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gcm9vdEdyYXBoaWNz
TGF5ZXIoKSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgcm9vdExheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGUoZnJhbWVWaWV3LnZpc2libGVFeHRlbnRDb250ZW50UmVjdCgpKTsKKyNl
bHNlCiAgICAgICAgIC8vIEhhdmluZyBhIG1fY2xpcExheWVyIGluZGljYXRlcyB0aGF0IHdlJ3Jl
IGRvaW5nIHNjcm9sbGluZyB2aWEgR3JhcGhpY3NMYXllcnMuCiAgICAgICAgIEludFJlY3Qgdmlz
aWJsZVJlY3QgPSBtX2NsaXBMYXllciA/IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LmNv
bnRlbnRzU2l6ZSgpKSA6IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAg
cm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOworI2VuZGlmCiAg
ICAgfQogICAgIAogICAgIEFTU0VSVChtX2ZsdXNoaW5nTGF5ZXJzKTsKICAgICBtX2ZsdXNoaW5n
TGF5ZXJzID0gZmFsc2U7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdXBkYXRlQ3VzdG9tTGF5
ZXJzQWZ0ZXJGbHVzaCgpOworCisgICAgQ2hyb21lQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jaHJv
bWVDbGllbnQoKTsKKyAgICBpZiAoY2xpZW50ICYmIGlzRmx1c2hSb290KQorICAgICAgICBjbGll
bnQtPmRpZEZsdXNoQ29tcG9zaXRpbmdMYXllcnMoKTsKKyNlbHNlCiAgICAgZm9yIChhdXRvIGl0
ID0gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5iZWdpbigpLCBlbmQg
PSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnNOZWVkaW5nVXBkYXRlLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCiAgICAgICAgIHJlZ2lzdGVyT3JVcGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5
ZXIoKippdCk7CiAgICAgbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5j
bGVhcigpOwotCisjZW5kaWYKICAgICBzdGFydExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7CiB9
CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIYXNEaXNwbGF5Tm9u
ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAoIXNjcm9sbGJhciB8fCAhc2Nyb2xs
YmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IHNjcm9sbGJhclN0eWxlID0gc3RhdGljX2Nhc3Q8UmVuZGVyU2Ny
b2xsYmFyKj4oc2Nyb2xsYmFyKS0+Z2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyQkdQ
YXJ0LCBTQ1JPTExCQVIpOworICAgIHJldHVybiBzY3JvbGxiYXJTdHlsZSAmJiBzY3JvbGxiYXJT
dHlsZS0+ZGlzcGxheSgpID09IE5PTkU7Cit9CisKKy8vIEZJWE1FOiBDYW4gd2UgbWFrZSB8bGF5
ZXJ8IGNvbnN0IFJlbmRlckxheWVyJj8KK3N0YXRpYyB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xheWVy
V2l0aENsaWVudChSZW5kZXJMYXllciYgbGF5ZXIsIENocm9tZUNsaWVudCogY2xpZW50KQorewor
ICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllckJhY2tp
bmcqIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOworICAgIEFTU0VSVChiYWNraW5nKTsKKwor
ICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9sbGJhckhhc0Rpc3BsYXlO
b25lKGxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGJvb2wgYWxsb3dWZXJ0aWNh
bFNjcm9sbGJhciA9ICFzY3JvbGxiYXJIYXNEaXNwbGF5Tm9uZShsYXllci0+dmVydGljYWxTY3Jv
bGxiYXIoKSk7CisgICAgY2xpZW50LT5hZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKGxheWVyLT5y
ZW5kZXJlcigpLmVsZW1lbnQoKSwgYmFja2luZy0+c2Nyb2xsaW5nTGF5ZXIoKS0+cGxhdGZvcm1M
YXllcigpLCBiYWNraW5nLT5zY3JvbGxpbmdDb250ZW50c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIo
KSwKKyAgICAgICAgSW50U2l6ZShsYXllci0+c2Nyb2xsV2lkdGgoKSwgbGF5ZXItPnNjcm9sbEhl
aWdodCgpKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFy
KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUN1c3RvbUxheWVyc0Fm
dGVyRmx1c2goKQoreworICAgIHJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygp
OworCisgICAgaWYgKCFtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRhdGUuaXNFbXB0eSgpKSB7
CisgICAgICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gdGhpcy0+Y2hyb21lQ2xpZW50
KCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBk
YXRlLmJlZ2luKCksIGVuZCA9IG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZS5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJXaXRoQ2xp
ZW50KCoqaXQsIGNocm9tZUNsaWVudCk7CisgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGlu
Z1VwZGF0ZS5jbGVhcigpOworICAgIH0KKyAgICBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRh
dGUuY2xlYXIoKTsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlk
Rmx1c2hDaGFuZ2VzRm9yTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQogewogICAgIGlmIChtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXll
cnMuY29udGFpbnMoJmxheWVyKSkKICAgICAgICAgbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJz
TmVlZGluZ1VwZGF0ZS5hZGQoJmxheWVyKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAo
bV9zY3JvbGxpbmdMYXllcnMuY29udGFpbnMoJmxheWVyKSkKKyAgICAgICAgbV9zY3JvbGxpbmdM
YXllcnNOZWVkaW5nVXBkYXRlLmFkZCgmbGF5ZXIpOworI2VuZGlmCisKICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgaWYgKGJhY2tpbmctPmJh
Y2tncm91bmRMYXllclBhaW50c0ZpeGVkUm9vdEJhY2tncm91bmQoKSAmJiBncmFwaGljc0xheWVy
ID09IGJhY2tpbmctPmJhY2tncm91bmRMYXllcigpKQogICAgICAgICBmaXhlZFJvb3RCYWNrZ3Jv
dW5kTGF5ZXJDaGFuZ2VkKCk7CkBAIC00MjgsNyArNTEzLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpkaWRDaGFuZ2VWaXNpYmxlUmVjdCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBmcmFtZVZpZXcu
dmlzaWJsZUV4dGVudENvbnRlbnRSZWN0KCk7CisjZWxzZQogICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSBtX2NsaXBMYXllciA/IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LmNvbnRlbnRz
U2l6ZSgpKSA6IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKTsKKyNlbmRpZgogICAgIGlm
ICghcm9vdExheWVyLT52aXNpYmxlUmVjdENoYW5nZVJlcXVpcmVzRmx1c2godmlzaWJsZVJlY3Qp
KQogICAgICAgICByZXR1cm47CiAgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7CkBAIC04Nzcs
OSArOTY3LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAo
T3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuZGVyTGF5ZXImCiAgICAgfQogCiAgICAgSW50UmVj
dCBjbGlwUmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QobGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0
KFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KCZyb290UmVuZGVyTGF5ZXIoKSwgMCwgQWJz
b2x1dGVDbGlwUmVjdHMpKS5yZWN0KCkpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVn
aW9ucy4KKworICAgIC8vIE9uIGlPUywgcGFnZVNjYWxlRmFjdG9yKCkgaXMgbm90IGFwcGxpZWQg
YnkgUmVuZGVyVmlldywgc28gd2Ugc2hvdWxkIG5vdCBzY2FsZSBoZXJlLgorICAgIC8vIEZJWE1F
OiBTZXQgU2V0dGluZ3M6OmRlbGVnYXRlc1BhZ2VTY2FsaW5nIHRvIHRydWUgZm9yIGlPUy4KKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbnN0IFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcmVuZGVy
Vmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncy5k
ZWxlZ2F0ZXNQYWdlU2NhbGluZygpKQogICAgICAgICBjbGlwUmVjdC5zY2FsZShwYWdlU2NhbGVG
YWN0b3IoKSk7CisjZW5kaWYKICAgICBjbGlwUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHMpOwog
ICAgIG92ZXJsYXBNYXAuYWRkKCZsYXllciwgY2xpcFJlY3QpOwogfQpAQCAtMTExOSw4ICsxMjE0
LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAgICAgLy8gdG8gYmUgY29tcG9zaXRlZCwg
dGhlbiB3ZSBjYW4gZHJvcCBvdXQgb2YgY29tcG9zaXRpbmcgbW9kZSBhbHRvZ2V0aGVyLiBIb3dl
dmVyLCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBtb2RlCiAgICAgLy8gaWYgdGhlcmUg
YXJlIGNvbXBvc2l0ZWQgbGF5ZXJzIHRoYXQgd2UgZGlkbid0IGhpdCBpbiBvdXIgdHJhdmVyc2Fs
IChlLmcuIGJlY2F1c2Ugb2YgdmlzaWJpbGl0eTpoaWRkZW4pLgogICAgIGlmIChsYXllci5pc1Jv
b3RMYXllcigpICYmICFjaGlsZFN0YXRlLm1fc3VidHJlZUlzQ29tcG9zaXRpbmcgJiYgIXJlcXVp
cmVzQ29tcG9zaXRpbmdMYXllcihsYXllcikgJiYgIW1fZm9yY2VDb21wb3NpdGluZ01vZGUgJiYg
IWhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGxheWVyKSkgeworICAgICAgICAvLyBE
b24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBvbiBpT1MsIGJlY2F1c2Ugd2UgbWF5IGZsYXNo
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzgzNDgzMzc+LgorI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIGVuYWJsZUNvbXBvc2l0aW5nTW9kZShmYWxzZSk7CiAgICAgICAgIHdpbGxCZUNvbXBvc2l0
ZWQgPSBmYWxzZTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMg
Z29pbmcgaW50byBjb21wb3NpdGluZyBtb2RlLCByZXBhaW50IGl0cyBvbGQgbG9jYXRpb24uCkBA
IC0xNjk5LDExICsxNzk3LDE5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRJc0lu
V2luZG93KGJvb2wgaXNJbldpbmRvdykKIAogICAgICAgICBSb290TGF5ZXJBdHRhY2htZW50IGF0
dGFjaG1lbnQgPSBzaG91bGRQcm9wYWdhdGVDb21wb3NpdGluZ1RvRW5jbG9zaW5nRnJhbWUoKSA/
IFJvb3RMYXllckF0dGFjaGVkVmlhRW5jbG9zaW5nRnJhbWUgOiBSb290TGF5ZXJBdHRhY2hlZFZp
YUNocm9tZUNsaWVudDsKICAgICAgICAgYXR0YWNoUm9vdExheWVyKGF0dGFjaG1lbnQpOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAgICAgcmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5
ZXJzKCk7CisgICAgICAgIHJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCk7CisjZW5kaWYKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAobV9yb290TGF5ZXJBdHRhY2htZW50ID09IFJvb3RMYXll
clVuYXR0YWNoZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZGV0YWNoUm9vdExh
eWVyKCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB1bnJlZ2lzdGVyQWxsVmlld3BvcnRD
b25zdHJhaW5lZExheWVycygpOworICAgICAgICB1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJz
KCk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTE3NTgsNyArMTg2NCw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpoYXMzRENvbnRlbnQoKSBjb25zdAogCiBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWxsb3dzSW5kZXBlbmRlbnRseUNvbXBvc2l0ZWRGcmFtZXMoY29uc3QgRnJh
bWVWaWV3KiB2aWV3KQogewotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShJT1MpCiAgICAgLy8gZnJhbWVzIGFyZSBvbmx5IGluZGVwZW5kZW50bHkgY29t
cG9zaXRlZCBpbiBNYWMgcHJlLVdlYktpdDIuCiAgICAgcmV0dXJuIHZpZXctPnBsYXRmb3JtV2lk
Z2V0KCk7CiAjZWxzZQpAQCAtMTgzMiw2ICsxOTM4LDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IFIKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbigqcmVuZGVyZXIp
CiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaWx0ZXJzKCpyZW5kZXJlcikKICAg
ICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKCpyZW5kZXJlciwgKnJlbmRl
cmVyLT5sYXllcigpLCB2aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbikKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxp
bmcoKnJlbmRlcmVyKQorI2VuZGlmCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JP
dmVyZmxvd1Njcm9sbGluZygqcmVuZGVyZXItPmxheWVyKCkpCiAgICAgICAgIHx8IHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JCbGVuZGluZygqcmVuZGVyZXIpOwogfQpAQCAtMTg3OCw3ICsxOTg3LDEx
IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc093bkJhY2tpbmdTdG9yZShj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvCiAgICAgICAgIHx8IHJlbmRlcmVyLmlzVHJhbnNw
YXJlbnQoKQogICAgICAgICB8fCByZW5kZXJlci5oYXNNYXNrKCkKICAgICAgICAgfHwgcmVuZGVy
ZXIuaGFzUmVmbGVjdGlvbigpCi0gICAgICAgIHx8IHJlbmRlcmVyLmhhc0ZpbHRlcigpKQorICAg
ICAgICB8fCByZW5kZXJlci5oYXNGaWx0ZXIoKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
fHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGluZyhyZW5kZXJlcikKKyNlbmRpZgorICAg
ICAgICApCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAKQEAgLTE5MzUsNiAr
MjA0OCwxMSBAQCBDb21wb3NpdGluZ1JlYXNvbnMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFz
b25zRm9yQ29tcG9zaXRpbmcoY29uc3QgUmVuZGVyTGF5ZQogICAgIGlmIChyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUG9zaXRpb24oKnJlbmRlcmVyLCAqcmVuZGVyZXItPmxheWVyKCkpKQogICAgICAg
ICByZWFzb25zIHw9IHJlbmRlcmVyLT5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlv
biA/IENvbXBvc2l0aW5nUmVhc29uUG9zaXRpb25GaXhlZCA6IENvbXBvc2l0aW5nUmVhc29uUG9z
aXRpb25TdGlja3k7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JTY3JvbGxpbmcoKnJlbmRlcmVyKSkKKyAgICAgICAgcmVhc29ucyB8PSBDb21wb3Np
dGluZ1JlYXNvbk92ZXJmbG93U2Nyb2xsaW5nVG91Y2g7CisjZW5kaWYKKwogICAgIGlmIChyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoKnJlbmRlcmVyLT5sYXllcigpKSkK
ICAgICAgICAgcmVhc29ucyB8PSBDb21wb3NpdGluZ1JlYXNvbk92ZXJmbG93U2Nyb2xsaW5nVG91
Y2g7CiAKQEAgLTIyMTcsMTAgKzIzMzUsMTAgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamUKICAg
ICByZXR1cm4gKGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoJnJl
bmRlcmVyLCBDU1NQcm9wZXJ0eU9wYWNpdHkpCiAgICAgICAgICAgICAmJiAoaW5Db21wb3NpdGlu
Z01vZGUoKSB8fCAobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpBbmltYXRl
ZE9wYWNpdHlUcmlnZ2VyKSkpCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotI2lmICFQTEFURk9S
TShNQUMpIHx8ICghUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwODApCisjaWYgUExBVEZPUk0oSU9TKSB8fCAhUExBVEZPUk0oTUFDKSB8fCBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKICAgICAgICAgICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS8xMDkwNzI1MT4gLSBXZWJLaXQyIGRvZXNuJ3Qgc3VwcG9ydCBDQSBhbmltYXRp
b25zIG9mIENJIGZpbHRlcnMgb24gTGlvbiBhbmQgYmVsb3cKICAgICAgICAgICAgIHx8IGFuaW1D
b250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoJnJlbmRlcmVyLCBDU1NQcm9w
ZXJ0eVdlYmtpdEZpbHRlcikKLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSB8fCAoIVBMQVRGT1JN
KElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwKQorI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1BQykgfHwgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDgwCiAjZW5kaWYgLy8gQ1NTX0ZJTFRFUlMKICAgICAgICAgICAg
IHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoJnJlbmRlcmVy
LCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiB9CkBAIC0yMjU0LDYgKzIzNzIsMTMgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVj
dFJlYXNvbihSZW5kZXJMYXllck1vZGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclNjcm9sbGluZyhSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gcmVuZGVyZXIuaGFzTGF5ZXIoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KHJlbmRlcmVyKS5sYXllcigpLT5oYXNBY2NlbGVyYXRlZFRvdWNoU2Nyb2xsaW5nKCk7Cit9Cisj
ZW5kaWYKKwogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JGaWx0ZXJzKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyNzcsMTAgKzI0MDIsMzEgQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyhSZW5kZXJMYXll
ck1vZGVsT2JqZWMKICNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wg
aXNTdGlja3lJbkFjY2VsZXJhdGVkU2Nyb2xsaW5nTGF5ZXJPclZpZXdwb3J0KGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqKiBlbmNsb3NpbmdBY2NlbGVyYXRlZE92
ZXJmbG93TGF5ZXIgPSAwKQoreworICAgIEFTU0VSVChsYXllci5yZW5kZXJlcigpLmlzU3RpY2t5
UG9zaXRpb25lZCgpKTsKKworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdPdmVyZmxvd0xheWVy
ID0gbGF5ZXIuZW5jbG9zaW5nT3ZlcmZsb3dDbGlwTGF5ZXIoRXhjbHVkZVNlbGYpOworICAgIGlm
IChlbmNsb3NpbmdPdmVyZmxvd0xheWVyICYmIGVuY2xvc2luZ092ZXJmbG93TGF5ZXItPmhhc0Fj
Y2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nQWNjZWxl
cmF0ZWRPdmVyZmxvd0xheWVyKQorICAgICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJhdGVkT3Zl
cmZsb3dMYXllciA9IGVuY2xvc2luZ092ZXJmbG93TGF5ZXI7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiAhZW5jbG9zaW5nT3ZlcmZsb3dMYXllcjsKK30KKyNlbmRp
ZgorCiBzdGF0aWMgYm9vbCBpc1ZpZXdwb3J0Q29uc3RyYWluZWRGaXhlZE9yU3RpY2t5TGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAo
bGF5ZXIucmVuZGVyZXIoKS5pc1N0aWNreVBvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGlz
U3RpY2t5SW5BY2NlbGVyYXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydChsYXllcik7CisjZWxz
ZQogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmlzU3RpY2t5UG9zaXRpb25lZCgpKQogICAgICAg
ICByZXR1cm4gIWxheWVyLmVuY2xvc2luZ092ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxmKTsK
KyNlbmRpZgogCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpICE9
IEZpeGVkUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIyOTUsNiArMjQ0MSwy
MSBAQCBzdGF0aWMgYm9vbCBpc1ZpZXdwb3J0Q29uc3RyYWluZWRGaXhlZE9yU3RpY2t5TGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyOjpWaWV3cG9ydENv
bnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiogdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBv
c2l0ZWRSZWFzb24pIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChyZW5kZXJl
ci5pc1N0aWNreVBvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBw
b3NpdGlvbjpmaXhlZCBlbGVtZW50cyB0aGF0IGNyZWF0ZSB0aGVpciBvd24gc3RhY2tpbmcgY29u
dGV4dCAoZS5nLiBoYXZlIGFuIGV4cGxpY2l0IHotaW5kZXgsCisgICAgLy8gb3BhY2l0eSwgdHJh
bnNmb3JtKSBjYW4gZ2V0IHRoZWlyIG93biBjb21wb3NpdGVkIGxheWVyLiBBIHN0YWNraW5nIGNv
bnRleHQgaXMgcmVxdWlyZWQgb3RoZXJ3aXNlCisgICAgLy8gei1pbmRleCBhbmQgY2xpcHBpbmcg
d2lsbCBiZSBicm9rZW4uCisgICAgaWYgKCEocmVuZGVyZXIuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgcmVuZGVyZXIuc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fcmVuZGVyVmlldy5oYXNDdXN0b21GaXhl
ZFBvc2l0aW9uKHJlbmRlcmVyLCBSZW5kZXJWaWV3OjpDaGVja0NvbnRhaW5pbmdCbG9jaykpIHsK
KyAgICAgICAgbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCA9IHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZWxzZQogICAgIC8vIHBvc2l0aW9uOmZpeGVkIGVs
ZW1lbnRzIHRoYXQgY3JlYXRlIHRoZWlyIG93biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhdmUg
YW4gZXhwbGljaXQgei1pbmRleCwKICAgICAvLyBvcGFjaXR5LCB0cmFuc2Zvcm0pIGNhbiBnZXQg
dGhlaXIgb3duIGNvbXBvc2l0ZWQgbGF5ZXIuIEEgc3RhY2tpbmcgY29udGV4dCBpcyByZXF1aXJl
ZCBvdGhlcndpc2UKICAgICAvLyB6LWluZGV4IGFuZCBjbGlwcGluZyB3aWxsIGJlIGJyb2tlbi4K
QEAgLTIzMTcsNiArMjQ3OCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAKICAgICBpZiAo
aXNTdGlja3kpCiAgICAgICAgIHJldHVybiBoYXNDb29yZGluYXRlZFNjcm9sbGluZygpICYmIGlz
Vmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihsYXllcik7CisjZW5kaWYKIAog
ICAgIGF1dG8gY29udGFpbmVyID0gcmVuZGVyZXIuY29udGFpbmVyKCk7CiAgICAgLy8gSWYgdGhl
IHJlbmRlcmVyIGlzIG5vdCBob29rZWQgdXAgeWV0IHRoZW4gd2UgaGF2ZSB0byB3YWl0IHVudGls
IGl0IGlzLgpAQCAtMjM0Nyw3ICsyNTA5LDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAg
ICAgfQogCiAgICAgLy8gRml4ZWQgcG9zaXRpb24gZWxlbWVudHMgdGhhdCBhcmUgaW52aXNpYmxl
IGluIHRoZSBjdXJyZW50IHZpZXcgZG9uJ3QgZ2V0IHRoZWlyIG93biBsYXllci4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgTGF5b3V0UmVjdCB2aWV3Qm91bmRzID0gbV9yZW5kZXJWaWV3LmZyYW1l
VmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCk7CisjZWxzZQogICAgIExheW91
dFJlY3Qgdmlld0JvdW5kcyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0
cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7CisjZW5kaWYKICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzID0gbGF5ZXIuY2FsY3VsYXRlTGF5ZXJCb3VuZHMoJmxheWVyLCAwLCBSZW5kZXJMYXll
cjo6VXNlTG9jYWxDbGlwUmVjdElmUG9zc2libGUgfCBSZW5kZXJMYXllcjo6SW5jbHVkZUxheWVy
RmlsdGVyT3V0c2V0cyB8IFJlbmRlckxheWVyOjpVc2VGcmFnbWVudEJveGVzCiAgICAgICAgIHwg
UmVuZGVyTGF5ZXI6OkV4Y2x1ZGVIaWRkZW5EZXNjZW5kYW50cyB8IFJlbmRlckxheWVyOjpEb250
Q29uc3RyYWluRm9yTWFzayB8IFJlbmRlckxheWVyOjpJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRh
bnRzKTsKICAgICAvLyBNYXAgdG8gbV9yZW5kZXJWaWV3IHRvIGlnbm9yZSBwYWdlIHNjYWxlLgpA
QCAtMjQ4MSwyMCArMjY0Nyw1MSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNUcmFj
a2luZ1JlcGFpbnRzKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1RyYWNraW5nUmVwYWludHM7CiB9
CiAKKyNpZiBQTEFURk9STShJT1MpCitmbG9hdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om1pbmlt
dW1Eb2N1bWVudFNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJWaWV3LmZyYW1l
VmlldygpLmZyYW1lKCkubWluaW11bURvY3VtZW50U2NhbGUoKTsKK30KKworYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmFsbG93Q29tcG9zaXRpbmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKCkg
Y29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1l
KCkucGFnZSgpOworICAgIHJldHVybiAhcGFnZSB8fCBwYWdlLT5zZXR0aW5ncygpLmFsbG93Q29t
cG9zaXRpbmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKCk7Cit9CisjZW5kaWYKKwogZmxvYXQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIHJldHVybiBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpOworI2Vsc2UKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgp
OwogICAgIHJldHVybiBwYWdlID8gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSA6IDE7CisjZW5k
aWYKIH0KIAogZmxvYXQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYWdlU2NhbGVGYWN0b3IoKSBj
b25zdAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gbV9yZW5kZXJWaWV3LmZyYW1l
VmlldygpLmZyYW1lKCkuZG9jdW1lbnRTY2FsZSgpOworI2Vsc2UKICAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIHJldHVybiBwYWdlID8gcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkg
OiAxOworI2VuZGlmCiB9CiAKIGZsb2F0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29udGVudHNT
Y2FsZU11bHRpcGxpZXJGb3JOZXdUaWxlcyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgVGlsZUNhY2hlKiB0aWxlQ2FjaGUgPSBudWxscHRyOwor
ICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQorICAgICAgICB0aWxlQ2FjaGUgPSBw
YWdlLT5tYWluRnJhbWUoKS52aWV3KCkudGlsZUNhY2hlKCk7CisKKyAgICBpZiAoIXRpbGVDYWNo
ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gdGlsZUNhY2hlLT50aWxpbmdNb2Rl
KCkgPT0gVGlsZUNhY2hlOjpab29taW5nID8gMC4xMjUgOiAxOworI2VuZGlmCiAgICAgcmV0dXJu
IDE7CiB9CiAKQEAgLTI4NjksNiArMzA2NiwxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZW5zdXJlUm9vdExheWVyKCkKICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRTaXpl
KEZsb2F0U2l6ZShvdmVyZmxvd1JlY3QubWF4WCgpLCBvdmVyZmxvd1JlY3QubWF4WSgpKSk7CiAg
ICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gUGFnZSBzY2FsZSBpcyBhcHBsaWVkIGFib3Zl
IHRoaXMgb24gaU9TLCBzbyB3ZSdsbCBqdXN0IHNheSB0aGF0IG91ciByb290IGxheWVyIGFwcGxp
ZXMgaXQuCisgICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5m
cmFtZSgpOworICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOworICAgICAgICBpZiAo
cGFnZSAmJiAmcGFnZS0+bWFpbkZyYW1lKCkgPT0gJmZyYW1lKQorICAgICAgICAgICAgbV9yb290
Q29udGVudExheWVyLT5zZXRBcHBsaWVzUGFnZVNjYWxlKCk7CisjZW5kaWYKKwogICAgICAgICAv
LyBOZWVkIHRvIGNsaXAgdG8gcHJldmVudCB0cmFuc2Zvcm1lZCBjb250ZW50IHNob3dpbmcgb3V0
c2lkZSB0aGlzIGZyYW1lCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0Jv
dW5kcyh0cnVlKTsKICAgICB9CkBAIC0zMTQ5LDcgKzMzNTQsMTEgQEAgRml4ZWRQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlRml4ZWRWaWV3
cG9ydENvbnMKIHsKICAgICBBU1NFUlQobGF5ZXIuaXNDb21wb3NpdGVkKCkpOwogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCk7CisjZWxzZQogICAgIExh
eW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZpZXdwb3J0
Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKTsKKyNlbmRpZgogCiAgICAgRml4ZWRQb3Np
dGlvblZpZXdwb3J0Q29uc3RyYWludHMgY29uc3RyYWludHM7CiAKQEAgLTMxODUsMTAgKzMzOTQs
MTcgQEAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpjb21wdXRlRml4ZWRWaWV3cG9ydENvbnMKIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25z
dHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVTdGlja3lWaWV3cG9ydENvbnN0
cmFpbnRzKFJlbmRlckxheWVyJiBsYXllcikgY29uc3QKIHsKICAgICBBU1NFUlQobGF5ZXIuaXND
b21wb3NpdGVkKCkpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gV2Ugc2hvdWxkIG5ldmVy
IGdldCBoZXJlIGZvciBzdGlja2llcyBjb25zdHJhaW5lZCBieSBhbiBlbmNsb3NpbmcgY2xpcHBp
bmcgbGF5ZXIuCisgICAgLy8gRklYTUU6IFdoeSBkb2VzIHRoaXMgYXNzZXJ0aW9uIGZhaWwgb24g
aU9TPwogICAgIEFTU0VSVCghbGF5ZXIuZW5jbG9zaW5nT3ZlcmZsb3dDbGlwTGF5ZXIoRXhjbHVk
ZVNlbGYpKTsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIExheW91dFJlY3Qgdmll
d3BvcnRSZWN0ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmN1c3RvbUZpeGVkUG9zaXRpb25M
YXlvdXRSZWN0KCk7CisjZWxzZQogICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gbV9yZW5k
ZXJWaWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3Qo
KTsKKyNlbmRpZgogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyID0gdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChsYXllci5yZW5kZXJlcigpKTsKIApAQCAtMzIwMyw2ICszNDE5LDcg
QEAgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q28KICAgICByZXR1cm4gY29uc3RyYWludHM7CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIFJlbmRlckxheWVyQmFja2luZyogbmVhcmVzdFNj
cm9sbGluZ0Nvb3JkaW5hdG9yQW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAgIFJl
bmRlckxheWVyKiBhbmNlc3RvciA9IGxheWVyLnBhcmVudCgpOwpAQCAtMzIxNiw5ICszNDMzLDE0
IEBAIHN0YXRpYyBSZW5kZXJMYXllckJhY2tpbmcqIG5lYXJlc3RTY3JvbGxpbmdDb29yZGluYXRv
ckFuY2VzdG9yKFJlbmRlckxheWVyJiBsYXllCiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNl
bmRpZgogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0ZXJPclVwZGF0ZVZpZXdw
b3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCiB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIFVOVVNFRF9QQVJBTShsYXllcik7CisgICAgLy8gT24gaU9TLCB3ZSBiYXRjaC11
cGRhdGUgdmlld3BvcnQtY29uc3RyYWluZWQgbGF5ZXJzIGluIHVwZGF0ZUN1c3RvbUxheWVyc0Fm
dGVyRmx1c2goKS4KKyNlbHNlCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IHN0aWNr
eSBwb3NpdGlvbiBoZXJlISBBbmQgd2Ugc2hvdWxkIGV2ZW50dWFsbCBzdXBwb3J0IGZpeGVkL3N0
aWNreSBlbGVtZW50cwogICAgIC8vIHRoYXQgYXJlIGluc2lkZSBub24tbWFpbiBmcmFtZXMgb25j
ZSB3ZSBnZXQgbm9uLW1haW4gZnJhbWVzIHNjcm9sbGluZyB3aXRoIHRoZSBTY3JvbGxpbmdDb29y
ZGluYXRvci4KICAgICBpZiAobV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkp
CkBAIC0zMjUyLDE2ICszNDc0LDExMyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVn
aXN0ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllcgogICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUobm9k
ZUlELCBjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50cyhsYXllciksIGJhY2tpbmctPmdy
YXBoaWNzTGF5ZXIoKSk7CiAgICAgZWxzZQogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUobm9kZUlELCBjb21wdXRlRml4ZWRWaWV3cG9y
dENvbnN0cmFpbnRzKGxheWVyKSwgYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyNlbmRpZgog
fQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dW5yZWdpc3RlclZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCiB7CiAgICAgQVNTRVJUKG1fdmlld3BvcnRD
b25zdHJhaW5lZExheWVycy5jb250YWlucygmbGF5ZXIpKTsKLQorI2lmIFBMQVRGT1JNKElPUykK
KyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIC8vIE9uIGlPUywgd2UgYmF0Y2gtdXBkYXRl
IHZpZXdwb3J0LWNvbnN0cmFpbmVkIGxheWVycyBpbiB1cGRhdGVDdXN0b21MYXllcnNBZnRlckZs
dXNoKCkuCisjZWxzZQogICAgIGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXll
ci5iYWNraW5nKCkpCiAgICAgICAgIGJhY2tpbmctPmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGlu
YXRvcigpOworI2VuZGlmCiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVmIEhhc2hNYXA8
UGxhdGZvcm1MYXllciosIHN0ZDo6dW5pcXVlX3B0cjxWaWV3cG9ydENvbnN0cmFpbnRzPj4gTGF5
ZXJNYXA7Cit0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqPiBT
dGlja3lDb250YWluZXJNYXA7CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3Rl
ckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKQoreworICAgIC8vIE9ubHkgdGhlIG1haW4g
ZnJhbWUgc2hvdWxkIHJlZ2lzdGVyIGZpeGVkL3N0aWNreSBsYXllcnMuCisgICAgaWYgKG1fcmVu
ZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBMYXllck1hcCBsYXllck1hcDsKKyAgICBTdGlja3lDb250YWluZXJNYXAgc3RpY2t5Q29udGFp
bmVyTWFwOworCisgICAgZm9yIChhdXRvIGl0ID0gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJz
LmJlZ2luKCksIGVuZCA9IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlckxheWVyJiBsYXllciA9ICoqaXQ7CisgICAgICAg
IEFTU0VSVChsYXllci5pc0NvbXBvc2l0ZWQoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFZpZXdwb3J0Q29uc3RyYWludHM+IGNvbnN0cmFpbnRzOworICAgICAgICBpZiAobGF5ZXIucmVu
ZGVyZXIoKS5pc1N0aWNreVBvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgY29uc3RyYWludHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFZpZXdwb3J0Q29uc3RyYWludHM+KG5ldyBTdGlja3lQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMoY29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMobGF5
ZXIpKSk7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJMYXllciogZW5jbG9zaW5nVG91Y2hTY3Jv
bGxhYmxlTGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGlzU3RpY2t5SW5BY2NlbGVy
YXRlZFNjcm9sbGluZ0xheWVyT3JWaWV3cG9ydChsYXllciwgJmVuY2xvc2luZ1RvdWNoU2Nyb2xs
YWJsZUxheWVyKSAmJiBlbmNsb3NpbmdUb3VjaFNjcm9sbGFibGVMYXllcikgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChlbmNsb3NpbmdUb3VjaFNjcm9sbGFibGVMYXllci0+aXNDb21wb3NpdGVk
KCkpOworICAgICAgICAgICAgICAgIHN0aWNreUNvbnRhaW5lck1hcC5hZGQobGF5ZXIuYmFja2lu
ZygpLT5ncmFwaGljc0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgZW5jbG9zaW5nVG91Y2hTY3Jv
bGxhYmxlTGF5ZXItPmJhY2tpbmcoKS0+c2Nyb2xsaW5nTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb25zdHJhaW50
cyA9IHN0ZDo6bWFrZV91bmlxdWU8Vmlld3BvcnRDb25zdHJhaW50cz4obmV3IEZpeGVkUG9zaXRp
b25WaWV3cG9ydENvbnN0cmFpbnRzKGNvbXB1dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMobGF5
ZXIpKSk7CisKKyAgICAgICAgbGF5ZXJNYXAuYWRkKGxheWVyLmJhY2tpbmcoKS0+Z3JhcGhpY3NM
YXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbnN0cmFpbnRzLnJlbGVhc2UoKSk7CisgICAgfQor
ICAgIAorICAgIGlmIChDaHJvbWVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVudCgp
KQorICAgICAgICBjbGllbnQtPnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMobGF5ZXJN
YXAsIHN0aWNreUNvbnRhaW5lck1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygpCit7CisgICAgLy8gT25s
eSB0aGUgbWFpbiBmcmFtZSBzaG91bGQgcmVnaXN0ZXIgZml4ZWQvc3RpY2t5IGxheWVycy4KKyAg
ICBpZiAobV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChDaHJvbWVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNocm9tZUNsaWVu
dCgpKSB7CisgICAgICAgIExheWVyTWFwIGxheWVyTWFwOworICAgICAgICBTdGlja3lDb250YWlu
ZXJNYXAgc3RpY2t5Q29udGFpbmVyTWFwOworICAgICAgICBjbGllbnQtPnVwZGF0ZVZpZXdwb3J0
Q29uc3RyYWluZWRMYXllcnMobGF5ZXJNYXAsIHN0aWNreUNvbnRhaW5lck1hcCk7CisgICAgfQor
fQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXll
cnMoKQoreworICAgIENocm9tZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2hyb21lQ2xpZW50KCk7
CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byBpdCA9
IG1fc2Nyb2xsaW5nTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fc2Nyb2xsaW5nTGF5ZXJzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVu
dCgqKml0LCBjbGllbnQpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dW5yZWdp
c3RlckFsbFNjcm9sbGluZ0xheWVycygpCit7CisgICAgQ2hyb21lQ2xpZW50KiBjbGllbnQgPSB0
aGlzLT5jaHJvbWVDbGllbnQoKTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZm9yIChhdXRvIGl0ID0gbV9zY3JvbGxpbmdMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9z
Y3JvbGxpbmdMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJM
YXllciYgbGF5ZXIgPSAqKml0OworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcg
PSBsYXllci5iYWNraW5nKCk7CisgICAgICAgIEFTU0VSVChiYWNraW5nKTsKKyAgICAgICAgY2xp
ZW50LT5yZW1vdmVTY3JvbGxpbmdMYXllcihsYXllci5yZW5kZXJlcigpLmVsZW1lbnQoKSwgYmFj
a2luZy0+c2Nyb2xsaW5nTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBiYWNraW5nLT5zY3JvbGxp
bmdDb250ZW50c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgfQorfQorCisvLyBDYWxs
ZWQgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgY29udGVudHNMYXllciBjaGFuZ2VzLCBhbmQgd2hlbiB0
aGUgY29udGVudHNMYXllciBpcyByZXBsYWNlZCBieSBhbm90aGVyIGxheWVyLgordm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGluZ0xheWVyQWRkZWRPclVwZGF0ZWQoUmVuZGVyTGF5
ZXIqIGxheWVyKQoreworICAgIEFTU0VSVCghbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkuaW5QYWdl
Q2FjaGUoKSk7CisgICAgbV9zY3JvbGxpbmdMYXllcnMuYWRkKGxheWVyKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGluZ0xheWVyUmVtb3ZlZChSZW5kZXJMYXllciog
bGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250
ZW50c0xheWVyKQoreworICAgIG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZS5yZW1vdmUo
bGF5ZXIpOworICAgIG1fc2Nyb2xsaW5nTGF5ZXJzLnJlbW92ZShsYXllcik7CisKKyAgICBpZiAo
bV9yZW5kZXJWaWV3LmRvY3VtZW50KCkuaW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKENocm9tZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2hyb21lQ2xpZW50KCkpCisg
ICAgICAgIGNsaWVudC0+cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXItPnJlbmRlcmVyKCkuZWxl
bWVudCgpLCBzY3JvbGxpbmdMYXllciwgY29udGVudHNMYXllcik7Cit9CisjZW5kaWYKKwogdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURp
c3BsYXlJRCBkaXNwbGF5SUQpCiB7CiAgICAgaWYgKG1fbGF5ZXJVcGRhdGVyKQpAQCAtMzMyNyw2
ICszNjQ2LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzdGFydExheWVyRmx1c2hU
aW1lcklmTmVlZGVkKCkKICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QodGhyb3R0
bGVkTGF5ZXJGbHVzaERlbGF5KTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpzdGFydEluaXRpYWxMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpCit7
CisgICAgaWYgKCFtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47
CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxlZExheWVyRmx1c2hJ
bml0aWFsRGVsYXkpOworfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjps
YXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxSZW5kZXJMYXllckNvbXBvc2l0b3I+KikKIHsKICAg
ICBpZiAoIW1faGFzUGVuZGluZ0xheWVyRmx1c2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggOTM0OTNjMjU1MTA2ZmIyODhjZTM5
YTNlNmU1YjE0YWQyMGUyZDVmYy4uNjBhYTcxMDQ1YWI4NGNiNjE2YjVkZjkzMTNhZDhkYjljMmFl
ZTMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaApAQCAtMjczLDYgKzI3MywyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVWaWV3
cG9ydENvbnN0cmFpbnRTdGF0dXMoUmVuZGVyTGF5ZXImKTsKICAgICB2b2lkIHJlbW92ZVZpZXdw
b3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciYpOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIHZvaWQgcmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCk7CisgICAgdm9p
ZCB1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygpOworCisgICAgdm9pZCBz
Y3JvbGxpbmdMYXllckFkZGVkT3JVcGRhdGVkKFJlbmRlckxheWVyKik7CisgICAgdm9pZCBzY3Jv
bGxpbmdMYXllclJlbW92ZWQoUmVuZGVyTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdM
YXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllcik7CisKKyAgICB2b2lkIHJlZ2lzdGVy
QWxsU2Nyb2xsaW5nTGF5ZXJzKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5
ZXJzKCk7CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50IEltcGxlbWVudGF0aW9uCisgICAg
dmlydHVhbCBmbG9hdCBtaW5pbXVtRG9jdW1lbnRTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBhbGxvd0NvbXBvc2l0aW5nTGF5ZXJWaXN1YWxEZWdyYWRhdGlvbigpIGNv
bnN0IE9WRVJSSURFOworI2VuZGlmCiAgICAgdm9pZCByZXNldFRyYWNrZWRSZXBhaW50UmVjdHMo
KTsKICAgICB2b2lkIHNldFRyYWNrc1JlcGFpbnRzKGJvb2wpOwogCkBAIC0zODMsNiArMzk3LDE2
IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3Jv
bGxpbmcoY29uc3QgUmVuZGVyTGF5ZXImKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JJbmRpcmVjdFJlYXNvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiwgYm9vbCBoYXND
b21wb3NpdGVkRGVzY2VuZGFudHMsIGJvb2wgaGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRzLCBS
ZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiYpIGNvbnN0OwogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGluZyhSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUN1c3RvbUxheWVy
c0FmdGVyRmx1c2goKTsKKworICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50KCkgY29uc3Q7
CisKKyAgICB2b2lkIHN0YXJ0SW5pdGlhbExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7CisjZW5k
aWYKKwogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7
CiAgICAgdm9pZCByZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRl
ckxheWVyJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJl
bmRlckxheWVyJik7CkBAIC00NTAsNiArNDc0LDEwIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzTGF5ZXI+IG1fY2xpcExheWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0xheWVyPiBtX3Njcm9sbExheWVyOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhh
c2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9sbGluZ0xheWVyczsKKyAgICBIYXNoU2V0PFJlbmRl
ckxheWVyKj4gbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlOworI2VuZGlmCiAgICAgSGFz
aFNldDxSZW5kZXJMYXllcio+IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyczsKICAgICBIYXNo
U2V0PFJlbmRlckxheWVyKj4gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5m
by5oCmluZGV4IGQyNTdlMzljYmVkMTVlYzViMjVlMTIzYWUxNTQ5MGIwMTVlNWUyYjkuLmU5NWYz
YmY4YWU1MzgwZjM3MjlkODM0MTFiMGVjY2NiNjJhYmMyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKQEAgLTg5LDcgKzg5LDE2IEBA
IHByaXZhdGU6CiAKICAgICBzdGF0aWMgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIE93blB0
cjxGaWx0ZXJJbmZvPj4mIG1hcCgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKKyNpZiBkZWZpbmVkKF9faGFzX3dhcm5pbmcpICYmIF9faGFzX3dh
cm5pbmcoIi1XdW51c2VkLXByaXZhdGUtZmllbGQiKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XdW51c2VkLXByaXZhdGUtZmllbGQiCisjZW5kaWYKKyNlbmRpZgogICAgIFJl
bmRlckxheWVyJiBtX2xheWVyOworI2lmIFBMQVRGT1JNKElPUykKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwb3AKKyNlbmRpZgogCiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBt
X3JlbmRlcmVyOwogICAgIExheW91dFJlY3QgbV9kaXJ0eVNvdXJjZVJlY3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCAxMzRiYTlmODg0NjIyYWYw
M2ZmNjk3YmEwN2RhNTk2MDFkNjg1NDU4Li5iNjEyYjVhOTA4NTlhNzdiNjVlM2U4Njg3ZGRmY2Ex
ZWZjZjZjNGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAKQEAgLTQ4LDEwICs0OCwyOSBAQAogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxt
YXRoLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBzaXplX3Qgc2VsZWN0ZWRPcHRpb25D
b3VudChjb25zdCBSZW5kZXJNZW51TGlzdCYgcmVuZGVyTWVudUxpc3QpCit7CisgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHJlbmRlck1lbnVMaXN0LnNlbGVjdEVs
ZW1lbnQoKS5saXN0SXRlbXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZJdGVtcyA9IGxpc3RJdGVt
cy5zaXplKCk7CisKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKSB7CisgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSkt
PnNlbGVjdGVkKCkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKyAgICByZXR1cm4gY291
bnQ7Cit9CisjZW5kaWYKKwogUmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KEhUTUxTZWxl
Y3RFbGVtZW50JiBlbGVtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKICAgICA6IFJl
bmRlckZsZXhpYmxlQm94KGVsZW1lbnQsIHN0ZDo6bW92ZShzdHlsZSkpCiAgICAgLCBtX2J1dHRv
blRleHQobnVsbHB0cikKQEAgLTU5LDE1ICs3OCwxOSBAQCBSZW5kZXJNZW51TGlzdDo6UmVuZGVy
TWVudUxpc3QoSFRNTFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+
CiAgICAgLCBtX25lZWRzT3B0aW9uc1dpZHRoVXBkYXRlKHRydWUpCiAgICAgLCBtX29wdGlvbnNX
aWR0aCgwKQogICAgICwgbV9sYXN0QWN0aXZlSW5kZXgoLTEpCisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICAsIG1fcG9wdXBJc1Zpc2libGUoZmFsc2UpCisjZW5kaWYKIHsKIH0KIAogUmVuZGVyTWVu
dUxpc3Q6On5SZW5kZXJNZW51TGlzdCgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAo
bV9wb3B1cCkKICAgICAgICAgbV9wb3B1cC0+ZGlzY29ubmVjdENsaWVudCgpOwogICAgIG1fcG9w
dXAgPSAwOworI2VuZGlmCiB9CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6OmNhbkJlUmVwbGFjZWRX
aXRoSW5saW5lUnVuSW4oKSBjb25zdApAQCAtMTE4LDYgKzE0MSwyNiBAQCB2b2lkIFJlbmRlck1l
bnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKICAgICAgICAgaW5uZXJTdHlsZS5zZXRUZXh0QWxp
Z24oTEVGVCk7CiAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4
dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS0+ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBV
X1JJR0hUX1RPX0xFRlQpID8gUlRMIDogTFRSOwogICAgICAgICBpbm5lclN0eWxlLnNldERpcmVj
dGlvbihkaXJlY3Rpb24pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB9IGVsc2UgaWYgKGRvY3Vt
ZW50KCkucGFnZSgpLT5jaHJvbWUoKS5zZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0
aW5nRGlyZWN0aW9uKCkpIHsKKyAgICAgICAgaW5uZXJTdHlsZS5zZXRUZXh0QWxpZ24oc3R5bGUo
KS5kaXJlY3Rpb24oKSA9PSBMVFIgPyBMRUZUIDogUklHSFQpOworICAgICAgICBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpOworICAgICAg
ICBpZiAobXVsdGlwbGUoKSAmJiBzZWxlY3RlZE9wdGlvbkNvdW50KCp0aGlzKSAhPSAxKSB7Cisg
ICAgICAgICAgICBkaXJlY3Rpb24gPSAobV9idXR0b25UZXh0ICYmIG1fYnV0dG9uVGV4dC0+dGV4
dCgpLT5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBSVEwg
OiBMVFI7CisgICAgICAgICAgICB1bmljb2RlQmlkaSA9IFVCTm9ybWFsOworICAgICAgICB9IGVs
c2UgaWYgKG1fb3B0aW9uU3R5bGUpIHsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IG1fb3B0aW9u
U3R5bGUtPmRpcmVjdGlvbigpOworICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBtX29wdGlvblN0
eWxlLT51bmljb2RlQmlkaSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGlyZWN0
aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgIHVuaWNvZGVCaWRpID0gc3R5
bGUoKS51bmljb2RlQmlkaSgpOworICAgICAgICB9CisKKyAgICAgICAgaW5uZXJTdHlsZS5zZXRE
aXJlY3Rpb24oZGlyZWN0aW9uKTsKKyAgICAgICAgaW5uZXJTdHlsZS5zZXRVbmljb2RlQmlkaSh1
bmljb2RlQmlkaSk7CisgICAgfQorI2Vsc2UKICAgICB9IGVsc2UgaWYgKG1fb3B0aW9uU3R5bGUg
JiYgZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dz
TWVudVdyaXRpbmdEaXJlY3Rpb24oKSkgewogICAgICAgICBpZiAoKG1fb3B0aW9uU3R5bGUtPmRp
cmVjdGlvbigpICE9IGlubmVyU3R5bGUuZGlyZWN0aW9uKCkgfHwgbV9vcHRpb25TdHlsZS0+dW5p
Y29kZUJpZGkoKSAhPSBpbm5lclN0eWxlLnVuaWNvZGVCaWRpKCkpKQogICAgICAgICAgICAgbV9p
bm5lckJsb2NrLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTEyNSw2
ICsxNjgsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKICAgICAg
ICAgaW5uZXJTdHlsZS5zZXREaXJlY3Rpb24obV9vcHRpb25TdHlsZS0+ZGlyZWN0aW9uKCkpOwog
ICAgICAgICBpbm5lclN0eWxlLnNldFVuaWNvZGVCaWRpKG1fb3B0aW9uU3R5bGUtPnVuaWNvZGVC
aWRpKCkpOwogICAgIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiBIVE1MU2VsZWN0
RWxlbWVudCYgUmVuZGVyTWVudUxpc3Q6OnNlbGVjdEVsZW1lbnQoKSBjb25zdApAQCAtMjA3LDkg
KzI1MSwxMSBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAg
ICAgIG1fbmVlZHNPcHRpb25zV2lkdGhVcGRhdGUgPSBmYWxzZTsKICAgICB9CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmIChtX3BvcHVwSXNWaXNpYmxlKQogICAgICAgICBtX3BvcHVwLT51
cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIGVsc2UKKyNlbmRpZgogICAgICAgICBzZXRUZXh0RnJv
bU9wdGlvbihzZWxlY3RFbGVtZW50KCkuc2VsZWN0ZWRJbmRleCgpKTsKIH0KIApAQCAtMjI4LDYg
KzI3NCwxNCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpbnQgb3B0
aW9uSW5kZXgpCiAgICAgICAgIH0KICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYg
KG11bHRpcGxlKCkpIHsKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gc2VsZWN0ZWRPcHRpb25Db3Vu
dCgqdGhpcyk7CisgICAgICAgIGlmIChjb3VudCAhPSAxKQorICAgICAgICAgICAgdGV4dCA9IGh0
bWxTZWxlY3RNdWx0aXBsZUl0ZW1zKGNvdW50KTsKKyAgICB9CisjZW5kaWYKKwogICAgIHNldFRl
eHQodGV4dC5zdHJpcFdoaXRlU3BhY2UoKSk7CiAgICAgZGlkVXBkYXRlQWN0aXZlT3B0aW9uKG9w
dGlvbkluZGV4KTsKIH0KQEAgLTMwMiw2ICszNTYsMTMgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIHNldFByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitOT19SRVRVUk5fRFVF
X1RPX0FTU0VSVAordm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbHNlCiB2b2lkIFJlbmRlck1lbnVMaXN0OjpzaG93UG9w
dXAoKQogewogICAgIGlmIChtX3BvcHVwSXNWaXNpYmxlKQpAQCAtMzI1LDExICszODYsMTQgQEAg
dm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkKICAgICBhYnNCb3VuZHMuc2V0TG9jYXRp
b24ocm91bmRlZEludFBvaW50KGFic1RvcExlZnQpKTsKICAgICBtX3BvcHVwLT5zaG93KGFic0Jv
dW5kcywgJnZpZXcoKS5mcmFtZVZpZXcoKSwgc2VsZWN0RWxlbWVudCgpLm9wdGlvblRvTGlzdElu
ZGV4KHNlbGVjdEVsZW1lbnQoKS5zZWxlY3RlZEluZGV4KCkpKTsKIH0KKyNlbmRpZgogCiB2b2lk
IFJlbmRlck1lbnVMaXN0OjpoaWRlUG9wdXAoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
aWYgKG1fcG9wdXApCiAgICAgICAgIG1fcG9wdXAtPmhpZGUoKTsKKyNlbmRpZgogfQogCiB2b2lk
IFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZp
cmVPbkNoYW5nZSkKQEAgLTU2NCw3ICs2MjgsOSBAQCBpbnQgUmVuZGVyTWVudUxpc3Q6OnNlbGVj
dGVkSW5kZXgoKSBjb25zdAogCiB2b2lkIFJlbmRlck1lbnVMaXN0Ojpwb3B1cERpZEhpZGUoKQog
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgbV9wb3B1cElzVmlzaWJsZSA9IGZhbHNlOworI2Vu
ZGlmCiB9CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5o
CmluZGV4IDM2NzM0YTNlNWRiNDFiNDM1OWY0NTExMDU3N2IxYTcwMDJjZDMwOTUuLmIyYjE3NTI2
YjNiNWVjZWZkOWE2ODQ1MTJhYWNlMjBhOTc4ZjJmMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5oCkBAIC00OCw3ICs0OCw5IEBAIHB1YmxpYzoKIAogICAgIEhU
TUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50KCkgY29uc3Q7CiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIGJvb2wgcG9wdXBJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwSXNW
aXNpYmxlOyB9CisjZW5kaWYKICAgICB2b2lkIHNob3dQb3B1cCgpOwogICAgIHZvaWQgaGlkZVBv
cHVwKCk7CiAKQEAgLTE0NSw4ICsxNDcsMTAgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbV9vcHRpb25TdHlsZTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgUmVmUHRy
PFBvcHVwTWVudT4gbV9wb3B1cDsKICAgICBib29sIG1fcG9wdXBJc1Zpc2libGU7CisjZW5kaWYK
IH07CiAKIHRlbXBsYXRlPD4gaW5saW5lIGJvb2wgaXNSZW5kZXJlck9mVHlwZTxjb25zdCBSZW5k
ZXJNZW51TGlzdD4oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgeyByZXR1cm4gcmVuZGVy
ZXIuaXNNZW51TGlzdCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCmluZGV4IDQ5YzlmN2I4ZDE0OTFmMzZhN2UwNmNkMjQyMzUyYjgyN2M2ZDZmZWMuLjFkOTgx
ZWM3OGIxZDg4NDBmOTBkZWY2ZjQ1MzY4ODgwOGU5NjViMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC02Nyw2ICs2NywxMCBAQAogI2luY2x1ZGUgIlNW
R1JlbmRlclN1cHBvcnQuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
IlNlbGVjdGlvblJlY3QuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xMTI3LDYgKzExMzEsNTcgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OnBhaW50T3V0bGluZShQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UmVj
dCYgcGFpbnRSZWMKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXll
cigpOwogfQogCisvLyBGSVhNRTogTWFrZSB0aGlzIHJldHVybiBhbiB1bnNpZ25lZCBpbnRlZ2Vy
PworaW50IFJlbmRlck9iamVjdDo6Y29sdW1uTnVtYmVyRm9yT2Zmc2V0KGludCBvZmZzZXQpCit7
CisgICAgaW50IGNvbHVtbk51bWJlciA9IDA7CisgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdC
bG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOworICAgIFJlbmRlclZpZXcmIHZpZXcgPSBj
b250YWluaW5nQmxvY2stPnZpZXcoKTsKKyAgICBjb25zdCBQYWdpbmF0aW9uJiBwYWdpbmF0aW9u
ID0gdmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnBhZ2UoKS0+cGFnaW5hdGlvbigpOworICAgIGlm
IChwYWdpbmF0aW9uLm1vZGUgPT0gUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQpCisgICAgICAgIHJl
dHVybiBjb2x1bW5OdW1iZXI7CisKKyAgICBDb2x1bW5JbmZvKiBjb2x1bW5JbmZvID0gdmlldy5j
b2x1bW5JbmZvKCk7CisgICAgaWYgKGNvbHVtbkluZm8gJiYgY29sdW1uSW5mby0+cHJvZ3Jlc3Np
b25BeGlzKCkgPT0gQ29sdW1uSW5mbzo6QmxvY2tBeGlzKSB7CisgICAgICAgIGlmICghY29sdW1u
SW5mby0+cHJvZ3Jlc3Npb25Jc1JldmVyc2VkKCkpCisgICAgICAgICAgICBjb2x1bW5OdW1iZXIg
PSAocGFnaW5hdGlvbi5wYWdlTGVuZ3RoICsgcGFnaW5hdGlvbi5nYXAgLSBvZmZzZXQpIC8gKHBh
Z2luYXRpb24ucGFnZUxlbmd0aCArIHBhZ2luYXRpb24uZ2FwKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29sdW1uTnVtYmVyID0gb2Zmc2V0IC8gKHBhZ2luYXRpb24ucGFnZUxlbmd0aCAr
IHBhZ2luYXRpb24uZ2FwKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbHVtbk51bWJlcjsKK30KKwor
I2lmIFBMQVRGT1JNKElPUykKKy8vIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciBpbiBzcGlyaXQg
dG8gUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlLCBidXQgcmV0dXJucyByZWN0YW5n
bGVzCisvLyB3aGljaCBhcmUgYW5ub3RhdGVkIHdpdGggYWRkaXRpb25hbCBzdGF0ZSB3aGljaCBo
ZWxwcyB0aGUgaVBob25lIGRyYXcgc2VsZWN0aW9ucyBpbiBpdHMgdW5pcXVlIHdheS4KKy8vIE5v
IGFubm90YXRpb25zIGFyZSBhZGRlZCBpbiB0aGlzIGNsYXNzLgorLy8gRklYTUU6IE1vdmUgdG8g
UmVuZGVyVGV4dCB3aXRoIGFic29sdXRlUmVjdHNGb3JSYW5nZSgpPwordm9pZCBSZW5kZXJPYmpl
Y3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQoreworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOworCisgICAgaWYgKCFmaXJzdENoaWxkU2xvdygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZWJLaXQncyBwb3NpdGlvbiBmb3IgYW4gZW1wdHkgc3BhbiBhZnRlciBhIEJSIGlzIGluY29ycmVj
dCwgc28gd2UgY2FuJ3QgdHJ1c3QgCisgICAgICAgIC8vIHF1YWRzIGZvciB0aGVtLiBXZSBkb24n
dCBuZWVkIHNlbGVjdGlvbiByZWN0cyBmb3IgdGhvc2UgYW55d2F5IHRob3VnaCwgc2luY2UgdGhl
eSAKKyAgICAgICAgLy8gYXJlIGp1c3QgZW1wdHkgY29udGFpbmVycy4gU2VlIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTg+LgorICAgICAgICBSZW5kZXJPYmpl
Y3QqIHByZXZpb3VzID0gcHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSB0
aGlzLT5ub2RlKCk7CisgICAgICAgIGlmICghcHJldmlvdXMgfHwgIXByZXZpb3VzLT5pc0JSKCkg
fHwgIW5vZGUgfHwgIW5vZGUtPmlzQ29udGFpbmVyTm9kZSgpIHx8ICFpc0lubGluZSgpKSB7Cisg
ICAgICAgICAgICAvLyBGb3IgaW5saW5lIGVsZW1lbnRzIHdlIGRvbid0IHVzZSBhYnNvbHV0ZVF1
YWRzLCBzaW5jZSBpdCB0YWtlcyBpbnRvIGFjY291bnQgY29udGludWF0aW9ucyBhbmQgbGVhZHMg
dG8gd3JvbmcgcmVzdWx0cy4KKyAgICAgICAgICAgIGFic29sdXRlUXVhZHNGb3JTZWxlY3Rpb24o
cXVhZHMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gc3RhcnQ7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNoaWxkQXQoc3Rh
cnQpOyBjaGlsZCAmJiBvZmZzZXQgPCBlbmQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCks
ICsrb2Zmc2V0KQorICAgICAgICAgICAgY2hpbGQtPmFic29sdXRlUXVhZHMocXVhZHMpOworICAg
IH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mUXVhZHMgPSBxdWFkcy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUXVhZHM7ICsraSkKKyAgICAgICAgcmVjdHMu
YXBwZW5kKFNlbGVjdGlvblJlY3QocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSwgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgY29sdW1uTnVtYmVyRm9yT2Zmc2V0KHF1YWRzW2ldLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCkueCgpKSkpOworfQorI2VuZGlmCisKIEludFJlY3QgUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0
CiB7CiAgICAgaWYgKHVzZVRyYW5zZm9ybXMpIHsKQEAgLTIwOTMsNiArMjE0OCwxMSBAQCB2b2lk
IFJlbmRlck9iamVjdDo6ZGVzdHJveUFuZENsZWFudXBBbm9ueW1vdXNXcmFwcGVycygpCiAKIHZv
aWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYg
KGhhc0xheWVyKCkpCisgICAgICAgIHRvUmVuZGVyQm94TW9kZWxPYmplY3QodGhpcyktPmxheWVy
KCktPndpbGxCZURlc3Ryb3llZCgpOworI2VuZGlmCisKICAgICB3aWxsQmVEZXN0cm95ZWQoKTsK
ICAgICBkZWxldGUgdGhpczsKIH0KQEAgLTIxNjcsNiArMjIyNywxMSBAQCBib29sIFJlbmRlck9i
amVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VAogICAgIHJldHVybiBmYWxzZTsKIH0KIAoraW50IFJlbmRlck9iamVjdDo6aW5u
ZXJMaW5lSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3R5bGUoKS5jb21wdXRlZExpbmVI
ZWlnaHQoKTsKK30KKwogUmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0Q2FjaGVkUHNldWRv
U3R5bGUoUHNldWRvSWQgcHNldWRvLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7
CiAgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFzdHlsZSgpLmhh
c1BzZXVkb1N0eWxlKHBzZXVkbykpCkBAIC0yMzQzLDkgKzI0MDgsMTQgQEAgYm9vbCBSZW5kZXJP
YmplY3Q6OndpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopCiAgICAgaWYgKHN0eWxlKCkudmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIFBMQVRG
T1JNKElPUykKKyAgICBpZiAoZG9jdW1lbnQoKS5mcmFtZSgpLT50aW1lcnNQYXVzZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKICAgICAvLyBXZSB3aWxsIG5vdCByZW5kZXIgYSBu
ZXcgaW1hZ2Ugd2hlbiBBY3RpdmUgRE9NIGlzIHN1c3BlbmRlZAogICAgIGlmIChkb2N1bWVudCgp
LmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCiAKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYSB3aW5kb3cgKGkuZS4sIHdlJ3JlIGRv
cm1hbnQgZnJvbSBiZWluZyBwdXQgaW4gdGhlIGIvZiBjYWNoZSBvciBpbiBhIGJhY2tncm91bmQg
dGFiKQogICAgIC8vIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgZWl0aGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDliZjVjZmI4ODRkMTcwNDY0ZWNl
ZjdiZjI5MzUyMWJmZjA0ZjUwNjIuLjM1YWMxZjE1YWIyODVmMWIyYWVjMTczYmU0NzE0MDU5NzFi
ZTM5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTY1LDYg
KzY1LDkgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogI2lmIEVOQUJMRShTVkcpCiBjbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKK2Ns
YXNzIFNlbGVjdGlvblJlY3Q7CisjZW5kaWYKIAogc3RydWN0IFBhaW50SW5mbzsKIApAQCAtMTA4
LDcgKzExMSwxMSBAQCBlbnVtIE1hcENvb3JkaW5hdGVzTW9kZSB7CiB9OwogdHlwZWRlZiB1bnNp
Z25lZCBNYXBDb29yZGluYXRlc0ZsYWdzOwogCisjaWYgUExBVEZPUk0oSU9TKQorY29uc3QgaW50
IGNhcmV0V2lkdGggPSAyOyAvLyBUaGlzIHZhbHVlIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0
aCBVSUtpdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU4MDYwMT4uCisjZWxzZQogY29uc3QgaW50
IGNhcmV0V2lkdGggPSAxOworI2VuZGlmCiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
IHx8IEVOQUJMRShEUkFHR0FCTEVfUkVHSU9OKQogc3RydWN0IEFubm90YXRlZFJlZ2lvblZhbHVl
IHsKQEAgLTY1Myw3ICs2NjAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzTGF5ZXIoYm9v
bCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRIYXNMYXllcihiKTsgfQogICAgIHZvaWQgc2V0
SGFzVHJhbnNmb3JtKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0SGFzVHJhbnNmb3Jt
KGIpOyB9CiAgICAgdm9pZCBzZXRIYXNSZWZsZWN0aW9uKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRm
aWVsZHMuc2V0SGFzUmVmbGVjdGlvbihiKTsgfQotICAgIAorCisgICAgLy8gSG9vayBzbyB0aGF0
IFJlbmRlclRleHRDb250cm9sIGNhbiByZXR1cm4gdGhlIGxpbmUgaGVpZ2h0IG9mIGl0cyBpbm5l
ciByZW5kZXJlci4KKyAgICAvLyBGb3Igb3RoZXIgcmVuZGVyZXJzLCB0aGUgdmFsdWUgaXMgdGhl
IHNhbWUgYXMgbGluZUhlaWdodChmYWxzZSkuCisgICAgdmlydHVhbCBpbnQgaW5uZXJMaW5lSGVp
Z2h0KCkgY29uc3Q7CisKICAgICAvLyB1c2VkIGZvciBlbGVtZW50IHN0YXRlIHVwZGF0ZXMgdGhh
dCBjYW5ub3QgYmUgZml4ZWQgd2l0aCBhCiAgICAgLy8gcmVwYWludCBhbmQgZG8gbm90IG5lZWQg
YSByZWxheW91dAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpIHsgfQpAQCAt
NzA3LDcgKzcxOCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRTaXplIG9mZnNldEZy
b21Db250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKiBvZmZz
ZXREZXBlbmRzT25Qb2ludCA9IDApIGNvbnN0OwogICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZy
b20gYW4gb2JqZWN0IHVwIHRoZSBjb250YWluZXIoKSBjaGFpbi4gQXNzZXJ0cyB0aGF0IG5vbmUg
b2YgdGhlIGludGVybWVkaWF0ZSBvYmplY3RzIGhhdmUgdHJhbnNmb3Jtcy4KICAgICBMYXlvdXRT
aXplIG9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAg
ICAKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFNlbGVjdGlv
blJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwg
dW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkc0ZvclNlbGVjdGlvbihWZWN0b3I8Rmxv
YXRRdWFkPiYgcXVhZHMpIGNvbnN0IHsgYWJzb2x1dGVRdWFkcyhxdWFkcyk7IH0KKyNlbmRpZgor
CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3Qg
TGF5b3V0UG9pbnQmKSBjb25zdCB7IH0KIAogICAgIC8vIEZJWE1FOiB1c2VUcmFuc2Zvcm1zIHNo
b3VsZCBnbyBhd2F5IGV2ZW50dWFsbHkKQEAgLTkwNSw5ICs5MjEsMTAgQEAgcHVibGljOgogCiAg
ICAgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKICAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShH
cmFwaGljc0NvbnRleHQqLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIEJveFNpZGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IsIEVCb3JkZXJTdHlsZSwgaW50IGFk
amJ3MSwgaW50IGFkamJ3MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSk7Citwcm90ZWN0ZWQ6Cisg
ICAgaW50IGNvbHVtbk51bWJlckZvck9mZnNldChpbnQgb2Zmc2V0KTsKIAogICAgIHZvaWQgcGFp
bnRGb2N1c1JpbmcoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBSZW5kZXJTdHlsZSop
OwogICAgIHZvaWQgcGFpbnRPdXRsaW5lKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFJlY3QmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAppbmRleCA2YWZhNjU0
NTRhMjFmMTQyNDg1NTJhNmRjYTg3ZTUzY2RiODMwZjcyLi41NDhkNTlkMWQ5NzgwZTk0ZDFhZjEz
NGYxNGRlYzQ2NGE2MGE2YWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhci5oCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IG9wYWNpdHko
KTsKIAorICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBzZXVkb1N0eWxl
KFNjcm9sbGJhclBhcnQsIFBzZXVkb0lkKTsKKwogcHJpdmF0ZToKICAgICBSZW5kZXJTY3JvbGxi
YXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgRWxlbWVudCosIEZyYW1l
Kik7CiAKQEAgLTc1LDcgKzc3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YmFyUGFydHMoYm9vbCBkZXN0cm95ID0gZmFsc2UpOwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFydCwgUHNldWRvSWQpOwog
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyUGFydChTY3JvbGxiYXJQYXJ0LCBib29sIGRlc3Ryb3kg
PSBmYWxzZSk7CiAKICAgICAvLyBUaGlzIFNjcm9sbGJhcihXaWRnZXQpIG1heSBvdXRsaXZlIHRo
ZSBET00gd2hpY2ggY3JlYXRlZCBpdCAoZHVyaW5nIHRlYXIgZG93biksCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAppbmRleCA4MDRiNzViOGQ5ODYz
ODU2MmFhYWRkZGQ3ZDhhNzI4NjJkYTU1YjU3Li4xNGI0YzY1MWQ5ODRhZmNkYmRkMzgzMzM5YzU1
NWFiYzViOWY5NmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VhcmNoRmllbGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFy
Y2hGaWVsZC5jcHAKQEAgLTIxOCw2ICsyMTgsNyBAQCB2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjp2
YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCiAKIFN0cmlu
ZyBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAog
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgaW50IHNpemUgPSBsaXN0U2l6ZSgpOwogICAgIGlm
IChzaXplID09IDEpIHsKICAgICAgICAgQVNTRVJUKCFsaXN0SW5kZXgpOwpAQCAtMjI1LDEwICsy
MjYsMTMgQEAgU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0CiAgICAgfQogICAgIGlmICghbGlzdEluZGV4KQogICAgICAgICByZXR1cm4g
c2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpOworI2VuZGlmCiAgICAgaWYgKGl0ZW1Jc1Nl
cGFyYXRvcihsaXN0SW5kZXgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChzaXplIC0g
MSkpCiAgICAgICAgIHJldHVybiBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKTsK
KyNlbmRpZgogICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzW2xpc3RJbmRleCAtIDFdOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggMTcwZTMzZDNkNzVl
M2M3YzAwOWVmMzk3NWU3NmM1ZGFjYTRkYmU1NS4uZDEyYjc2MGZlMGIwOTI3NGNhZmZjYTk3M2Rm
ZDM3YzdmZmY1ODg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApA
QCAtNDcsNiArNDcsMTQgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCisjaWYgUExBVEZPUk0oSU9T
KQorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5j
bHVkZSAiTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdU
RjsKIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCkBAIC0zMDAsNiArMzA4LDgzIEBAIFZlY3Rv
cjxJbnRSZWN0PiBSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCwKICAgICByZXR1cm4gbV9saW5lQm94ZXMuYWJzb2x1dGVSZWN0c0Zv
clJhbmdlKCp0aGlzLCBzdGFydCwgZW5kLCB1c2VTZWxlY3Rpb25IZWlnaHQsIHdhc0ZpeGVkKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciBpbiBz
cGlyaXQgdG8gYWRkTGluZUJveFJlY3RzLCBidXQgcmV0dXJucyByZWN0YW5nbGVzCisvLyB3aGlj
aCBhcmUgYW5ub3RhdGVkIHdpdGggYWRkaXRpb25hbCBzdGF0ZSB3aGljaCBoZWxwcyB0aGUgaVBo
b25lIGRyYXcgc2VsZWN0aW9ucyBpbiBpdHMgdW5pcXVlIHdheS4KKy8vIEZ1bGwgYW5ub3RhdGlv
bnMgYXJlIGFkZGVkIGluIHRoaXMgY2xhc3MuCit2b2lkIFJlbmRlclRleHQ6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kKQoreworICAgIC8vIEZJWE1FOiBXb3JrIGFyb3VuZCBzaWduZWQvdW5zaWdu
ZWQgaXNzdWVzLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHVuc2lnbmVkcywgYW5kIGlzIG9mdGVuIHBh
c3NlZCBVSU5UX01BWAorICAgIC8vIHRvIG1lYW4gImFsbCB0aGUgd2F5IHRvIHRoZSBlbmQiLiBJ
bmxpbmVUZXh0Qm94IGNvb3JkaW5hdGVzIGFyZSB1bnNpZ25lZHMsIHNvIGNoYW5naW5nIHRoaXMg
CisgICAgLy8gZnVuY3Rpb24gdG8gdGFrZSBpbnRzIGNhdXNlcyB2YXJpb3VzIGludGVybmFsIG1p
c21hdGNoZXMuIEJ1dCBzZWxlY3Rpb25SZWN0IHRha2VzIGludHMsIGFuZCAKKyAgICAvLyBwYXNz
aW5nIFVJTlRfTUFYIHRvIGl0IGNhdXNlcyB0cm91YmxlLiBJZGVhbGx5IHdlJ2QgY2hhbmdlIHNl
bGVjdGlvblJlY3QgdG8gdGFrZSB1bnNpZ25lZHMsIGJ1dCAKKyAgICAvLyB0aGF0IHdvdWxkIGNh
dXNlIG1hbnkgcmlwcGxlIGVmZmVjdHMsIHNvIGZvciBub3cgd2UnbGwganVzdCBjbGFtcCBvdXIg
dW5zaWduZWQgcGFyYW1ldGVycyB0byBJTlRfTUFYLgorICAgIEFTU0VSVChlbmQgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIHx8IGVuZCA8PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKTsKKyAgICBBU1NFUlQoc3RhcnQgPD0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSk7CisgICAgc3RhcnQgPSBzdGQ6Om1pbihzdGFydCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKKyAgICBlbmQgPSBz
dGQ6Om1pbihlbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKSk7CisKKyAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJv
eCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBMYXlvdXRSZWN0
IHJlY3Q7CisgICAgICAgIC8vIE5vdGUsIGJveC0+ZW5kKCkgcmV0dXJucyB0aGUgaW5kZXggb2Yg
dGhlIGxhc3QgY2hhcmFjdGVyLCBub3QgdGhlIGluZGV4IHBhc3QgaXQuCisgICAgICAgIGlmIChz
dGFydCA8PSBib3gtPnN0YXJ0KCkgJiYgYm94LT5lbmQoKSA8IGVuZCkKKyAgICAgICAgICAgIHJl
Y3QgPSBib3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB1bnNpZ25lZCByZWFsRW5kID0gc3RkOjptaW4oYm94LT5lbmQoKSArIDEs
IGVuZCk7CisgICAgICAgICAgICByZWN0ID0gYm94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQs
IHJlYWxFbmQpOworICAgICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJveC0+cm9vdCgpLmlzRmly
c3RBZnRlclBhZ2VCcmVhaygpKSB7CisgICAgICAgICAgICBpZiAoYm94LT5pc0hvcml6b250YWwo
KSkKKyAgICAgICAgICAgICAgICByZWN0LnNoaWZ0WUVkZ2VUbyhib3gtPnJvb3QoKS5saW5lVG9w
V2l0aExlYWRpbmcoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVjdC5z
aGlmdFhFZGdlVG8oYm94LT5yb290KCkubGluZVRvcFdpdGhMZWFkaW5nKCkpOworICAgICAgICB9
CisKKyAgICAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICAvLyBNYXAgcmVjdCwgZXh0ZW5kZWQgbGVmdCB0byBsZWZ0T2Zm
c2V0LCBhbmQgcmlnaHQgdG8gcmlnaHRPZmZzZXQsIHRocm91Z2ggdHJhbnNmb3JtcyB0byBnZXQg
bWluWCBhbmQgbWF4WC4KKyAgICAgICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBjYWNo
ZSgqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T2Zmc2V0ID0gY29u
dGFpbmluZ0Jsb2NrLT5sb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCgqY29udGFpbmluZ0Jsb2Nr
LCBib3gtPmxvZ2ljYWxUb3AoKSwgY2FjaGUpOworICAgICAgICBMYXlvdXRVbml0IHJpZ2h0T2Zm
c2V0ID0gY29udGFpbmluZ0Jsb2NrLT5sb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoKmNvbnRh
aW5pbmdCbG9jaywgYm94LT5sb2dpY2FsVG9wKCksIGNhY2hlKTsKKyAgICAgICAgTGF5b3V0UmVj
dCBleHRlbnRzUmVjdCA9IHJlY3Q7CisgICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7
CisgICAgICAgICAgICBleHRlbnRzUmVjdC5zZXRYKGxlZnRPZmZzZXQpOworICAgICAgICAgICAg
ZXh0ZW50c1JlY3Quc2V0V2lkdGgocmlnaHRPZmZzZXQgLSBsZWZ0T2Zmc2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGV4dGVudHNSZWN0LnNldFkobGVmdE9mZnNldCk7CisgICAg
ICAgICAgICBleHRlbnRzUmVjdC5zZXRIZWlnaHQocmlnaHRPZmZzZXQgLSBsZWZ0T2Zmc2V0KTsK
KyAgICAgICAgfQorICAgICAgICBleHRlbnRzUmVjdCA9IGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KGV4dGVudHNSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgaWYg
KCFib3gtPmlzSG9yaXpvbnRhbCgpKQorICAgICAgICAgICAgZXh0ZW50c1JlY3QgPSBleHRlbnRz
UmVjdC50cmFuc3Bvc2VkUmVjdCgpOworICAgICAgICBib29sIGlzRmlyc3RPbkxpbmUgPSAhYm94
LT5wcmV2aW91c09uTGluZUV4aXN0cygpOworICAgICAgICBib29sIGlzTGFzdE9uTGluZSA9ICFi
b3gtPm5leHRPbkxpbmVFeGlzdHMoKTsKKyAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNS
dWJ5QmFzZSgpIHx8IGNvbnRhaW5pbmdCbG9jay0+aXNSdWJ5VGV4dCgpKQorICAgICAgICAgICAg
aXNMYXN0T25MaW5lID0gIWNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCktPmlubGlu
ZUJveFdyYXBwZXIoKS0+bmV4dE9uTGluZUV4aXN0cygpOworCisgICAgICAgIGJvb2wgY29udGFp
bnNTdGFydCA9IGJveC0+c3RhcnQoKSA8PSBzdGFydCAmJiBib3gtPmVuZCgpICsgMSA+PSBzdGFy
dDsKKyAgICAgICAgYm9vbCBjb250YWluc0VuZCA9IGJveC0+c3RhcnQoKSA8PSBlbmQgJiYgYm94
LT5lbmQoKSArIDEgPj0gZW5kOworCisgICAgICAgIGJvb2wgaXNGaXhlZCA9IGZhbHNlOworICAg
ICAgICBJbnRSZWN0IGFic1JlY3QgPSBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0
KSwgZmFsc2UsICZpc0ZpeGVkKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBib29s
IGJveElzSG9yaXpvbnRhbCA9ICFib3gtPmlzU1ZHSW5saW5lVGV4dEJveCgpID8gYm94LT5pc0hv
cml6b250YWwoKSA6ICFzdHlsZSgpLnN2Z1N0eWxlKCkuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7
CisgICAgICAgIC8vIElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGFuIGlubGluZSBlbGVtZW50
LCB3ZSB3YW50IHRvIGNoZWNrIHRoZSBpbmxpbmVCb3hXcmFwcGVyIG9yaWVudGF0aW9uCisgICAg
ICAgIC8vIHRvIGRldGVybWluZSB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGJsb2NrLiBJbiB0aGlz
IGNhc2Ugd2UgYWxzbyB1c2UgdGhlIGlubGluZUJveFdyYXBwZXIgdG8KKyAgICAgICAgLy8gZGV0
ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGlzIHRoZSBsYXN0IG9uIHRoZSBsaW5lLgorICAgICAgICBp
ZiAoY29udGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKKyAgICAgICAgICAgIGlm
IChjb250YWluaW5nQmxvY2stPmlubGluZUJveFdyYXBwZXIoKS0+aXNIb3Jpem9udGFsKCkgIT0g
Ym94SXNIb3Jpem9udGFsKSB7CisgICAgICAgICAgICAgICAgYm94SXNIb3Jpem9udGFsID0gY29u
dGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCktPmlzSG9yaXpvbnRhbCgpOworICAgICAg
ICAgICAgICAgIGlzTGFzdE9uTGluZSA9ICFjb250YWluaW5nQmxvY2stPmlubGluZUJveFdyYXBw
ZXIoKS0+bmV4dE9uTGluZUV4aXN0cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3QoYWJzUmVjdCwgYm94LT5kaXJlY3Rpb24o
KSwgZXh0ZW50c1JlY3QueCgpLCBleHRlbnRzUmVjdC5tYXhYKCksIGV4dGVudHNSZWN0Lm1heFko
KSwgMCwgYm94LT5pc0xpbmVCcmVhaygpLCBpc0ZpcnN0T25MaW5lLCBpc0xhc3RPbkxpbmUsIGNv
bnRhaW5zU3RhcnQsIGNvbnRhaW5zRW5kLCBib3hJc0hvcml6b250YWwsIGlzRml4ZWQsIGNvbnRh
aW5pbmdCbG9jay0+aXNSdWJ5VGV4dCgpLCBjb2x1bW5OdW1iZXJGb3JPZmZzZXQoYWJzUmVjdC54
KCkpKSk7CisgICAgfQorfQorI2VuZGlmCisKIFZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlclRleHQ6
OmFic29sdXRlUXVhZHNDbGlwcGVkVG9FbGxpcHNpcygpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8g
bGF5b3V0ID0gc2ltcGxlTGluZUxheW91dCgpKSB7CkBAIC05NTMsMTMgKzEwMzgsMjUgQEAgdm9p
ZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIGNh
c2UgVFNOT05FOgogICAgICAgICBicmVhazsKICAgICBjYXNlIFRTQ0lSQ0xFOgorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgc2VjdXJlVGV4dChibGFja0NpcmNsZSk7CisjZWxzZQogICAgICAg
ICBzZWN1cmVUZXh0KHdoaXRlQnVsbGV0KTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBj
YXNlIFRTRElTQzoKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHNlY3VyZVRleHQoYmxhY2tD
aXJjbGUpOworI2Vsc2UKICAgICAgICAgc2VjdXJlVGV4dChidWxsZXQpOworI2VuZGlmCiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVFNTUVVBUkU6CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICBzZWN1cmVUZXh0KGJsYWNrQ2lyY2xlKTsKKyNlbHNlCiAgICAgICAgIHNlY3VyZVRleHQoYmxh
Y2tTcXVhcmUpOworI2VuZGlmCiAgICAgfQogCiAgICAgQVNTRVJUKCFtX3RleHQuaXNOdWxsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggOWNhMzE2ZjVhYzdhYjQ5
Y2EzYWY2NWM5ODEzZTJhZWE0ZjA2ZWQwZi4uMGVhMmJmMTE3MTI0NGMwM2NhNjRhZTliNWM1OWE1
OWUzYThmYTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC02NCw2
ICs2NCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Qg
T1ZFUlJJREUgRklOQUw7CiAgICAgVmVjdG9yPEludFJlY3Q+IGFic29sdXRlUmVjdHNGb3JSYW5n
ZSh1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFY
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlLCBib29sKiB3YXNGaXhlZCA9IG51bGxw
dHIpIGNvbnN0OworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFNl
bGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKSBPVkVSUklERTsKKyNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3QgT1ZFUlJJREUgRklO
QUw7CiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVRdWFkc0ZvclJhbmdlKHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNl
U2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UsIGJvb2wqIHdhc0ZpeGVkID0gbnVsbHB0cikgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRl
eCA4ZmNiYWEyMzI2NWU4YmE4ZTFkMzRlN2U2ZGYwZDk2ZWVkYjRiNGZjLi45NmM1ZDIwMzJjYWY5
YTdkMmI3NTBlMThiMTFmYWM2Y2U3MDJiZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKQEAgLTkyLDYgKzkyLDMxIEBAIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFy
dFN0eWxlLCBSZW5kCiAgICAgYm9vbCBkaXNhYmxlZCA9IHVwZGF0ZVVzZXJNb2RpZnlQcm9wZXJ0
eSh0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCksIHRleHRCbG9ja1N0eWxlKTsKICAgICBpZiAoZGlz
YWJsZWQpCiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRDb2xvcih0aGVtZSgpLT5kaXNhYmxl
ZFRleHRDb2xvcih0ZXh0QmxvY2tTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpLCBzdGFydFN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICh0ZXh0QmxvY2tT
dHlsZS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FICYmICF0ZXh0QmxvY2tTdHlsZS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgICAgIC8vIFByZXNlcnZlIHRoZSBhbGlnbm1lbnQg
YnV0IGZvcmNlIHRoZSBkaXJlY3Rpb24gdG8gTFRSIHNvIHRoYXQgdGhlIGxhc3QtdHlwZWQsIHVu
bWFza2VkIGNoYXJhY3RlcgorICAgICAgICAvLyAod2hpY2ggY2Fubm90IGhhdmUgUlRMIGRpcmVj
dGlvbmFsaXR5KSB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlIG1hc2tlZCBjaGFyYWN0
ZXJzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzcwMjQzNzU+LgorICAgICAgICAKKyAgICAgICAgc3dp
dGNoICh0ZXh0QmxvY2tTdHlsZS0+dGV4dEFsaWduKCkpIHsKKyAgICAgICAgY2FzZSBUQVNUQVJU
OgorICAgICAgICBjYXNlIEpVU1RJRlk6CisgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0
VGV4dEFsaWduKFJJR0hUKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRBRU5E
OgorICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldFRleHRBbGlnbihMRUZUKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExFRlQ6CisgICAgICAgIGNhc2UgUklHSFQ6Cisg
ICAgICAgIGNhc2UgQ0VOVEVSOgorICAgICAgICBjYXNlIFdFQktJVF9MRUZUOgorICAgICAgICBj
YXNlIFdFQktJVF9SSUdIVDoKKyAgICAgICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0RGlyZWN0
aW9uKExUUik7CisgICAgfQorI2VuZGlmCiB9CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6dGV4
dEJsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0CkBAIC0zMDMsNiArMzI4LDIyIEBAIFJlbmRlck9i
amVjdCogUmVuZGVyVGV4dENvbnRyb2w6OmxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKGJvb2wg
cmVsYXlvdXRDaGlsZHJlCiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyUmVuZGVyZXI7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCitib29sIFJlbmRlclRleHRDb250cm9sOjpjYW5TY3JvbGwoKSBjb25z
dAoreworICAgIEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBy
ZXR1cm4gaW5uZXJUZXh0ICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKSAmJiBpbm5lclRleHQtPnJl
bmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpOworfQorCitpbnQgUmVuZGVyVGV4dENvbnRyb2w6
OmlubmVyTGluZUhlaWdodCgpIGNvbnN0Cit7CisgICAgRWxlbWVudCogaW5uZXJUZXh0ID0gaW5u
ZXJUZXh0RWxlbWVudCgpOworICAgIGlmIChpbm5lclRleHQgJiYgaW5uZXJUZXh0LT5yZW5kZXJl
cigpKQorICAgICAgICByZXR1cm4gaW5uZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbXB1
dGVkTGluZUhlaWdodCgpOworICAgIHJldHVybiBzdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgp
OworfQorI2VuZGlmCisKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2w6OmNhbkJlUmVwbGFjZWRXaXRo
SW5saW5lUnVuSW4oKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKaW5kZXggN2MzOGEyMWY4OWNmZTZlNTc3
NzdlZTRmZTBiYmU2MDViODM4NzdjNy4uOTM2M2MwMTYwODNkOGI4ODRmOTgwNTM4NTJkNzFiYmMz
ZmFiY2E0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmgKQEAgLTM3LDYgKzM3LDEzIEBAIHB1YmxpYzoKICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCYgdGV4dEZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0
YXJ0U3R5bGUpIGNvbnN0ID0gMDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGNhblNj
cm9sbCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgbGluZSBoZWlnaHQgb2YgdGhlIGlu
bmVyIHJlbmRlcmVyLgorICAgIHZpcnR1YWwgaW50IGlubmVyTGluZUhlaWdodCgpIGNvbnN0IE9W
RVJSSURFOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW5kZXJUZXh0Q29udHJvbChIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5jcHAKaW5kZXggMGViNTU0YTljNDRlYjk0NDMyZWJmZjA0NDZjZDI1ZDdmMDI4MzA4NC4uZmE4
ZDhhODAxYTQ1MTU3N2Y2NDAyMzVkM2U5ODJhMmZiNDE4YzQ1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCkBA
IC02MSwxMSArNjEsMTMgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFQKIAogZmxvYXQgUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmU6OmdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5
KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0
aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8g
b2YgQ291cmllciBOZXcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBJRSwgRmly
ZWZveCBhbmQgU2FmYXJpIFdpbi4KICAgICAvLyAxMjI5IGlzIHRoZSBhdmdDaGFyV2lkdGggdmFs
dWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIENvdXJpZXIgTmV3LgogICAgIGlmIChmYW1pbHkgPT0g
Ikx1Y2lkYSBHcmFuZGUiKQogICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoMTIyOSk7Cisj
ZW5kaWYKIAogICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKGZh
bWlseSk7CiB9CkBAIC05MSw2ICs5MywxMyBAQCBQYXNzUmVmPFJlbmRlclN0eWxlPiBSZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZTo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZAogICAg
IHRleHRCbG9ja1N0eWxlLmdldCgpLmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwogICAgIGFkanVz
dElubmVyVGV4dFN0eWxlKHN0YXJ0U3R5bGUsICZ0ZXh0QmxvY2tTdHlsZS5nZXQoKSk7CiAgICAg
dGV4dEJsb2NrU3R5bGUuZ2V0KCkuc2V0RGlzcGxheShCTE9DSyk7CisKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gV2UncmUgYWRkaW5nIHRocmVlIGV4dHJhIHBpeGVscyBvZiBwYWRkaW5nIHRv
IGxpbmUgdGV4dGFyZWFzIHVwIHdpdGggdGV4dCBmaWVsZHMuICAKKyAgICB0ZXh0QmxvY2tTdHls
ZS5nZXQoKS5zZXRQYWRkaW5nTGVmdChMZW5ndGgoMywgRml4ZWQpKTsKKyAgICB0ZXh0QmxvY2tT
dHlsZS5nZXQoKS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKDMsIEZpeGVkKSk7CisjZW5kaWYKKwog
ICAgIHJldHVybiB0ZXh0QmxvY2tTdHlsZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBmMTU1
MGM3YjIzNmZhMDhjYzFlY2M2OWRkM2M5N2ExZTRlMjdkNzM2Li4wM2QyY2U4MGRjNWM2ZGQyZWU2
YTY0YThlMzliNDhhMmVlZGUyZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtNDUsNiArNDUsMTAg
QEAKICNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlIDx3dGYv
U3RhY2tTdGF0cy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJlbmRlclRoZW1l
SU9TLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwpAQCAtMjExLDYgKzIxNSwxMiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bGF5b3V0KCkKICAgICAgICAgaWYgKG5lZWRlZExheW91dCkKICAgICAgICAgICAg
IGNvbXB1dGVPdmVyZmxvdyhjbGllbnRMb2dpY2FsQm90dG9tKCkpOwogICAgIH0KKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5
bGVzIGR1cmluZyBsYXlvdXQuIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPgorICAgIGlmIChpbnB1
dEVsZW1lbnQoKS5pc1NlYXJjaEZpZWxkKCkpCisgICAgICAgIFJlbmRlclRoZW1lSU9TOjphZGp1
c3RSb3VuZEJvcmRlclJhZGl1cyhzdHlsZSgpLCB0aGlzKTsKKyNlbmRpZgogfQogCiBib29sIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKQEAgLTI5OCwxMiArMzA4LDE0IEBAIExh
eW91dFJlY3QgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250cm9sQ2xpcFJlY3QoY29u
c3QgTGF5b3V0UG9pbnQmIGFkZGl0CiAKIGZsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Z2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCiB7CisjaWYgIVBMQVRGT1JN
KElPUykKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdl
IHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKICAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRo
ZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAog
ICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMg
ZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVl
IGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCiAgICAgaWYgKGZhbWlseSA9PSAi
THVjaWRhIEdyYW5kZSIpCiAgICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOworI2Vu
ZGlmCiAKICAgICByZXR1cm4gUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aChmYW1p
bHkpOwogfQpAQCAtMzE4LDYgKzMzMCw4IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50TG9naWNhbFdpZHRoKGZsb2F0IGNoYXJXCiAgICAg
TGF5b3V0VW5pdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihjZWlsZWRMYXlvdXRV
bml0KGNoYXJXaWR0aCAqIGZhY3RvcikpOwogCiAgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gMC5m
OworCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9
IHN0eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCk7CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5k
ZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAg
ICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4g
RmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKQEAgLTMyNyw2ICszNDEsNyBAQCBMYXlvdXRVbml0IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aChm
bG9hdCBjaGFyVwogICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsK
ICAgICBlbHNlIGlmIChoYXNWYWxpZEF2Z0NoYXJXaWR0aChmYW1pbHkpKQogICAgICAgICBtYXhD
aGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS0+bWF4Q2hhcldp
ZHRoKCkpOworI2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBl
eHRyYSB3aWR0aC4KICAgICBpZiAobWF4Q2hhcldpZHRoID4gMC5mKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCmluZGV4IGJlNjI3NmEzMGVh
NTljYjIyNDk4YzNmYTg0NjNjMDg3MDgzZTg1ZTUuLjk2OGEwODI5MDVkYTkzZTIzYmQ4OTJhYzk5
Y2Q1MjIzY2Q1NGQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dExpbmVCb3hlcy5jcHAKQEAgLTI3MSwxMiArMjcxLDE0IEBAIHN0YXRpYyBib29sIGxpbmVE
aXJlY3Rpb25Qb2ludEZpdHNJbkJveChpbnQgcG9pbnRMaW5lRGlyZWN0aW9uLCBjb25zdCBJbmxp
bmVUZXh0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHJpZ2h0
IGVkZ2Ugb2YgdGhpcyBib3gKICAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRpb24gZ29lcyBp
biB0aGlzIGJveAogICAgIGlmIChwb2ludExpbmVEaXJlY3Rpb24gPCBib3gubG9naWNhbFJpZ2h0
KCkpIHsKICAgICAgICAgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gPSBVcHN0cmVhbUlmUG9z
aXRpb25Jc05vdEF0U3RhcnQ7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyNlbmRpZgog
CiAgICAgLy8gYm94IGlzIGZpcnN0IG9uIGxpbmUKICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0
ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3QgdGV4dCBib3ggbGVmdCBlZGdlCkBAIC00MDYs
NiArNDA4LDEzIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0TGluZUJveGVzOjpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyCiAKICAgICAgICAgICAgIGlmIChw
b2ludEJsb2NrRGlyZWN0aW9uIDwgYm90dG9tIHx8IChibG9ja3NBcmVGbGlwcGVkICYmIHBvaW50
QmxvY2tEaXJlY3Rpb24gPT0gYm90dG9tKSkgewogICAgICAgICAgICAgICAgIFNob3VsZEFmZmlu
aXR5QmVEb3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtOworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgICAgICAgICBpZiAocG9pbnRMaW5lRGlyZWN0aW9uICE9IGJveC0+bG9n
aWNhbExlZnQoKSAmJiBwb2ludC54KCkgPCBib3gtPngoKSArIGJveC0+bG9naWNhbFdpZHRoKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGhhbGYgPSBib3gtPngoKSArIGJveC0+bG9naWNh
bFdpZHRoKCkgLyAyOworICAgICAgICAgICAgICAgICAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBw
b2ludC54KCkgPCBoYWxmID8gRE9XTlNUUkVBTSA6IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIuY3JlYXRlVmlzaWJsZVBvc2l0aW9u
KGJveC0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGlyZWN0aW9uKSArIGJveC0+c3RhcnQo
KSwgYWZmaW5pdHkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgICAg
IGlmIChsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3gocG9pbnRMaW5lRGlyZWN0aW9uLCAqYm94
LCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGluZ09mZnNldEZvckJpRGkoKmJveCwg
Ym94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pLCBzaG91bGRBZmZpbml0
eUJlRG93bnN0cmVhbSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAppbmRleCA2NDljNzE4YTUxNDk4NTE4OTkwODIzN2Y2YmFmMzBjOGMzODg2
NzcxLi41NDUzMDNmZWMxM2Y3ZDMwNTQ5NGU2MjdmM2IwMWQ5MzAzNmU0NDM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTM5Nyw2ICszOTcsMTAgQEAgYm9v
bCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGMKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFVOVVNFRF9QQVJBTShyKTsKKyAgICByZXR1cm4gby0+c3R5bGUoKS5hcHBlYXJhbmNlKCkg
IT0gTm9Db250cm9sUGFydDsKKyNlbHNlCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFp
bnQgbWV0aG9kIGJhc2VkIG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KICAgICBzd2l0Y2ggKG8t
PnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgpAQCAtNDQw
LDYgKzQ0NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAgICAgfQogCiAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCiB9CiAKIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50RGVjb3JhdGlvbnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCkBAIC00NTIsMTUgKzQ1NywyNiBAQCBib29sIFJlbmRlclRoZW1lOjpw
YWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbgogICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgogICAgICAgICByZXR1cm4gcGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOwogICAg
IGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVjb3Jh
dGlvbnMocmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6
Ci0gICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50VGV4dEFyZWFEZWNv
cmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNlIENoZWNrYm94UGFy
dDoKKyAgICAgICAgcmV0dXJuIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFp
bnRJbmZvLCByZWN0KTsKICAgICBjYXNlIFJhZGlvUGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50
UmFkaW9EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0KTsKICAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgorICAgICAgICByZXR1cm4gcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMo
cmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0Ogot
ICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIHJldHVybiBwYWludFNxdWFyZUJ1
dHRvbkRlY29yYXRpb25zKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOwogICAgIGNhc2UgQnV0
dG9uUGFydDoKKyAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMocmVuZGVyZXIs
IHBhaW50SW5mbywgcmVjdCk7CiAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgICAgIHJldHVy
biBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7Cisg
ICAgY2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQ6CisgICAgICAgIHJldHVybiBwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMo
cmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Cisg
ICAgICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50
SW5mbywgcmVjdCk7CiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgY2FzZSBNZXRlclBh
cnQ6CiAgICAgY2FzZSBSZWxldmFuY3lMZXZlbEluZGljYXRvclBhcnQ6CkBAIC00NzMsOSArNDg5
LDggQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW4KICNlbmRpZgogICAgIGNhc2UgU2xpZGVySG9y
aXpvbnRhbFBhcnQ6CiAgICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAgY2FzZSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQ6
Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICBj
YXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25Q
YXJ0OgogICAgIGNhc2UgU2VhcmNoRmllbGREZWNvcmF0aW9uUGFydDoKICAgICBjYXNlIFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuaAppbmRleCA4YTE0YTI1ODdjYjFkN2Y3OWM5NTdkODU2MTgyNWM4ODM1MmQ3YjBmLi4x
YmMwY2RiNjYzOThjZmNmZjYyMjg0ZGNmNjZlNzQzZmYyNGZhY2NkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBDU1NTdHlsZVNo
ZWV0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbGVMaXN0OwogY2xhc3MgSFRNTElucHV0RWxl
bWVudDsKK2NsYXNzIEljb247CiBjbGFzcyBQb3B1cE1lbnU7CiBjbGFzcyBSZW5kZXJNZW51TGlz
dDsKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKQEAgLTI3MSwxOCArMjcyLDMxIEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNl
bmRpZgogCisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRB
cmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3REZWNv
cmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICBlbnVtIEZpbGVVcGxvYWREZWNvcmF0aW9ucyB7IFNpbmdsZUZpbGUsIE11bHRpcGxlRmlsZXMg
fTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKFJlbmRl
ck9iamVjdCogLyppbnB1dFJlbmRlcmVyKi8sIFJlbmRlck9iamVjdCogLypidXR0b25SZW5kZXJl
ciovLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWRE
ZWNvcmF0aW9ucykgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAogI2lmIEVOQUJMRShNRVRFUl9FTEVN
RU5UKQogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRl
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0z
MDMsOSArMzE3LDExIEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmU1ZTQwZTU0
MzAwMGQyODZiY2ZmOTgyNzQwNGY3NjA5ZDgyMzYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lSU9TX2gKKyNk
ZWZpbmUgUmVuZGVyVGhlbWVJT1NfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgUmVuZGVy
U3R5bGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgCitjbGFzcyBSZW5kZXJUaGVtZUlP
UyA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0IE9WRVJSSURFOworCisgICAgc3RhdGljIHZv
aWQgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoUmVuZGVyU3R5bGUmLCBSZW5kZXJCb3gqKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0IE9WRVJSSURFOworCisgICAgc3RhdGljIENGU3RyaW5nUmVmIGNvbnRlbnRTaXplQ2F0
ZWdvcnkoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24o
Y29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
Y29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFs
dWUuCisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0
b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRp
b25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogYnV0dG9uUmVu
ZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJY29uKiwgRmlsZVVwbG9h
ZERlY29yYXRpb25zKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVs
ZERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25z
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
cmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIE9WRVJSSURFOworCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisg
ICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRo
ZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2
YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IE9WRVJSSURFOworICAgIC8v
IFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBi
YXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBhaW50
UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIE9WRVJSSURFOworI2VuZGlmCisKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKKyAg
ICB2aXJ0dWFsIEludFNpemUgc2xpZGVyVGlja1NpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QgT1ZFUlJJ
REU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gMHg0RDFBMUExQTsgfQorI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCopIGNvbnN0
IE9WRVJSSURFOworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFD
b250cm9sc1NjcmlwdCgpIE9WRVJSSURFOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgUmVuZGVy
VGhlbWVJT1MoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUlPUygpIHsgfQorCisgICAgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGFkZFJvdW5kZWRC
b3JkZXJDbGlwKFJlbmRlck9iamVjdCogYm94LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7Cit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gUmVu
ZGVyVGhlbWVJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU5M2E5YTNkMTk4NGNkNzQ5OGJiZWNhMmU0ZGNmYjIwN2VhM2Q0NzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW0KQEAgLTAsMCArMSwxMjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIkNTU1ByaW1p
dGl2ZVZhbHVlLmgiCisjaW1wb3J0ICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW1wb3J0ICJEYXRl
Q29tcG9uZW50cy5oIgorI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNp
bXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lVmll
dy5oIgorI2ltcG9ydCAiR3JhZGllbnQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSFRNTFNlbGVjdEVsZW1lbnQuaCIK
KyNpbXBvcnQgIkljb24uaCIKKyNpbXBvcnQgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2ltcG9ydCAi
UGFnZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1Mb2NhbGUuaCIKKyNpbXBvcnQgIlBhaW50SW5mby5o
IgorI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJSZW5kZXJTdHlsZS5oIgorI2lt
cG9ydCAiUmVuZGVyVGhlbWVJT1MuaCIKKyNpbXBvcnQgIlJlbmRlclZpZXcuaCIKKyNpbXBvcnQg
IlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJVc2VyQWdlbnRTY3JpcHRzLmgiCisjaW1wb3J0ICJV
c2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2lt
cG9ydCA8Q29yZUdyYXBoaWNzL0NHUGF0aFByaXZhdGUuaD4KKyNpbXBvcnQgPENvcmVUZXh0L0NU
Rm9udERlc2NyaXB0b3JQcml2Lmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW1w
b3J0ICJSZW5kZXJQcm9ncmVzcy5oIgorI2VuZGlmCisKK0BpbnRlcmZhY2UgVUlBcHBsaWNhdGlv
bgorKyAoVUlBcHBsaWNhdGlvbiAqKXNoYXJlZEFwcGxpY2F0aW9uOworQHByb3BlcnR5KG5vbmF0
b21pYyxjb3B5KSBOU1N0cmluZyAqcHJlZmVycmVkQ29udGVudFNpemVDYXRlZ29yeTsKK0BlbmQK
KworU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlB
cHBsaWNhdGlvbikKK1NPRlRfTElOS19DT05TVEFOVChVSUtpdCwgVUlDb250ZW50U2l6ZUNhdGVn
b3J5RGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUgVUlDb250ZW50
U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlTm90aWZpY2F0aW9uIGdldFVJQ29udGVudFNpemVDYXRlZ29y
eURpZENoYW5nZU5vdGlmaWNhdGlvbigpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
ZmxvYXQgQ29udHJvbEJhc2VIZWlnaHQgPSAyMDsKK2NvbnN0IGZsb2F0IENvbnRyb2xCYXNlRm9u
dFNpemUgPSAxMTsKKworc3RydWN0IElPU0dyYWRpZW50IHsKKyAgICBmbG9hdCogc3RhcnQ7IC8v
IHBvaW50cyB0byBzdGF0aWMgZmxvYXRbNF0KKyAgICBmbG9hdCogZW5kOyAvLyBwb2ludHMgdG8g
c3RhdGljIGZsb2F0WzRdCisgICAgSU9TR3JhZGllbnQoZmxvYXQgc3RhcnRbNF0sIGZsb2F0IGVu
ZFs0XSkKKyAgICAgICAgOiBzdGFydChzdGFydCkKKyAgICAgICAgLCBlbmQoZW5kKQorICAgIHsK
KyAgICB9Cit9OworCit0eXBlZGVmIElPU0dyYWRpZW50KiBJT1NHcmFkaWVudFJlZjsKKworZW51
bSBJbnRlcnBvbGF0aW9uCit7CisgICAgTGluZWFySW50ZXJwb2xhdGlvbiwKKyAgICBFeHBvbmVu
dGlhbEludGVycG9sYXRpb24KK307CisKK3N0YXRpYyB2b2lkIGludGVycG9sYXRlTGluZWFyR3Jh
ZGllbnQodm9pZCAqaW5mbywgY29uc3QgQ0dGbG9hdCAqaW5EYXRhLCBDR0Zsb2F0ICpvdXREYXRh
KQoreworICAgIElPU0dyYWRpZW50UmVmIGdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8SU9TR3JhZGll
bnRSZWY+KGluZm8pOworICAgIGZsb2F0IGFscGhhID0gaW5EYXRhWzBdOworICAgIGZsb2F0IGlu
dmVyc2UgPSAxLjBmIC0gYWxwaGE7CisKKyAgICBvdXREYXRhWzBdID0gaW52ZXJzZSAqIGdyYWRp
ZW50LT5zdGFydFswXSArIGFscGhhICogZ3JhZGllbnQtPmVuZFswXTsKKyAgICBvdXREYXRhWzFd
ID0gaW52ZXJzZSAqIGdyYWRpZW50LT5zdGFydFsxXSArIGFscGhhICogZ3JhZGllbnQtPmVuZFsx
XTsKKyAgICBvdXREYXRhWzJdID0gaW52ZXJzZSAqIGdyYWRpZW50LT5zdGFydFsyXSArIGFscGhh
ICogZ3JhZGllbnQtPmVuZFsyXTsKKyAgICBvdXREYXRhWzNdID0gaW52ZXJzZSAqIGdyYWRpZW50
LT5zdGFydFszXSArIGFscGhhICogZ3JhZGllbnQtPmVuZFszXTsKK30KKworc3RhdGljIHZvaWQg
aW50ZXJwb2xhdGVFeHBvbmVudGlhbEdyYWRpZW50KHZvaWQgKmluZm8sIGNvbnN0IENHRmxvYXQg
KmluRGF0YSwgQ0dGbG9hdCAqb3V0RGF0YSkKK3sKKyAgICBJT1NHcmFkaWVudFJlZiBncmFkaWVu
dCA9IHN0YXRpY19jYXN0PElPU0dyYWRpZW50UmVmPihpbmZvKTsKKyAgICBmbG9hdCBhID0gaW5E
YXRhWzBdOworICAgIGZvciAoaW50IHBhaW50SW5mbyA9IDA7IHBhaW50SW5mbyA8IDQ7ICsrcGFp
bnRJbmZvKSB7CisgICAgICAgIGZsb2F0IGVuZCA9IGxvZ2Yoc3RkOjptYXgoZ3JhZGllbnQtPmVu
ZFtwYWludEluZm9dLCAwLjAxZikpOworICAgICAgICBmbG9hdCBzdGFydCA9IGxvZ2Yoc3RkOjpt
YXgoZ3JhZGllbnQtPnN0YXJ0W3BhaW50SW5mb10sIDAuMDFmKSk7CisgICAgICAgIG91dERhdGFb
cGFpbnRJbmZvXSA9IGV4cGYoc3RhcnQgLSAoZW5kICsgc3RhcnQpICogYSk7CisgICAgfQorfQor
CitzdGF0aWMgQ0dGdW5jdGlvblJlZiBnZXRTaGFyZWRGdW5jdGlvblJlZihJT1NHcmFkaWVudFJl
ZiBncmFkaWVudCwgSW50ZXJwb2xhdGlvbiBpbnRlcnBvbGF0aW9uKQoreworICAgIENHRnVuY3Rp
b25SZWYgZnVuY3Rpb24gPSBudWxscHRyOworCisgICAgc3RhdGljIEhhc2hNYXA8SU9TR3JhZGll
bnRSZWYsIENHRnVuY3Rpb25SZWY+KiBsaW5lYXJGdW5jdGlvblJlZnM7CisgICAgc3RhdGljIEhh
c2hNYXA8SU9TR3JhZGllbnRSZWYsIENHRnVuY3Rpb25SZWY+KiBleHBvbmVudGlhbEZ1bmN0aW9u
UmVmczs7CisKKyAgICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBMaW5lYXJJbnRlcnBvbGF0aW9uKSB7
CisgICAgICAgIGlmICghbGluZWFyRnVuY3Rpb25SZWZzKQorICAgICAgICAgICAgbGluZWFyRnVu
Y3Rpb25SZWZzID0gbmV3IEhhc2hNYXA8SU9TR3JhZGllbnRSZWYsIENHRnVuY3Rpb25SZWY+Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IGxpbmVhckZ1bmN0aW9uUmVmcy0+
Z2V0KGdyYWRpZW50KTsKKyAgICAKKyAgICAgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICAg
ICAgc3RhdGljIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGxpbmVhckZ1bmN0aW9uQ2FsbGJh
Y2tzID0gIHsgMCwgaW50ZXJwb2xhdGVMaW5lYXJHcmFkaWVudCwgMCB9OworICAgICAgICAgICAg
bGluZWFyRnVuY3Rpb25SZWZzLT5zZXQoZ3JhZGllbnQsIGZ1bmN0aW9uID0gQ0dGdW5jdGlvbkNy
ZWF0ZShncmFkaWVudCwgMSwgbnVsbHB0ciwgNCwgbnVsbHB0ciwgJmxpbmVhckZ1bmN0aW9uQ2Fs
bGJhY2tzKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgfQor
CisgICAgaWYgKCFleHBvbmVudGlhbEZ1bmN0aW9uUmVmcykKKyAgICAgICAgZXhwb25lbnRpYWxG
dW5jdGlvblJlZnMgPSBuZXcgSGFzaE1hcDxJT1NHcmFkaWVudFJlZiwgQ0dGdW5jdGlvblJlZj47
CisgICAgZWxzZQorICAgICAgICBmdW5jdGlvbiA9IGV4cG9uZW50aWFsRnVuY3Rpb25SZWZzLT5n
ZXQoZ3JhZGllbnQpOworCisgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBzdGF0aWMgc3Ry
dWN0IENHRnVuY3Rpb25DYWxsYmFja3MgZXhwb25lbnRpYWxGdW5jdGlvbkNhbGxiYWNrcyA9ICB7
IDAsIGludGVycG9sYXRlRXhwb25lbnRpYWxHcmFkaWVudCwgMCB9OworICAgICAgICBleHBvbmVu
dGlhbEZ1bmN0aW9uUmVmcy0+c2V0KGdyYWRpZW50LCBmdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVh
dGUoZ3JhZGllbnQsIDEsIDAsIDQsIDAsICZleHBvbmVudGlhbEZ1bmN0aW9uQ2FsbGJhY2tzKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitzdGF0aWMgdm9pZCBkcmF3QXhp
YWxHcmFkaWVudChDR0NvbnRleHRSZWYgY29udGV4dCwgSU9TR3JhZGllbnRSZWYgZ3JhZGllbnQs
IGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHN0b3BQb2lu
dCwgSW50ZXJwb2xhdGlvbiBpbnRlcnBvbGF0aW9uKQoreworICAgIFJldGFpblB0cjxDR1NoYWRp
bmdSZWY+IHNoYWRpbmcgPSBhZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGRldmljZVJHQkNv
bG9yU3BhY2VSZWYoKSwgc3RhcnRQb2ludCwgc3RvcFBvaW50LCBnZXRTaGFyZWRGdW5jdGlvblJl
ZihncmFkaWVudCwgaW50ZXJwb2xhdGlvbiksIGZhbHNlLCBmYWxzZSkpOworICAgIENHQ29udGV4
dERyYXdTaGFkaW5nKGNvbnRleHQsIHNoYWRpbmcuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBk
cmF3UmFkaWFsR3JhZGllbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIElPU0dyYWRpZW50UmVmIGdy
YWRpZW50LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBmbG9hdCBzdGFydFJhZGl1cywg
Y29uc3QgRmxvYXRQb2ludCYgc3RvcFBvaW50LCBmbG9hdCBzdG9wUmFkaXVzLCBJbnRlcnBvbGF0
aW9uIGludGVycG9sYXRpb24pCit7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gc2hhZGlu
ZyA9IGFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlUmFkaWFsKGRldmljZVJHQkNvbG9yU3BhY2VSZWYo
KSwgc3RhcnRQb2ludCwgc3RhcnRSYWRpdXMsIHN0b3BQb2ludCwgc3RvcFJhZGl1cywgZ2V0U2hh
cmVkRnVuY3Rpb25SZWYoZ3JhZGllbnQsIGludGVycG9sYXRpb24pLCBmYWxzZSwgZmFsc2UpKTsK
KyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBzaGFkaW5nLmdldCgpKTsKK30KKwor
ZW51bSBJT1NHcmFkaWVudFR5cGUgeworICAgIEluc2V0R3JhZGllbnQsCisgICAgU2hpbmVHcmFk
aWVudCwKKyAgICBTaGFkZUdyYWRpZW50LAorICAgIENvbnZleEdyYWRpZW50LAorICAgIENvbmNh
dmVHcmFkaWVudCwKKyAgICBTbGlkZXJUcmFja0dyYWRpZW50LAorICAgIFJlYWRvbmx5U2xpZGVy
VHJhY2tHcmFkaWVudCwKKyAgICBTbGlkZXJUaHVtYk9wYXF1ZVByZXNzZWRHcmFkaWVudCwKK307
CisKK3N0YXRpYyBJT1NHcmFkaWVudFJlZiBnZXRJbnNldEdyYWRpZW50KCkKK3sKKyAgICBzdGF0
aWMgZmxvYXQgZW5kWzRdID0geyAwIC8gMjU1LjAsIDAgLyAyNTUuMCwgMCAvIDI1NS4wLCAwIH07
CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAwIC8gMjU1LjAsIDAgLyAyNTUuMCwgMCAv
IDI1NS4wLCAwLjIgfTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SU9TR3JhZGllbnQ+IGdy
YWRpZW50KHN0YXJ0LCBlbmQpOworICAgIHJldHVybiAmZ3JhZGllbnQuZ2V0KCk7Cit9CisKK3N0
YXRpYyBJT1NHcmFkaWVudFJlZiBnZXRTaGluZUdyYWRpZW50KCkKK3sKKyAgICBzdGF0aWMgZmxv
YXQgZW5kWzRdID0geyAxLCAxLCAxLCAwLjggfTsKKyAgICBzdGF0aWMgZmxvYXQgc3RhcnRbNF0g
PSB7IDEsIDEsIDEsIDAgfTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SU9TR3JhZGllbnQ+
IGdyYWRpZW50KHN0YXJ0LCBlbmQpOworICAgIHJldHVybiAmZ3JhZGllbnQuZ2V0KCk7Cit9CisK
K3N0YXRpYyBJT1NHcmFkaWVudFJlZiBnZXRTaGFkZUdyYWRpZW50KCkKK3sKKyAgICBzdGF0aWMg
ZmxvYXQgZW5kWzRdID0geyAxNzggLyAyNTUuMCwgMTc4IC8gMjU1LjAsIDE3OCAvIDI1NS4wLCAw
LjY1IH07CisgICAgc3RhdGljIGZsb2F0IHN0YXJ0WzRdID0geyAyNTIgLyAyNTUuMCwgMjUyIC8g
MjU1LjAsIDI1MiAvIDI1NS4wLCAwLjY1IH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElP
U0dyYWRpZW50PiBncmFkaWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50Lmdl
dCgpOworfQorCitzdGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0Q29udmV4R3JhZGllbnQoKQorewor
ICAgIHN0YXRpYyBmbG9hdCBlbmRbNF0gPSB7IDI1NSAvIDI1NS4wLCAyNTUgLyAyNTUuMCwgMjU1
IC8gMjU1LjAsIDAuMDUgfTsKKyAgICBzdGF0aWMgZmxvYXQgc3RhcnRbNF0gPSB7IDI1NSAvIDI1
NS4wLCAyNTUgLyAyNTUuMCwgMjU1IC8gMjU1LjAsIDAuNDMgfTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SU9TR3JhZGllbnQ+IGdyYWRpZW50KHN0YXJ0LCBlbmQpOworICAgIHJldHVybiAm
Z3JhZGllbnQuZ2V0KCk7Cit9CisKK3N0YXRpYyBJT1NHcmFkaWVudFJlZiBnZXRDb25jYXZlR3Jh
ZGllbnQoKQoreworICAgIHN0YXRpYyBmbG9hdCBlbmRbNF0gPSB7IDI1NSAvIDI1NS4wLCAyNTUg
LyAyNTUuMCwgMjU1IC8gMjU1LjAsIDAuNDYgfTsKKyAgICBzdGF0aWMgZmxvYXQgc3RhcnRbNF0g
PSB7IDI1NSAvIDI1NS4wLCAyNTUgLyAyNTUuMCwgMjU1IC8gMjU1LjAsIDAgfTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SU9TR3JhZGllbnQ+IGdyYWRpZW50KHN0YXJ0LCBlbmQpOworICAg
IHJldHVybiAmZ3JhZGllbnQuZ2V0KCk7Cit9CisKK3N0YXRpYyBJT1NHcmFkaWVudFJlZiBnZXRT
bGlkZXJUcmFja0dyYWRpZW50KCkKK3sKKyAgICBzdGF0aWMgZmxvYXQgZW5kWzRdID0geyAxMzIg
LyAyNTUuMCwgMTMyIC8gMjU1LjAsIDEzMiAvIDI1NS4wLCAxIH07CisgICAgc3RhdGljIGZsb2F0
IHN0YXJ0WzRdID0geyA3NCAvIDI1NS4wLCA3NyAvIDI1NS4wLCA4MCAvIDI1NS4wLCAxIH07Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBncmFkaWVudChzdGFydCwgZW5k
KTsKKyAgICByZXR1cm4gJmdyYWRpZW50LmdldCgpOworfQorCitzdGF0aWMgSU9TR3JhZGllbnRS
ZWYgZ2V0UmVhZG9ubHlTbGlkZXJUcmFja0dyYWRpZW50KCkKK3sKKyAgICBzdGF0aWMgZmxvYXQg
ZW5kWzRdID0geyAxMzIgLyAyNTUuMCwgMTMyIC8gMjU1LjAsIDEzMiAvIDI1NS4wLCAwLjQgfTsK
KyAgICBzdGF0aWMgZmxvYXQgc3RhcnRbNF0gPSB7IDc0IC8gMjU1LjAsIDc3IC8gMjU1LjAsIDgw
IC8yNTUuMCwgMC40IH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU0dyYWRpZW50PiBn
cmFkaWVudChzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gJmdyYWRpZW50LmdldCgpOworfQorCitz
dGF0aWMgSU9TR3JhZGllbnRSZWYgZ2V0U2xpZGVyVGh1bWJPcGFxdWVQcmVzc2VkR3JhZGllbnQo
KQoreworICAgIHN0YXRpYyBmbG9hdCBlbmRbNF0gPSB7IDE0NCAvIDI1NS4wLCAxNDQgLyAyNTUu
MCwgMTQ0IC8gMjU1LjAsIDF9OworICAgIHN0YXRpYyBmbG9hdCBzdGFydFs0XSA9IHsgNTUgLyAy
NTUuMCwgNTUgLyAyNTUuMCwgNTUgLyAyNTUuMCwgMSB9OworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxJT1NHcmFkaWVudD4gZ3JhZGllbnQoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuICZncmFk
aWVudC5nZXQoKTsKK30KKworc3RhdGljIElPU0dyYWRpZW50UmVmIGdyYWRpZW50V2l0aE5hbWUo
SU9TR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGdyYWRpZW50VHlw
ZSkgeworICAgIGNhc2UgSW5zZXRHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdldEluc2V0R3Jh
ZGllbnQoKTsKKyAgICBjYXNlIFNoaW5lR3JhZGllbnQ6CisgICAgICAgIHJldHVybiBnZXRTaGlu
ZUdyYWRpZW50KCk7CisgICAgY2FzZSBTaGFkZUdyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0
U2hhZGVHcmFkaWVudCgpOworICAgIGNhc2UgQ29udmV4R3JhZGllbnQ6CisgICAgICAgIHJldHVy
biBnZXRDb252ZXhHcmFkaWVudCgpOworICAgIGNhc2UgQ29uY2F2ZUdyYWRpZW50OgorICAgICAg
ICByZXR1cm4gZ2V0Q29uY2F2ZUdyYWRpZW50KCk7CisgICAgY2FzZSBTbGlkZXJUcmFja0dyYWRp
ZW50OgorICAgICAgICByZXR1cm4gZ2V0U2xpZGVyVHJhY2tHcmFkaWVudCgpOworICAgIGNhc2Ug
UmVhZG9ubHlTbGlkZXJUcmFja0dyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0UmVhZG9ubHlT
bGlkZXJUcmFja0dyYWRpZW50KCk7CisgICAgY2FzZSBTbGlkZXJUaHVtYk9wYXF1ZVByZXNzZWRH
cmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGdldFNsaWRlclRodW1iT3BhcXVlUHJlc3NlZEdyYWRp
ZW50KCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitzdGF0aWMgdm9pZCBjb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlKENGTm90
aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkKiwgQ0ZTdHJpbmdSZWYgbmFtZSwgY29uc3Qgdm9pZCos
IENGRGljdGlvbmFyeVJlZikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG5hbWUsIENGRXF1YWwobmFt
ZSwgVUlDb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlTm90aWZpY2F0aW9uKSk7CisgICAgV2Vi
VGhyZWFkUnVuKF57CisgICAgICAgIFBhZ2U6OnVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNBZnRlckds
b2JhbENoYW5nZUluRW52aXJvbm1lbnQoKTsKKyAgICB9KTsKK30KKworUmVuZGVyVGhlbWVJT1M6
OlJlbmRlclRoZW1lSU9TKCkKK3sKKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVy
KENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgdGhpcywgY29udGVudFNpemVD
YXRlZ29yeURpZENoYW5nZSwgVUlDb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlTm90aWZpY2F0
aW9uLCAwLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJbW1lZGlhdGVs
eSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBh
Z2UoUGFnZSopCit7CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSA9IFJlbmRl
clRoZW1lSU9TOjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIHJlbmRlclRoZW1lOwor
fQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUlPUzo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lSU9TKTsKK30KKworQ0ZTdHJpbmdS
ZWYgUmVuZGVyVGhlbWVJT1M6OmNvbnRlbnRTaXplQ2F0ZWdvcnkoKQoreworICAgIHJldHVybiAo
Q0ZTdHJpbmdSZWYpW1tnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBzaGFyZWRBcHBsaWNhdGlvbl0g
cHJlZmVycmVkQ29udGVudFNpemVDYXRlZ29yeV07Cit9CisKK2NvbnN0IENvbG9yJiBSZW5kZXJU
aGVtZUlPUzo6c2hhZG93Q29sb3IoKSBjb25zdAoreworICAgIHN0YXRpYyBDb2xvciBjb2xvcigw
LjBmLCAwLjBmLCAwLjBmLCAwLjdmKTsKKyAgICByZXR1cm4gY29sb3I7Cit9CisKK0Zsb2F0UmVj
dCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoUmVuZGVyT2JqZWN0KiBib3gs
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAv
LyBUbyBmaXggaW5uZXIgYm9yZGVyIGJsZWVkaW5nIGlzc3VlcyA8cmRhcjovL3Byb2JsZW0vOTgx
MjUwNz4sIHdlIGNsaXAgdG8gdGhlIG91dGVyIGJvcmRlciBhbmQgYXNzZXJ0IHRoYXQKKyAgICAv
LyB0aGUgYm9yZGVyIGlzIG9wYXF1ZSBvciB0cmFuc3BhcmVudCwgdW5sZXNzIHdlJ3JlIGNoZWNr
ZWQgYmVjYXVzZSBjaGVja2VkIHJhZGlvL2NoZWNrYm94ZXMgc2hvdyBubyBibGVlZGluZy4KKyAg
ICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgUm91bmRlZFJlY3QgYm9y
ZGVyID0gaXNDaGVja2VkKGJveCkgPyBzdHlsZS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IocmVj
dCkgOiBzdHlsZS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOworCisgICAgaWYgKGJvcmRlci5p
c1JvdW5kZWQoKSkKKyAgICAgICAgY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KGJvcmRlcik7Cisg
ICAgZWxzZQorICAgICAgICBjb250ZXh0LT5jbGlwKGJvcmRlci5yZWN0KCkpOworCisgICAgaWYg
KGlzQ2hlY2tlZChib3gpKSB7CisgICAgICAgIEFTU0VSVChzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcikuYWxwaGEoKSAlIDI1NSA9PSAwKTsKKyAg
ICAgICAgQVNTRVJUKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0Q29sb3IpLmFscGhhKCkgJSAyNTUgPT0gMCk7CisgICAgICAgIEFTU0VSVChzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcikuYWxwaGEo
KSAlIDI1NSA9PSAwKTsKKyAgICAgICAgQVNTRVJUKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikuYWxwaGEoKSAlIDI1NSA9PSAwKTsKKyAgICB9
CisKKyAgICByZXR1cm4gYm9yZGVyLnJlY3QoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6
YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4
KHN0eWxlLT5mb250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOworICAgIAorICAgIHN0eWxlLT5zZXRX
aWR0aChsZW5ndGgpOworICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKK30KKworc3RhdGlj
IENHUG9pbnQgc2hvcnRlbmVkKENHUG9pbnQgc3RhcnQsIENHUG9pbnQgZW5kLCBmbG9hdCB3aWR0
aCkKK3sKKyAgICBmbG9hdCB4ID0gZW5kLnggLSBzdGFydC54OworICAgIGZsb2F0IHkgPSBlbmQu
eSAtIHN0YXJ0Lnk7CisgICAgZmxvYXQgcmF0aW8gPSB3aWR0aCAvIHNxcnRmKHggKiB4ICsgeSAq
IHkpOworICAgIHJldHVybiBDR1BvaW50TWFrZShzdGFydC54ICsgeCAqIHJhdGlvLCBzdGFydC55
ICsgeSAqIHJhdGlvKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERl
Y29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBGbG9hdFJlY3QgY2xpcCA9IGFkZFJv
dW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworCisgICAgZmxv
YXQgd2lkdGggPSBjbGlwLndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2xpcC5oZWlnaHQo
KTsKKworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CisgICAgaWYgKGlzQ2hlY2tlZChib3gpKSB7CisgICAgICAgIGRyYXdB
eGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb25jYXZlR3JhZGllbnQp
LCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwgTGlu
ZWFySW50ZXJwb2xhdGlvbik7CisKKyAgICAgICAgc3RhdGljIGZsb2F0IHRoaWNrbmVzc1JhdGlv
ID0gMiAvIDE0LjA7CisgICAgICAgIHN0YXRpYyBDR1NpemUgc2l6ZSA9IHsgMTQuMGYsIDE0LjBm
IH07CisgICAgICAgIHN0YXRpYyBDR1BvaW50IHBhdGhSYXRpb3NbM10gPSB7CisgICAgICAgICAg
ICB7IDIuNWYgLyBzaXplLndpZHRoLCA3LjVmIC8gc2l6ZS5oZWlnaHQgfSwKKyAgICAgICAgICAg
IHsgNS41ZiAvIHNpemUud2lkdGgsIDEwLjVmIC8gc2l6ZS5oZWlnaHQgfSwKKyAgICAgICAgICAg
IHsgMTEuNWYgLyBzaXplLndpZHRoLCAyLjVmIC8gc2l6ZS5oZWlnaHQgfQorICAgICAgICB9Owor
CisgICAgICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0ZDo6bWluKHdpZHRoLCBoZWlnaHQpICogMi4w
ZiAqIHRoaWNrbmVzc1JhdGlvOworCisgICAgICAgIENHUG9pbnQgbGluZVszXSA9IHsKKyAgICAg
ICAgICAgIENHUG9pbnRNYWtlKGNsaXAueCgpICsgd2lkdGggKiBwYXRoUmF0aW9zWzBdLngsIGNs
aXAueSgpICsgaGVpZ2h0ICogcGF0aFJhdGlvc1swXS55KSwKKyAgICAgICAgICAgIENHUG9pbnRN
YWtlKGNsaXAueCgpICsgd2lkdGggKiBwYXRoUmF0aW9zWzFdLngsIGNsaXAueSgpICsgaGVpZ2h0
ICogcGF0aFJhdGlvc1sxXS55KSwKKyAgICAgICAgICAgIENHUG9pbnRNYWtlKGNsaXAueCgpICsg
d2lkdGggKiBwYXRoUmF0aW9zWzJdLngsIGNsaXAueSgpICsgaGVpZ2h0ICogcGF0aFJhdGlvc1sy
XS55KQorICAgICAgICB9OworICAgICAgICBDR1BvaW50IHNoYWRvd1szXSA9IHsKKyAgICAgICAg
ICAgIHNob3J0ZW5lZChsaW5lWzBdLCBsaW5lWzFdLCBsaW5lV2lkdGggLyA0LjBmKSwKKyAgICAg
ICAgICAgIGxpbmVbMV0sCisgICAgICAgICAgICBzaG9ydGVuZWQobGluZVsyXSwgbGluZVsxXSwg
bGluZVdpZHRoIC8gNC4wZikKKyAgICAgICAgfTsKKworICAgICAgICBwYWludEluZm8uY29udGV4
dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7CisgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKSwgQ29sb3JT
cGFjZURldmljZVJHQik7CisKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdKb2luZWRM
aW5lcyhzaGFkb3csIDMsIHRydWUsIGtDR0xpbmVDYXBTcXVhcmUpOworCisgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Moc3RkOjptaW4oY2xpcC53aWR0aCgpLCBj
bGlwLmhlaWdodCgpKSAqIHRoaWNrbmVzc1JhdGlvKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDI0MCAvIDI1NS4wZiks
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
Sm9pbmVkTGluZXMobGluZSwgMywgdHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRmxvYXRQ
b2ludCBib3R0b21DZW50ZXIoY2xpcC54KCkgKyBjbGlwLndpZHRoKCkgLyAyLjBmLCBjbGlwLm1h
eFkoKSk7CisgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRo
TmFtZShTaGFkZUdyYWRpZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgp
LCBjbGlwLm1heFkoKSksIExpbmVhckludGVycG9sYXRpb24pOworICAgICAgICBkcmF3UmFkaWFs
R3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoaW5lR3JhZGllbnQpLCBib3R0
b21DZW50ZXIsIDAsIGJvdHRvbUNlbnRlciwgc3FydGYoKHdpZHRoICogd2lkdGgpIC8gNC4wZiAr
IGhlaWdodCAqIGhlaWdodCksIEV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyVGhlbWVJT1M6OmJhc2VsaW5lUG9zaXRp
b24oY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICBpZiAoIXJlbmRl
cmVyLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IFJlbmRlckJveCog
Ym94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
UmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0
KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUg
Y2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBi
b3gtPmhlaWdodCgpIC0gNTsgLy8gVGhpcyBpcyB0byBtYXRjaCBBcHBLaXQuIFRoZXJlIG1pZ2h0
IGJlIGEgYmV0dGVyIHdheSB0byBjYWxjdWxhdGUgdGhpcyB0aG91Z2guCisgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKGJveCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJ
T1M6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRl
ckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKSBjb25zdAoreworICAgIC8vIEJ1dHRvbnMgYW5kIE1lbnVsaXN0QnV0
dG9ucyBhcmUgc3R5bGVkIGlmIHRoZXkgY29udGFpbiBhIGJhY2tncm91bmQgaW1hZ2UuCisgICAg
aWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQgfHwgc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiAhc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSB8
fCBzdHlsZS0+YmFja2dyb3VuZExheWVycygpLT5oYXNJbWFnZSgpOworCisgICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09
IFRleHRBcmVhUGFydCkKKyAgICAgICAgcmV0dXJuICpzdHlsZS0+YmFja2dyb3VuZExheWVycygp
ICE9IGJhY2tncm91bmQ7CisKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxl
ZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOworfQorCit2b2lk
IFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIGlmICghc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4o
Y2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCksIDEwKSkpLCBGaXhlZCk7CisgICAgc3R5
bGUtPnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOworICAg
IHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoSW50U2l6ZShsZW5ndGgudmFsdWUoKSAvIDIuMGYsIGxl
bmd0aC52YWx1ZSgpIC8gMi4wZikpOworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJh
ZGlvRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOworICAgIEZsb2F0UmVjdCBjbGlwID0g
YWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCwgcmVjdCk7CisKKyAg
ICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIGlmIChpc0NoZWNrZWQoYm94KSkgeworICAgICAgICBkcmF3QXhpYWxHcmFk
aWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoQ29uY2F2ZUdyYWRpZW50KSwgY2xpcC5s
b2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFkoKSksIExpbmVhckludGVy
cG9sYXRpb24pOworCisgICAgICAgIC8vIFRoZSBpbm5lciBjaXJjbGUgaXMgNiAvIDE0IHRoZSBz
aXplIG9mIHRoZSBzdXJyb3VuZGluZyBjaXJjbGUsIAorICAgICAgICAvLyBsZWF2aW5nIDggLyAx
NCBhcm91bmQgaXQuICg4IC8gMTQpIC8gMiA9IDIgLyA3LgorCisgICAgICAgIHN0YXRpYyBmbG9h
dCBJbm5lckludmVyc2VSYXRpbyA9IDIgLyA3LjA7CisKKyAgICAgICAgY2xpcC5pbmZsYXRlWCgt
Y2xpcC53aWR0aCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOworICAgICAgICBjbGlwLmluZmxhdGVZ
KC1jbGlwLmhlaWdodCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOworCisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5kcmF3UmFpc2VkRWxsaXBzZShjbGlwLCBDb2xvcjo6d2hpdGUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAg
ICAgIEZsb2F0U2l6ZSByYWRpdXMoY2xpcC53aWR0aCgpIC8gMi4wZiwgY2xpcC5oZWlnaHQoKSAv
IDIuMGYpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KGNsaXAs
IHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cyk7CisgICAgfQorICAgIEZsb2F0UG9pbnQg
Ym90dG9tQ2VudGVyKGNsaXAueCgpICsgY2xpcC53aWR0aCgpIC8gMi4wLCBjbGlwLm1heFkoKSk7
CisgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoYWRl
R3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4
WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CisgICAgZHJhd1JhZGlhbEdyYWRpZW50KGNnQ29u
dGV4dCwgZ3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgYm90dG9tQ2VudGVyLCAwLCBi
b3R0b21DZW50ZXIsIHN0ZDo6bWF4KGNsaXAud2lkdGgoKSwgY2xpcC5oZWlnaHQoKSksIEV4cG9u
ZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRl
clRoZW1lSU9TOjpwYWludFRleHRGaWVsZERlY29yYXRpb25zKFJlbmRlck9iamVjdCogYm94LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgSW50UG9pbnQgcG9pbnQocmVj
dC54KCkgKyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJU
b3BXaWR0aCgpKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
cGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXBSb3VuZGVk
UmVjdChzdHlsZS5nZXRSb3VuZGVkQm9yZGVyRm9yKHIpKTsKKworICAgIC8vIFRoaXMgZ3JhZGll
bnQgZ2V0cyBkcmF3biBibGFjayB3aGVuIHByaW50aW5nLgorICAgIC8vIERvIG5vdCBkcmF3IHRo
ZSBncmFkaWVudCBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIHRvcCBib3JkZXIuCisgICAgYm9vbCB0
b3BCb3JkZXJJc0ludmlzaWJsZSA9ICFzdHlsZS5oYXNCb3JkZXIoKSB8fCAhc3R5bGUuYm9yZGVy
VG9wV2lkdGgoKSB8fCBzdHlsZS5ib3JkZXJUb3BJc1RyYW5zcGFyZW50KCk7CisgICAgaWYgKCFi
b3gtPnZpZXcoKS5wcmludGluZygpICYmICF0b3BCb3JkZXJJc0ludmlzaWJsZSkKKyAgICAgICAg
ZHJhd0F4aWFsR3JhZGllbnQocGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBn
cmFkaWVudFdpdGhOYW1lKEluc2V0R3JhZGllbnQpLCBwb2ludCwgRmxvYXRQb2ludChDR1BvaW50
TWFrZShwb2ludC54KCksIHBvaW50LnkoKSArIDMuMGYpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRB
cmVhRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZp
ZWxkRGVjb3JhdGlvbnMocmVuZGVyZXIsIHBhaW50SW5mbywgcmVjdCk7Cit9CisKK2NvbnN0IGlu
dCBNZW51TGlzdE1pbkhlaWdodCA9IDE1OworCitjb25zdCBmbG9hdCBNZW51TGlzdEJhc2VIZWln
aHQgPSAyMDsKK2NvbnN0IGZsb2F0IE1lbnVMaXN0QmFzZUZvbnRTaXplID0gMTE7CisKK2NvbnN0
IGZsb2F0IE1lbnVMaXN0QXJyb3dXaWR0aCA9IDc7Citjb25zdCBmbG9hdCBNZW51TGlzdEFycm93
SGVpZ2h0ID0gNjsKK2NvbnN0IGZsb2F0IE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTk7
CisKK2ludCBSZW5kZXJUaGVtZUlPUzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gTWVudUxpc3RCdXR0b25QYWRkaW5nUmln
aHQgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoUmVuZGVyU3R5bGUmIHN0eWxl
LCBSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29u
dHJvbFBhcnQgfHwgc3R5bGUuYmFja2dyb3VuZExheWVycygpLT5oYXNJbWFnZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSByZWx5aW5nIG9uIGJv
cmRlciByYWRpdXMgZm9yIHRoZSBhcHBlYXJhbmNlIG9mIG91ciBjb250cm9scyA8cmRhcjovL3By
b2JsZW0vNzY3NTQ5Mz4KKyAgICBMZW5ndGggcmFkaXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50Pihz
dGQ6Om1pbihib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpIC8gMi4wKSwgRml4ZWQpOworICAg
IExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50Pihib3gtPmhlaWdodCgpIC8gMi4w
KSwgRml4ZWQpOworICAgIHN0eWxlLnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dp
ZHRoLCByYWRpdXNIZWlnaHQpKTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlDb21tb25CdXR0b25Q
YWRkaW5nVG9TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGVtU2l6ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC41
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7CisgICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCBkb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBkb2N1bWVu
dC5mcmFtZSgpLT5wYWdlWm9vbUZhY3RvcigpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JveChM
ZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0
U2VsZWN0TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICAvLyBFbmZvcmNlICJwYWRkaW5nOiAwIDAuNWVtIi4KKyAgICBhcHBseUNvbW1v
bkJ1dHRvblBhZGRpbmdUb1N0eWxlKHN0eWxlLCBlbGVtZW50KTsKKworICAgIC8vIEVuZm9yY2Ug
ImxpbmUtaGVpZ2h0OiBub3JtYWwiLgorICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0aCgt
MTAwLjAsIFBlcmNlbnQpKTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0
dG9uU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1l
bnQpCit7CisgICAgLy8gQWx3YXlzIEVuZm9yY2UgInBhZGRpbmc6IDAgMC41ZW0iLgorICAgIGFw
cGx5Q29tbW9uQnV0dG9uUGFkZGluZ1RvU3R5bGUoc3R5bGUsIGlucHV0RWxlbWVudCk7CisKKyAg
ICAvLyBEb24ndCBhZGp1c3QgdGhlIHN0eWxlIGlmIHRoZSB3aWR0aCBpcyBzcGVjaWZpZWQuCisg
ICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZS0+d2lkdGgoKS52YWx1ZSgp
ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgYWRqdXN0IGZvciB1bnN1cHBv
cnRlZCBkYXRlIGlucHV0IHR5cGVzLgorICAgIERhdGVDb21wb25lbnRzOjpUeXBlIGRhdGVUeXBl
ID0gaW5wdXRFbGVtZW50LT5kYXRlVHlwZSgpOworICAgIGlmIChkYXRlVHlwZSA9PSBEYXRlQ29t
cG9uZW50czo6SW52YWxpZCB8fCBkYXRlVHlwZSA9PSBEYXRlQ29tcG9uZW50czo6V2VlaykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRW5mb3JjZSB0aGUgd2lkdGggYW5kIHNldCB0aGUgYm94
LXNpemluZyB0byBjb250ZW50LWJveCB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcGFkZGluZy4K
KyAgICBGb250IGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGZsb2F0IG1heGltdW1XaWR0aCA9
IGlucHV0RWxlbWVudC0+bG9jYWxlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoZGF0ZVR5cGUs
IGZvbnQpOworICAgIGlmIChtYXhpbXVtV2lkdGggPiAwKSB7ICAgIAorICAgICAgICBpbnQgd2lk
dGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1heGltdW1XaWR0aCArIE1lbnVMaXN0QnV0dG9uUGFkZGlu
Z1JpZ2h0KTsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUtPnNldEJveFNpemluZyhDT05URU5UX0JPWCk7CisgICAgfQorfQorCit2
b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAg
Ly8gU2V0IHRoZSBtaW4taGVpZ2h0IHRvIGJlIGF0IGxlYXN0IE1lbnVMaXN0TWluSGVpZ2h0Lgor
ICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRNaW5I
ZWlnaHQoTGVuZ3RoKHN0ZDo6bWF4KE1lbnVMaXN0TWluSGVpZ2h0LCBzdGF0aWNfY2FzdDxpbnQ+
KE1lbnVMaXN0QmFzZUhlaWdodCAvIE1lbnVMaXN0QmFzZUZvbnRTaXplICogc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKSksIEZpeGVkKSk7CisgICAgZWxzZQorICAgICAg
ICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChNZW51TGlzdE1pbkhlaWdodCwgRml4ZWQpKTsK
KworICAgIC8vIEVuZm9yY2Ugc29tZSBkZWZhdWx0IHN0eWxlcyBpbiB0aGUgY2FzZSB0aGF0IHRo
aXMgaXMgYSBub24tbXVsdGlwbGUgPHNlbGVjdD4gZWxlbWVudCwKKyAgICAvLyBvciBhIGRhdGUg
aW5wdXQuIFdlIGRvbid0IGZvcmNlIHRoZXNlIGlmIHRoaXMgaXMganVzdCBhbiBlbGVtZW50IHdp
dGgKKyAgICAvLyAiLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdC1idXR0b24iLgorICAgIGlm
IChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSAmJiAhZWxlbWVudC0+
aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6bXVsdGlwbGVBdHRyKSkKKyAgICAgICAgYWRqdXN0U2Vs
ZWN0TGlzdEJ1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKKyAgICBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICAgICAgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bGUoc3R5bGUsIGlucHV0
RWxlbWVudCk7CisgICAgfQorfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0
QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9
IGJveC0+c3R5bGUoKTsKKyAgICBmbG9hdCBib3JkZXJUb3BXaWR0aCA9IHN0eWxlLmJvcmRlclRv
cFdpZHRoKCk7CisgICAgRmxvYXRSZWN0IGNsaXAocmVjdC54KCkgKyBzdHlsZS5ib3JkZXJMZWZ0
V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpLCByZWN0LndpZHRoKCkg
LSBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSAtIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJCb3R0b21X
aWR0aCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgZmxvYXQgYWRqdXN0TGVmdCA9IDAuNTsKKyAgICBm
bG9hdCBhZGp1c3RSaWdodCA9IDAuNTsKKyAgICBmbG9hdCBhZGp1c3RUb3AgPSAwLjU7CisgICAg
ZmxvYXQgYWRqdXN0Qm90dG9tID0gMC41OworCisgICAgLy8gUGFpbnQgbGVmdC1oYW5kIHRpdGxl
IHBvcnRpb24uCisgICAgeworICAgICAgICBGbG9hdFJlY3QgdGl0bGVDbGlwKGNsaXAueCgpIC0g
YWRqdXN0TGVmdCwgY2xpcC55KCkgLSBhZGp1c3RUb3AsIGNsaXAud2lkdGgoKSAtIE1lbnVMaXN0
QnV0dG9uUGFkZGluZ1JpZ2h0ICsgYWRqdXN0TGVmdCwgY2xpcC5oZWlnaHQoKSArIGFkanVzdFRv
cCArIGFkanVzdEJvdHRvbSk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmNsaXBSb3VuZGVkUmVjdCh0aXRsZUNsaXAsIAorICAgICAgICAgICAgRmxvYXRTaXplKHZh
bHVlRm9yTGVuZ3RoKHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpLCByZWN0Lndp
ZHRoKCkpIC0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlLmJv
cmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKSwgcmVjdC5oZWlnaHQoKSkgLSBzdHlsZS5ib3Jk
ZXJUb3BXaWR0aCgpKSwgRmxvYXRTaXplKDAsIDApLAorICAgICAgICAgICAgRmxvYXRTaXplKHZh
bHVlRm9yTGVuZ3RoKHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLCByZWN0
LndpZHRoKCkpIC0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxl
LmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKSwgcmVjdC5oZWlnaHQoKSkgLSBzdHls
ZS5ib3JkZXJCb3R0b21XaWR0aCgpKSwgRmxvYXRTaXplKDAsIDApKTsKKworICAgICAgICBkcmF3
QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoU2hhZGVHcmFkaWVudCks
IHRpdGxlQ2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KHRpdGxlQ2xpcC54KCksIHRpdGxlQ2xp
cC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZHJhd0F4aWFsR3JhZGll
bnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoaW5lR3JhZGllbnQpLCBGbG9hdFBvaW50
KHRpdGxlQ2xpcC54KCksIHRpdGxlQ2xpcC5tYXhZKCkpLCB0aXRsZUNsaXAubG9jYXRpb24oKSwg
RXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKTsKKyAgICB9CisKKyAgICAvLyBEcmF3IHRoZSBzZXBh
cmF0b3IgYWZ0ZXIgdGhlIGluaXRpYWwgcGFkZGluZy4KKworICAgIGZsb2F0IHNlcGFyYXRvciA9
IGNsaXAubWF4WCgpIC0gTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQ7CisKKyAgICBib3gtPmRy
YXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgc2VwYXJhdG9yIC0gYm9yZGVyVG9w
V2lkdGgsIGNsaXAueSgpLCBzZXBhcmF0b3IsIGNsaXAubWF4WSgpLCBCU1JpZ2h0LCBzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciksIHN0eWxlLmJv
cmRlclRvcFN0eWxlKCksIDAsIDApOworCisgICAgRmxvYXRSZWN0IGJ1dHRvbkNsaXAoc2VwYXJh
dG9yIC0gYWRqdXN0VG9wLCBjbGlwLnkoKSAtIGFkanVzdFRvcCwgTWVudUxpc3RCdXR0b25QYWRk
aW5nUmlnaHQgKyBhZGp1c3RUb3AgKyBhZGp1c3RSaWdodCwgY2xpcC5oZWlnaHQoKSArIGFkanVz
dFRvcCArIGFkanVzdEJvdHRvbSk7CisKKyAgICAvLyBOb3cgcGFpbnQgdGhlIGJ1dHRvbiBwb3J0
aW9uLgorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpwYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXBS
b3VuZGVkUmVjdChidXR0b25DbGlwLCAKKyAgICAgICAgICAgIEZsb2F0U2l6ZSgwLCAwKSwgRmxv
YXRTaXplKHZhbHVlRm9yTGVuZ3RoKHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgo
KSwgcmVjdC53aWR0aCgpKSAtIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgdmFsdWVGb3JMZW5n
dGgoc3R5bGUuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS5oZWlnaHQoKSwgcmVjdC5oZWlnaHQoKSkg
LSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSwKKyAgICAgICAgICAgIEZsb2F0U2l6ZSgwLCAwKSwg
RmxvYXRTaXplKHZhbHVlRm9yTGVuZ3RoKHN0eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCku
d2lkdGgoKSwgcmVjdC53aWR0aCgpKSAtIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgdmFsdWVG
b3JMZW5ndGgoc3R5bGUuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKSwgcmVjdC5o
ZWlnaHQoKSkgLSBzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCgpKSk7CisKKyAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmZpbGxSZWN0KGJ1dHRvbkNsaXAsIHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKSwgc3R5bGUuY29sb3JTcGFjZSgpKTsKKwor
ICAgICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoaXNG
b2N1c2VkKGJveCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKGJveCkgPyBDb25jYXZlR3JhZGllbnQg
OiBDb252ZXhHcmFkaWVudCksIGJ1dHRvbkNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChidXR0
b25DbGlwLngoKSwgYnV0dG9uQ2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAg
ICB9CisKKyAgICAvLyBQYWludCBJbmRpY2F0b3JzLgorCisgICAgaWYgKGJveC0+aXNNZW51TGlz
dCgpICYmIHRvSFRNTFNlbGVjdEVsZW1lbnQoYm94LT5ub2RlKCkpLT5tdWx0aXBsZSgpKSB7Cisg
ICAgICAgIGludCBzaXplID0gMjsKKyAgICAgICAgaW50IGNvdW50ID0gMzsKKyAgICAgICAgaW50
IHBhZGRpbmcgPSAzOworCisgICAgICAgIEludFJlY3QgZWxsaXBzZShidXR0b25DbGlwLngoKSAr
IChidXR0b25DbGlwLndpZHRoKCkgLSBjb3VudCAqIChzaXplICsgcGFkZGluZykgKyBwYWRkaW5n
KSAvIDIuMCwgYnV0dG9uQ2xpcC5tYXhZKCkgLSAxMC4wLCBzaXplLCBzaXplKTsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5kcmF3UmFpc2VkRWxsaXBzZShlbGxpcHNlLCBDb2xvcjo6d2hpdGUsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGVsbGlwc2UubW92ZShzaXplICsgcGFkZGluZywgMCk7
CisgICAgICAgIH0KKyAgICB9ICBlbHNlIHsKKyAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb29y
ZihidXR0b25DbGlwLngoKSArIGJ1dHRvbkNsaXAud2lkdGgoKSAvIDIuMCkgLSAwLjU7CisgICAg
ICAgIGZsb2F0IGNlbnRlclkgPSBmbG9vcmYoYnV0dG9uQ2xpcC55KCkgKyBidXR0b25DbGlwLmhl
aWdodCgpICogMy4wIC8gOC4wKTsKKworICAgICAgICBGbG9hdFBvaW50IGFycm93WzNdOworICAg
ICAgICBGbG9hdFBvaW50IHNoYWRvd1szXTsKKworICAgICAgICBhcnJvd1swXSA9IEZsb2F0UG9p
bnQoY2VudGVyWCAtIE1lbnVMaXN0QXJyb3dXaWR0aCAvIDIuMCwgY2VudGVyWSk7CisgICAgICAg
IGFycm93WzFdID0gRmxvYXRQb2ludChjZW50ZXJYICsgTWVudUxpc3RBcnJvd1dpZHRoIC8gMi4w
LCBjZW50ZXJZKTsKKyAgICAgICAgYXJyb3dbMl0gPSBGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRl
clkgKyBNZW51TGlzdEFycm93SGVpZ2h0KTsKKworICAgICAgICBzaGFkb3dbMF0gPSBGbG9hdFBv
aW50KGFycm93WzBdLngoKSwgYXJyb3dbMF0ueSgpICsgMS4wZik7CisgICAgICAgIHNoYWRvd1sx
XSA9IEZsb2F0UG9pbnQoYXJyb3dbMV0ueCgpLCBhcnJvd1sxXS55KCkgKyAxLjBmKTsKKyAgICAg
ICAgc2hhZG93WzJdID0gRmxvYXRQb2ludChhcnJvd1syXS54KCksIGFycm93WzJdLnkoKSArIDEu
MGYpOworCisgICAgICAgIGZsb2F0IG9wYWNpdHkgPSBpc1JlYWRPbmx5Q29udHJvbChib3gpID8g
MC4yIDogMC41OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29s
b3IoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKDAuMGYsIDAuMGYsIDAu
MGYsIG9wYWNpdHkpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHNoYWRvdywgdHJ1ZSk7CisKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6
OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdDb252ZXhQb2x5Z29uKDMsIGFycm93LCB0cnVlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2NvbnN0IENHRmxvYXQga1RyYWNrVGhpY2tuZXNzID0gNC4wOworY29uc3Qg
Q0dGbG9hdCBrVHJhY2tSYWRpdXMgPSBrVHJhY2tUaGlja25lc3MgLyAyLjA7Citjb25zdCBpbnQg
a0RlZmF1bHRTbGlkZXJUaHVtYlNpemUgPSAxNjsKKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CisKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIG5vdCBiZSByZWx5aW5nIG9uIGJvcmRlciByYWRpdXMgZm9yIHRoZSBh
cHBlYXJhbmNlIG9mIG91ciBjb250cm9scyA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4KKyAgICBM
ZW5ndGggcmFkaXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50PihrVHJhY2tSYWRpdXMpLCBGaXhlZCk7
CisgICAgTGVuZ3RoIHJhZGl1c0hlaWdodChzdGF0aWNfY2FzdDxpbnQ+KGtUcmFja1JhZGl1cyks
IEZpeGVkKTsKKyAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUocmFkaXVzV2lk
dGgsIHJhZGl1c0hlaWdodCkpOworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCogYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IHRyYWNrQ2xpcCA9IHJlY3Q7CisgICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworCisgICAgYm9vbCBpc0hvcml6b250
YWwgPSB0cnVlOworICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBT
bGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICAgICAgaXNIb3Jpem9udGFsID0gdHJ1ZTsKKyAgICAg
ICAgLy8gSW5zZXQgc2xpZ2h0bHkgc28gdGhlIHRodW1iIGNvdmVycyB0aGUgZWRnZS4KKyAgICAg
ICAgaWYgKHRyYWNrQ2xpcC53aWR0aCgpID4gMikgeworICAgICAgICAgICAgdHJhY2tDbGlwLnNl
dFdpZHRoKHRyYWNrQ2xpcC53aWR0aCgpIC0gMik7CisgICAgICAgICAgICB0cmFja0NsaXAuc2V0
WCh0cmFja0NsaXAueCgpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgdHJhY2tDbGlwLnNldEhl
aWdodChzdGF0aWNfY2FzdDxpbnQ+KGtUcmFja1RoaWNrbmVzcykpOworICAgICAgICB0cmFja0Ns
aXAuc2V0WShyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyIC0ga1RyYWNrVGhpY2tuZXNzIC8g
Mik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgorICAgICAg
ICBpc0hvcml6b250YWwgPSBmYWxzZTsKKyAgICAgICAgLy8gSW5zZXQgc2xpZ2h0bHkgc28gdGhl
IHRodW1iIGNvdmVycyB0aGUgZWRnZS4KKyAgICAgICAgaWYgKHRyYWNrQ2xpcC5oZWlnaHQoKSA+
IDIpIHsKKyAgICAgICAgICAgIHRyYWNrQ2xpcC5zZXRIZWlnaHQodHJhY2tDbGlwLmhlaWdodCgp
IC0gMik7CisgICAgICAgICAgICB0cmFja0NsaXAuc2V0WSh0cmFja0NsaXAueSgpICsgMSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdHJhY2tDbGlwLnNldFdpZHRoKGtUcmFja1RoaWNrbmVzcyk7Cisg
ICAgICAgIHRyYWNrQ2xpcC5zZXRYKHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMiAtIGtUcmFj
a1RoaWNrbmVzcyAvIDIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQodHJhY2tDbGlwLndpZHRo
KCkgPj0gMCk7CisgICAgQVNTRVJUKHRyYWNrQ2xpcC5oZWlnaHQoKSA+PSAwKTsKKyAgICBDR0Zs
b2F0IGNvcm5lcldpZHRoID0gdHJhY2tDbGlwLndpZHRoKCkgPCBrVHJhY2tUaGlja25lc3MgPyB0
cmFja0NsaXAud2lkdGgoKSAvIDIuMGYgOiBrVHJhY2tSYWRpdXM7CisgICAgQ0dGbG9hdCBjb3Ju
ZXJIZWlnaHQgPSB0cmFja0NsaXAuaGVpZ2h0KCkgPCBrVHJhY2tUaGlja25lc3MgPyB0cmFja0Ns
aXAuaGVpZ2h0KCkgLyAyLjBmIDoga1RyYWNrUmFkaXVzOworCisgICAgYm9vbCByZWFkb25seSA9
IGlzUmVhZE9ubHlDb250cm9sKGJveCk7CisKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkK
KyAgICBwYWludFNsaWRlclRpY2tzKGJveCwgcGFpbnRJbmZvLCB0cmFja0NsaXApOworI2VuZGlm
CisKKyAgICAvLyBEcmF3IHRoZSB0cmFjayBncmFkaWVudC4KKyAgICB7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOworCisg
ICAgICAgIEludFNpemUgY29ybmVyU2l6ZShjb3JuZXJXaWR0aCwgY29ybmVySGVpZ2h0KTsKKyAg
ICAgICAgUm91bmRlZFJlY3QgaW5uZXJCb3JkZXIodHJhY2tDbGlwLCBjb3JuZXJTaXplLCBjb3Ju
ZXJTaXplLCBjb3JuZXJTaXplLCBjb3JuZXJTaXplKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmNsaXBSb3VuZGVkUmVjdChpbm5lckJvcmRlcik7CisKKyAgICAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAg
ICAgSU9TR3JhZGllbnRSZWYgZ3JhZGllbnQgPSByZWFkb25seSA/IGdyYWRpZW50V2l0aE5hbWUo
UmVhZG9ubHlTbGlkZXJUcmFja0dyYWRpZW50KSA6IGdyYWRpZW50V2l0aE5hbWUoU2xpZGVyVHJh
Y2tHcmFkaWVudCk7CisgICAgICAgIGlmIChpc0hvcml6b250YWwpCisgICAgICAgICAgICBkcmF3
QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50LCB0cmFja0NsaXAubG9jYXRpb24oKSwg
RmxvYXRQb2ludCh0cmFja0NsaXAueCgpLCB0cmFja0NsaXAubWF4WSgpKSwgTGluZWFySW50ZXJw
b2xhdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNn
Q29udGV4dCwgZ3JhZGllbnQsIHRyYWNrQ2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KHRyYWNr
Q2xpcC5tYXhYKCksIHRyYWNrQ2xpcC55KCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICB9
CisKKyAgICAvLyBEcmF3IHRoZSB0cmFjayBib3JkZXIuCisgICAgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKworICAg
ICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgICAgICBpZiAocmVhZG9ubHkpCisgICAgICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMTc4LCAxNzgsIDE3OCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3IoNzYsIDc2LCA3NiksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
CisgICAgICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiByb3VuZGVkUmVjdFBhdGggPSBh
ZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisgICAgICAgIENHUGF0aEFkZFJvdW5kZWRS
ZWN0KHJvdW5kZWRSZWN0UGF0aC5nZXQoKSwgMCwgdHJhY2tDbGlwLCBjb3JuZXJXaWR0aCwgY29y
bmVySGVpZ2h0KTsKKyAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjZ0NvbnRleHQsIHJvdW5kZWRS
ZWN0UGF0aC5nZXQoKSk7CisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjZ0NvbnRleHQs
IDEpOworICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNnQ29udGV4dCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHN0eWxl
LT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEVuZm9yY2UgImJvcmRlci1yYWRpdXM6IDUwJSIuCisgICAgTGVuZ3RoIGxl
bmd0aCg1MC4wZiwgUGVyY2VudCk7CisgICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhMZW5ndGhT
aXplKGxlbmd0aCwgbGVuZ3RoKSk7CisKKyAgICAvLyBFbmZvcmNlIGEgMTZ4MTYgc2l6ZSBpZiBu
byBzaXplIGlzIHByb3ZpZGVkLgorICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpIHx8IHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAgICBMZW5ndGggbGVu
Z3RoID0gTGVuZ3RoKGtEZWZhdWx0U2xpZGVyVGh1bWJTaXplLCBGaXhlZCk7CisgICAgICAgIHN0
eWxlLT5zZXRXaWR0aChsZW5ndGgpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7
CisgICAgfQorfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjb3Jh
dGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOworICAgIEZsb2F0UmVjdCBjbGlwID0gYWRkUm91bmRl
ZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCwgcmVjdCk7CisKKyAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIEZsb2F0UG9pbnQgYm90dG9tQ2VudGVyKGNsaXAueCgpICsgY2xpcC53aWR0aCgpIC8gMi4w
ZiwgY2xpcC5tYXhZKCkpOworICAgIGlmIChpc1ByZXNzZWQoYm94KSkKKyAgICAgICAgZHJhd0F4
aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNsaWRlclRodW1iT3BhcXVl
UHJlc3NlZEdyYWRpZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBj
bGlwLm1heFkoKSksIExpbmVhckludGVycG9sYXRpb24pOworICAgIGVsc2UgeworICAgICAgICBk
cmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoU2hhZGVHcmFkaWVu
dCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBM
aW5lYXJJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZHJhd1JhZGlhbEdyYWRpZW50KGNnQ29udGV4
dCwgZ3JhZGllbnRXaXRoTmFtZShTaGluZUdyYWRpZW50KSwgYm90dG9tQ2VudGVyLCAwLjBmLCBi
b3R0b21DZW50ZXIsIHN0ZDo6bWF4KGNsaXAud2lkdGgoKSwgY2xpcC5oZWlnaHQoKSksIEV4cG9u
ZW50aWFsSW50ZXJwb2xhdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisj
aWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCitkb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAor
eworICAgIHJldHVybiAwOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvbkR1
cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAoreworICAgIHJldHVy
biAwOworfQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmICghcmVuZGVyZXItPmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBjb25zdCBpbnQgcHJvZ3Jlc3NCYXJIZWlnaHQgPSA5OworICAgIGNv
bnN0IGZsb2F0IHZlcnRpY2FsT2Zmc2V0ID0gKHJlY3QuaGVpZ2h0KCkgLSBwcm9ncmVzc0Jhckhl
aWdodCkgLyAyLjA7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKKyAgICBpZiAocmVjdC53aWR0aCgpIDwgMTAgfHwgcmVjdC5o
ZWlnaHQoKSA8IDkpIHsKKyAgICAgICAgLy8gVGhlIHJlY3QgaXMgc21hbGxlciB0aGFuIHRoZSBz
dGFuZGFyZCBwcm9ncmVzcyBiYXIuIFdlIGNsaXAgdG8gdGhlIGVsZW1lbnQncyByZWN0IHRvIGF2
b2lkCisgICAgICAgIC8vIGxlYWtpbmcgcGl4ZWxzIG91dHNpZGUgdGhlIHJlcGFpbnQgcmVjdC4K
KyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAocmVjdCk7CisgICAgfQorCisgICAgLy8g
MSkgRHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIHRyYWNrLgorICAgIC8vIDEuMSkgRHJhdyB0aGUgd2hp
dGUgYmFja2dyb3VuZCB3aXRoIGdyZXkgZ3JhZGllbnQgYm9yZGVyLgorICAgIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgIGNvbnRleHQtPnNldFN0cm9r
ZVRoaWNrbmVzcygwLjY4KTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9r
ZSk7CisKKyAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uID0gcmVjdC55
KCkgKyB2ZXJ0aWNhbE9mZnNldDsKKyAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9rZUdyYWRpZW50
ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmlu
Z1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlv
biArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMC4wLCBDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CisgICAgc3Ryb2tlR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjQ1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CisgICAgc3Ryb2tl
R3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjU1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7Cisg
ICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDB4OGQsIDB4OGQsIDB4
OGQpKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChzdHJva2VHcmFkaWVudC5yZWxl
YXNlKCkpOworCisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gcmVuZGVyZXItPnN0eWxlKCku
Y29sb3JTcGFjZSgpOworICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDI1NSwg
MjU1KSwgY29sb3JTcGFjZSk7CisKKyAgICBQYXRoIHRyYWNrUGF0aDsKKyAgICBGbG9hdFJlY3Qg
dHJhY2tSZWN0KHJlY3QueCgpICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
MjUsIHJlY3Qud2lkdGgoKSAtIDAuNSwgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAwLjUpOworICAgIEZs
b2F0U2l6ZSByb3VuZGVkQ29ybmVyUmFkaXVzKDUsIDQpOworICAgIHRyYWNrUGF0aC5hZGRSb3Vu
ZGVkUmVjdCh0cmFja1JlY3QsIHJvdW5kZWRDb3JuZXJSYWRpdXMpOworICAgIGNvbnRleHQtPmRy
YXdQYXRoKHRyYWNrUGF0aCk7CisKKyAgICAvLyAxLjIpIERyYXcgdG9wIGdyYWRpZW50IG9uIHRo
ZSB1cHBlciBoYWxmLiBJdCBpcyBzdXBwb3NlZCB0byBvdmVybGF5IHRoZSBmaWxsIGZyb20gdGhl
IGJhY2tncm91bmQgYW5kIGRhcmtlciB0aGUgc3Ryb2tlZCBwYXRoLgorICAgIEZsb2F0UmVjdCBi
b3JkZXIocmVjdC54KCksIHJlY3QueSgpICsgdmVydGljYWxPZmZzZXQsIHJlY3Qud2lkdGgoKSwg
cHJvZ3Jlc3NCYXJIZWlnaHQpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJl
Y3QoYm9yZGVyLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3Vu
ZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzKTsKKworICAgIGZsb2F0IHVwcGVy
R3JhZGllbnRIZWlnaHQgPSBwcm9ncmVzc0JhckhlaWdodCAvIDIuOworICAgIFJlZlB0cjxHcmFk
aWVudD4gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChyZWN0Lngo
KSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54KCks
IHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41KSk7
CisgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTMzLCAxMzMsIDEz
MywgMTg4KSk7CisgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMTgs
IDE4LCAxOCwgNTEpKTsKKyAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQodXBwZXJHcmFkaWVu
dC5yZWxlYXNlKCkpOworCisgICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QueCgp
LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCByZWN0LndpZHRoKCksIHVwcGVyR3JhZGllbnRI
ZWlnaHQpKTsKKworICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVy
UHJvZ3Jlc3MocmVuZGVyZXIpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0
ZSgpKSB7CisgICAgICAgIC8vIDIpIERyYXcgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgZG91
YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSwgMC4wLCAx
LjApOworICAgICAgICBkb3VibGUgYmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsK
KyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBiYXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUo
RmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZs
b2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0Jh
ckhlaWdodCAtIDEpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENv
bG9yKDE5NSwgMjE3LCAyNDcpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjQ1LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMC40OSwgQ29sb3IoMTE4LCAxNjQsIDIyOCkpOworICAgICAgICBiYXJHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKDAuNTEsIENvbG9yKDM2LCAxMTQsIDIxMCkpOworICAgICAgICBiYXJHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIENvbG9yKDM2LCAxMTQsIDIxMCkpOworICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0KSk7CisgICAg
ICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChiYXJHcmFkaWVudC5yZWxlYXNlKCkpOworCisg
ICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyU3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9h
dFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJI
ZWlnaHQgLSAxKSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4w
LCBDb2xvcig5NSwgMTA3LCAxODMpKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjUsIENvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7CisgICAgICAgIGJhclN0cm9r
ZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigzOCwgMTA0LCAxNjYpKTsKKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoYmFyU3Ryb2tlR3JhZGllbnQucmVsZWFzZSgp
KTsKKworICAgICAgICBQYXRoIGJhclBhdGg7CisgICAgICAgIGludCBsZWZ0ID0gcmVjdC54KCk7
CisgICAgICAgIGlmICghcmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQorICAgICAgICAgICAgbGVmdCA9IHJlY3QubWF4WCgpIC0gYmFyV2lkdGg7CisgICAg
ICAgIEZsb2F0UmVjdCBiYXJSZWN0KGxlZnQgKyAwLjI1LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0
aW9uICsgMC4yNSwgc3RkOjptYXgoYmFyV2lkdGggLSAwLjUsIDAuMCksIHByb2dyZXNzQmFySGVp
Z2h0IC0gMC41KTsKKyAgICAgICAgYmFyUGF0aC5hZGRSb3VuZGVkUmVjdChiYXJSZWN0LCByb3Vu
ZGVkQ29ybmVyUmFkaXVzKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd1BhdGgoYmFyUGF0aCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShQUk9HUkVTU19F
TEVNRU5UKQorCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCitJbnRTaXplIFJlbmRlclRo
ZW1lSU9TOjpzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS8xMjI3MTc5MT4gTUVSR0VCT1Q6IENvcnJlY3QgdmFsdWVzIGZvciBzbGlkZXIgdGlj
ayBvZiA8aW5wdXQgdHlwZT0icmFuZ2UiPiBlbGVtZW50cyAocmVxdWlyZXMgRU5BQkxFX0RBVEFM
SVNUX0VMRU1FTlQpCisgICAgcmV0dXJuIEludFNpemUoMSwgMyk7Cit9CisKK2ludCBSZW5kZXJU
aGVtZUlPUzo6c2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMjI3MTc5MT4gTUVSR0VCT1Q6IENvcnJlY3QgdmFs
dWVzIGZvciBzbGlkZXIgdGljayBvZiA8aW5wdXQgdHlwZT0icmFuZ2UiPiBlbGVtZW50cyAocmVx
dWlyZXMgRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpCisgICAgcmV0dXJuIC05OworfQorI2VuZGlm
CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29u
c3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShzZWxlY3Rvciwg
c3R5bGUsIGVsZW1lbnQpOworCisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXN0eWxlLT5oYXNCb3JkZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVu
ZGVyQm94KiBib3ggPSBlbGVtZW50LT5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gpOwor
fQorCitib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoUmVu
ZGVyT2JqZWN0KiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25zKGJveCwgcGFp
bnRJbmZvLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoc2Vs
ZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKKworICAgIC8vIFNldCBwYWRkaW5nOiAwIDEuMGVtOyBv
biBidXR0b25zLgorICAgIC8vIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50IG9u
bHkgbmVlZHMgdGhlIGVsZW1lbnQncyBzdHlsZSB0byBjYWxjdWxhdGUgZW0gbGVuZ3Rocy4KKyAg
ICAvLyBTaW5jZSB0aGUgZWxlbWVudCBtaWdodCBub3QgYmUgaW4gYSBkb2N1bWVudCwganVzdCBw
YXNzIG51bGxwdHIgZm9yIHRoZSByb290IGVsZW1lbnQgc3R5bGUuCisgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBlbVNpemUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEuMCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOworICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1
dGVMZW5ndGg8aW50PihzdHlsZSwgbnVsbHB0cik7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3go
TGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJveCogYm94ID0gZWxlbWVudC0+cmVuZGVyQm94
KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIGFkanVzdFJvdW5kQm9y
ZGVyUmFkaXVzKCpzdHlsZSwgYm94KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRC
dXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50UHVzaEJ1dHRv
bkRlY29yYXRpb25zKGJveCwgcGFpbnRJbmZvLCByZWN0KTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBib3gsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOworICAg
IEZsb2F0UmVjdCBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29u
dGV4dCwgcmVjdCk7CisKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChib3gtPnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc0RhcmsoKSkKKyAgICAg
ICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbnZleEdy
YWRpZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFko
KSksIExpbmVhckludGVycG9sYXRpb24pOworICAgIGVsc2UgeworICAgICAgICBkcmF3QXhpYWxH
cmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoU2hhZGVHcmFkaWVudCksIGNsaXAu
bG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRl
cnBvbGF0aW9uKTsKKyAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVu
dFdpdGhOYW1lKFNoaW5lR3JhZGllbnQpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFko
KSksIGNsaXAubG9jYXRpb24oKSwgRXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhl
aWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAg
IGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBVc2UgdGhlIGZvbnQgc2l6
ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KKyAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KENvbnRyb2xCYXNlSGVpZ2h0
IC8gQ29udHJvbEJhc2VGb250U2l6ZSAqIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRl
ZFNpemUoKSksIEZpeGVkKSk7Cit9CisKK2NvbnN0IGludCBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tl
V2lkdGggPSAxOworY29uc3QgaW50IGtUaHVtYm5haWxCb3JkZXJDb3JuZXJSYWRpdXMgPSAxOwor
Y29uc3QgaW50IGtWaXNpYmxlQmFja2dyb3VuZEltYWdlV2lkdGggPSAxOworY29uc3QgaW50IGtN
dWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUgPSAyOworCitib29sIFJlbmRlclRoZW1lSU9TOjpw
YWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0
KiBidXR0b25SZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QsIEljb24qIGljb24sIEZpbGVVcGxvYWREZWNvcmF0aW9ucyBmaWxlVXBsb2FkRGVj
b3JhdGlvbnMpCit7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpw
YWludEluZm8uY29udGV4dCk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemUoa1RodW1ibmFpbEJv
cmRlckNvcm5lclJhZGl1cywga1RodW1ibmFpbEJvcmRlckNvcm5lclJhZGl1cyk7CisgICAgQ29s
b3IgcGljdHVyZUZyYW1lQ29sb3IgPSBidXR0b25SZW5kZXJlciA/IGJ1dHRvblJlbmRlcmVyLT5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKSA6
IENvbG9yKDc2LjBmLCA3Ni4wZiwgNzYuMGYpOworCisgICAgSW50UmVjdCB0aHVtYm5haWxQaWN0
dXJlRnJhbWVSZWN0ID0gcmVjdDsKKyAgICBJbnRSZWN0IHRodW1ibmFpbFJlY3QgPSByZWN0Owor
ICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3QoMiAqIGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0
aCwgMiAqIGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aCk7CisgICAgdGh1bWJuYWlsUmVjdC5t
b3ZlKGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aCwga1RodW1ibmFpbEJvcmRlclN0cm9rZVdp
ZHRoKTsKKworICAgIGlmIChmaWxlVXBsb2FkRGVjb3JhdGlvbnMgPT0gTXVsdGlwbGVGaWxlcykg
eworICAgICAgICAvLyBTbWFsbGVyIHRodW1ibmFpbHMgZm9yIG11bHRpcGxlIHNlbGVjdGlvbiBh
cHBlYXJhbmNlLgorICAgICAgICB0aHVtYm5haWxQaWN0dXJlRnJhbWVSZWN0LmNvbnRyYWN0KGtN
dWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUsIGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUp
OworICAgICAgICB0aHVtYm5haWxSZWN0LmNvbnRyYWN0KGtNdWx0aXBsZVRodW1ibmFpbFNocmlu
a1NpemUsIGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUpOworCisgICAgICAgIC8vIEJhY2tn
cm91bmQgcGljdHVyZSBmcmFtZSBhbmQgc2ltcGxlIGJhY2tncm91bmQgaWNvbiB3aXRoIGEgZ3Jh
ZGllbnQgbWF0Y2hpbmcgdGhlIGJ1dHRvbi4KKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZEltYWdl
Q29sb3IgPSBidXR0b25SZW5kZXJlciA/IENvbG9yKGJ1dHRvblJlbmRlcmVyLT5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkpIDog
Q29sb3IoMjA2LjBmLCAyMDYuMGYsIDIwNi4wZik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5maWxsUm91bmRlZFJlY3QodGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCwgY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgcGljdHVyZUZyYW1lQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3Qo
dGh1bWJuYWlsUmVjdCwgYmFja2dyb3VuZEltYWdlQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgICAgICB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIyKCpwYWludEluZm8uY29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAodGh1bWJuYWlsUmVjdCk7CisgICAgICAgICAgICBp
ZiAoYmFja2dyb3VuZEltYWdlQ29sb3IuaXNEYXJrKCkpCisgICAgICAgICAgICAgICAgZHJhd0F4
aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbnZleEdyYWRpZW50KSwg
dGh1bWJuYWlsUmVjdC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KHRodW1ibmFpbFJlY3QueCgpLCB0
aHVtYm5haWxSZWN0Lm1heFkoKSksIExpbmVhckludGVycG9sYXRpb24pOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFk
aWVudFdpdGhOYW1lKFNoYWRlR3JhZGllbnQpLCB0aHVtYm5haWxSZWN0LmxvY2F0aW9uKCksIEZs
b2F0UG9pbnQodGh1bWJuYWlsUmVjdC54KCksIHRodW1ibmFpbFJlY3QubWF4WSgpKSwgTGluZWFy
SW50ZXJwb2xhdGlvbik7CisgICAgICAgICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250
ZXh0LCBncmFkaWVudFdpdGhOYW1lKFNoaW5lR3JhZGllbnQpLCBGbG9hdFBvaW50KHRodW1ibmFp
bFJlY3QueCgpLCB0aHVtYm5haWxSZWN0Lm1heFkoKSksIHRodW1ibmFpbFJlY3QubG9jYXRpb24o
KSwgRXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIE1vdmUgdGhlIHJlY3RzIGZvciB0aGUgRm9yZWdyb3VuZCBwaWN0dXJlIGZy
YW1lIGFuZCBpY29uLgorICAgICAgICBpbnQgaW5zZXQgPSBrVmlzaWJsZUJhY2tncm91bmRJbWFn
ZVdpZHRoICsga1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRoOworICAgICAgICB0aHVtYm5haWxQ
aWN0dXJlRnJhbWVSZWN0Lm1vdmUoaW5zZXQsIGluc2V0KTsKKyAgICAgICAgdGh1bWJuYWlsUmVj
dC5tb3ZlKGluc2V0LCBpbnNldCk7CisgICAgfQorCisgICAgLy8gRm9yZWdyb3VuZCBwaWN0dXJl
IGZyYW1lIGFuZCBpY29uLgorICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUm91bmRlZFJlY3Qo
dGh1bWJuYWlsUGljdHVyZUZyYW1lUmVjdCwgY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSwgY29ybmVy
U2l6ZSwgY29ybmVyU2l6ZSwgcGljdHVyZUZyYW1lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGljb24tPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCB0aHVtYm5haWxSZWN0KTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK0NvbG9yIFJlbmRlclRoZW1lSU9TOjpwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudDsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVJT1M6OnBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xv
cjo6dHJhbnNwYXJlbnQ7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVJT1M6OnNob3VsZFNob3dQbGFj
ZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUlPUzo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCop
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRm9udFdlaWdodCBmcm9t
Q1RGb250V2VpZ2h0KGZsb2F0IGZvbnRXZWlnaHQpCit7CisgICAgaWYgKGZvbnRXZWlnaHQgPD0g
LTAuOCkKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQxMDA7CisgICAgZWxzZSBpZiAoZm9udFdl
aWdodCA8PSAtMC40KQorICAgICAgICByZXR1cm4gRm9udFdlaWdodDIwMDsKKyAgICBlbHNlIGlm
IChmb250V2VpZ2h0IDw9IC0wLjIpCisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MzAwOworICAg
IGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gMC4wKQorICAgICAgICByZXR1cm4gRm9udFdlaWdodDQw
MDsKKyAgICBlbHNlIGlmIChmb250V2VpZ2h0IDw9IDAuMikKKyAgICAgICAgcmV0dXJuIEZvbnRX
ZWlnaHQ1MDA7CisgICAgZWxzZSBpZiAoZm9udFdlaWdodCA8PSAwLjMpCisgICAgICAgIHJldHVy
biBGb250V2VpZ2h0NjAwOworICAgIGVsc2UgaWYgKGZvbnRXZWlnaHQgPD0gMC40KQorICAgICAg
ICByZXR1cm4gRm9udFdlaWdodDcwMDsKKyAgICBlbHNlIGlmIChmb250V2VpZ2h0IDw9IDAuNikK
KyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ4MDA7CisgICAgZWxzZSBpZiAoZm9udFdlaWdodCA8
PSAwLjgpCisgICAgICAgIHJldHVybiBGb250V2VpZ2h0OTAwOworCisgICAgcmV0dXJuIEZvbnRX
ZWlnaHROb3JtYWw7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OnN5c3RlbUZvbnQoQ1NTVmFs
dWVJRCB2YWx1ZUlELCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzeXN0ZW1Gb250Owor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGhlYWRsaW5lRm9udDsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBib2R5Rm9udDsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzdWJoZWFkbGluZUZvbnQ7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gZm9vdG5vdGVGb250
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGNhcHRpb24xRm9u
dDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uMkZv
bnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRIZWFk
bGluZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hv
cnRCb2R5Rm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBz
aG9ydFN1YmhlYWRsaW5lRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2Ny
aXB0aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9u
dERlc2NyaXB0aW9uPiBzaG9ydENhcHRpb24xRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Rm9udERlc2NyaXB0aW9uPiB0YWxsQm9keUZvbnQ7CisKKyAgICBzdGF0aWMgQ0ZTdHJpbmdS
ZWYgdXNlclRleHRTaXplID0gY29udGVudFNpemVDYXRlZ29yeSgpOworCisgICAgaWYgKHVzZXJU
ZXh0U2l6ZSAhPSBjb250ZW50U2l6ZUNhdGVnb3J5KCkpIHsKKyAgICAgICAgdXNlclRleHRTaXpl
ID0gY29udGVudFNpemVDYXRlZ29yeSgpOworCisgICAgICAgIGhlYWRsaW5lRm9udC5zZXRJc0Fi
c29sdXRlU2l6ZShmYWxzZSk7CisgICAgICAgIGJvZHlGb250LnNldElzQWJzb2x1dGVTaXplKGZh
bHNlKTsKKyAgICAgICAgc3ViaGVhZGxpbmVGb250LnNldElzQWJzb2x1dGVTaXplKGZhbHNlKTsK
KyAgICAgICAgZm9vdG5vdGVGb250LnNldElzQWJzb2x1dGVTaXplKGZhbHNlKTsKKyAgICAgICAg
Y2FwdGlvbjFGb250LnNldElzQWJzb2x1dGVTaXplKGZhbHNlKTsKKyAgICAgICAgY2FwdGlvbjJG
b250LnNldElzQWJzb2x1dGVTaXplKGZhbHNlKTsKKyAgICAgICAgc2hvcnRIZWFkbGluZUZvbnQu
c2V0SXNBYnNvbHV0ZVNpemUoZmFsc2UpOworICAgICAgICBzaG9ydEJvZHlGb250LnNldElzQWJz
b2x1dGVTaXplKGZhbHNlKTsKKyAgICAgICAgc2hvcnRTdWJoZWFkbGluZUZvbnQuc2V0SXNBYnNv
bHV0ZVNpemUoZmFsc2UpOworICAgICAgICBzaG9ydEZvb3Rub3RlRm9udC5zZXRJc0Fic29sdXRl
U2l6ZShmYWxzZSk7CisgICAgICAgIHNob3J0Q2FwdGlvbjFGb250LnNldElzQWJzb2x1dGVTaXpl
KGZhbHNlKTsKKyAgICAgICAgdGFsbEJvZHlGb250LnNldElzQWJzb2x1dGVTaXplKGZhbHNlKTsK
KyAgICB9CisKKyAgICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERlc2M7CisgICAgUmV0YWluUHRy
PENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yOworICAgIENGU3RyaW5nUmVmIHRl
eHRTdHlsZTsKKyAgICBzd2l0Y2ggKHZhbHVlSUQpIHsKKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVT
eXN0ZW1IZWFkbGluZToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZoZWFkbGluZUZvbnQ7CisgICAg
ICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZUhlYWRsaW5lOworICAgICAgICBpZiAo
IWhlYWRsaW5lRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0
b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHRleHRTdHls
ZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVB
cHBsZVN5c3RlbUJvZHk6CisgICAgICAgIGNhY2hlZERlc2MgPSAmYm9keUZvbnQ7CisgICAgICAg
IHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZUJvZHk7CisgICAgICAgIGlmICghYm9keUZv
bnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVzZXJUZXh0
U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1T
dWJoZWFkbGluZToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZzdWJoZWFkbGluZUZvbnQ7CisgICAg
ICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZVN1YmhlYWQ7CisgICAgICAgIGlmICgh
c3ViaGVhZGxpbmVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUodGV4dFN0
eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1
ZUFwcGxlU3lzdGVtRm9vdG5vdGU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmZm9vdG5vdGVGb250
OworICAgICAgICB0ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVGb290bm90ZTsKKyAgICAg
ICAgaWYgKCFmb290bm90ZUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0
ZXh0U3R5bGUsIHVzZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1ZhbHVlQXBwbGVTeXN0ZW1DYXB0aW9uMToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZjYXB0aW9u
MUZvbnQ7CisgICAgICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZUNhcHRpb24xOwor
ICAgICAgICBpZiAoIWNhcHRpb24xRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAg
Zm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0
eWxlKHRleHRTdHlsZSwgdXNlclRleHRTaXplLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTVmFsdWVBcHBsZVN5c3RlbUNhcHRpb24yOgorICAgICAgICBjYWNoZWREZXNjID0gJmNh
cHRpb24yRm9udDsKKyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlQ2FwdGlv
bjI7CisgICAgICAgIGlmICghY2FwdGlvbjJGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAg
ICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhU
ZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICAvLyBTaG9ydCB2ZXJzaW9uLgorICAgIGNhc2UgQ1NTVmFsdWVBcHBsZVN5c3RlbVNob3J0
SGVhZGxpbmU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmc2hvcnRIZWFkbGluZUZvbnQ7CisgICAg
ICAgIHRleHRTdHlsZSA9IGtDVFVJRm9udFRleHRTdHlsZVNob3J0SGVhZGxpbmU7CisgICAgICAg
IGlmICghc2hvcnRIZWFkbGluZUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZv
bnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHls
ZSh0ZXh0U3R5bGUsIHVzZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1ZhbHVlQXBwbGVTeXN0ZW1TaG9ydEJvZHk6CisgICAgICAgIGNhY2hlZERlc2MgPSAmc2hv
cnRCb2R5Rm9udDsKKyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlU2hvcnRC
b2R5OworICAgICAgICBpZiAoIXNob3J0Qm9keUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAg
ICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0
aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVzZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1TaG9ydFN1YmhlYWRsaW5lOgorICAgICAgICBj
YWNoZWREZXNjID0gJnNob3J0U3ViaGVhZGxpbmVGb250OworICAgICAgICB0ZXh0U3R5bGUgPSBr
Q1RVSUZvbnRUZXh0U3R5bGVTaG9ydFN1YmhlYWQ7CisgICAgICAgIGlmICghc2hvcnRTdWJoZWFk
bGluZUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0g
YWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZSh0ZXh0U3R5bGUsIHVz
ZXJUZXh0U2l6ZSwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQXBwbGVT
eXN0ZW1TaG9ydEZvb3Rub3RlOgorICAgICAgICBjYWNoZWREZXNjID0gJnNob3J0Rm9vdG5vdGVG
b250OworICAgICAgICB0ZXh0U3R5bGUgPSBrQ1RVSUZvbnRUZXh0U3R5bGVTaG9ydEZvb3Rub3Rl
OworICAgICAgICBpZiAoIXNob3J0Rm9vdG5vdGVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAg
ICAgICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdp
dGhUZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtU2hvcnRDYXB0aW9uMToKKyAgICAgICAgY2Fj
aGVkRGVzYyA9ICZzaG9ydENhcHRpb24xRm9udDsKKyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlG
b250VGV4dFN0eWxlU2hvcnRDYXB0aW9uMTsKKyAgICAgICAgaWYgKCFzaG9ydENhcHRpb24xRm9u
dC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0b3IgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHRleHRTdHlsZSwgdXNlclRleHRT
aXplLCAwKSk7CisgICAgICAgIGJyZWFrOworCisgICAgLy8gVGFsbCB2ZXJzaW9uLgorICAgIGNh
c2UgQ1NTVmFsdWVBcHBsZVN5c3RlbVRhbGxCb2R5OgorICAgICAgICBjYWNoZWREZXNjID0gJnRh
bGxCb2R5Rm9udDsKKyAgICAgICAgdGV4dFN0eWxlID0ga0NUVUlGb250VGV4dFN0eWxlVGFsbEJv
ZHk7CisgICAgICAgIGlmICghdGFsbEJvZHlGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAg
ICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhU
ZXh0U3R5bGUodGV4dFN0eWxlLCB1c2VyVGV4dFNpemUsIDApKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICB0ZXh0U3R5bGUgPSBrQ1RGb250RGVzY3JpcHRvclRleHRT
dHlsZUVtcGhhc2l6ZWQ7CisgICAgICAgIGNhY2hlZERlc2MgPSAmc3lzdGVtRm9udDsKKyAgICAg
ICAgaWYgKCFzeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICBmb250RGVz
Y3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUZvclVJVHlwZShrQ1RGb250
U3lzdGVtRm9udFR5cGUsIDAsIG51bGxwdHIpKTsKKyAgICB9CisKKyAgICBpZiAoZm9udERlc2Ny
aXB0b3IpIHsKKyAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9udCA9IGFkb3B0Q0YoQ1RG
b250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCAwLCBudWxs
cHRyKSk7CisgICAgICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAg
ICAgICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1p
bHkpOworICAgICAgICBjYWNoZWREZXNjLT5zZXRPbmVGYW1pbHkodGV4dFN0eWxlKTsKKyAgICAg
ICAgY2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZ2V0KCkp
KTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0V2VpZ2h0KGZyb21DVEZvbnRXZWlnaHQoRm9udENh
Y2hlOjp3ZWlnaHRPZkNURm9udChmb250LmdldCgpKSkpOworICAgICAgICBjYWNoZWREZXNjLT5z
ZXRJdGFsaWMoMCk7CisgICAgfQorICAgIGZvbnREZXNjcmlwdGlvbiA9ICpjYWNoZWREZXNjOwor
fQorCisjaWYgRU5BQkxFKFZJREVPKQorU3RyaW5nIFJlbmRlclRoZW1lSU9TOjptZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpCit7CisjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKKyAg
ICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNpT1NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXpl
b2YobWVkaWFDb250cm9sc2lPU1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyNlbHNlCisgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisjZW5kaWYKK30KKworU3RyaW5nIFJlbmRlclRoZW1lSU9TOjpt
ZWRpYUNvbnRyb2xzU2NyaXB0KCkKK3sKKyNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBU
KQorICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0FwcGxlSmF2YVNjcmlwdCwgc2l6ZW9m
KG1lZGlhQ29udHJvbHNBcHBsZUphdmFTY3JpcHQpKTsKKyNlbHNlCisgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKK30KKworI2Vu
ZGlmIC8vUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaAppbmRleCA0YjZjZmViYWU2MmFhMTZmZDU4NDUyOGQyZmMyZjZmMjFmOGQ5N2U3Li41NjJh
ZGEyNmRkNDM0YjNhYTA5NjgwZDVlYzkwYWQ3OGVkMmY4ZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaApAQCAtMTksNiArMTksNyBAQAogICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisjaWYgIVBMQVRGT1JNKElPUykKIAogI2lmbmRl
ZiBSZW5kZXJUaGVtZU1hY19oCiAjZGVmaW5lIFJlbmRlclRoZW1lTWFjX2gKQEAgLTIzNSwzICsy
MzYsNSBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUmVu
ZGVyVGhlbWVNYWNfaAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAyZGQyZGY5OTU2NTcxODZiYjhhZDU1
OWZkZGIxYTUwYzkxMjc5OTU0Li5iYjU0Y2YxNmIyMzFiZjhjYzc2NmQzMjA4N2MzMjcwOGI2NmI1
YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0x
Niw2ICsxNiw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KKyNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIlJlbmRlclRoZW1lTWFjLmgiCkBAIC0xOTMzLDMgKzE5MzQsNSBAQCBTdHJpbmcgUmVuZGVy
VGhlbWVNYWM6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwg
Y29uc3QgRm9udAogCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlk
ZW8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAppbmRleCBl
MzFjNDZmMTExYmJhMjQzZThiODI3MDIwOWE4YWI1MzEwYmRiYzgyLi5mZTdkM2VhNDI2Y2UyN2Fi
YjM4NzIyMmMyNTAwZjQ4ZWRjYzMyYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlkZW8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHAKQEAgLTExNiwxMSArMTE2LDEzIEBAIExheW91dFNpemUgUmVuZGVyVmlkZW86
OmNhbGN1bGF0ZUludHJpbnNpY1NpemUoKQogICAgIGlmICh2aWRlb0VsZW1lbnQoKS5zaG91bGRE
aXNwbGF5UG9zdGVySW1hZ2UoKSAmJiAhbV9jYWNoZWRJbWFnZVNpemUuaXNFbXB0eSgpICYmICFp
bWFnZVJlc291cmNlKCktPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVk
SW1hZ2VTaXplOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBXaGVuIHRoZSBuYXR1cmFs
IHNpemUgb2YgdGhlIHZpZGVvIGlzIHVuYXZhaWxhYmxlLCB3ZSB1c2UgdGhlIHByb3ZpZGVkCiAg
ICAgLy8gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mIHRoZSB2aWRlbyBlbGVtZW50IGFz
IHRoZSBpbnRyaW5zaWMgc2l6ZSB1bnRpbAogICAgIC8vIGJldHRlciB2YWx1ZXMgYmVjb21lIGF2
YWlsYWJsZS4KICAgICBpZiAodmlkZW9FbGVtZW50KCkuaGFzQXR0cmlidXRlKHdpZHRoQXR0cikg
JiYgdmlkZW9FbGVtZW50KCkuaGFzQXR0cmlidXRlKGhlaWdodEF0dHIpKQogICAgICAgICByZXR1
cm4gTGF5b3V0U2l6ZSh2aWRlb0VsZW1lbnQoKS53aWR0aCgpLCB2aWRlb0VsZW1lbnQoKS5oZWln
aHQoKSk7CisjZW5kaWYKIAogICAgIC8vIDx2aWRlbz4gaW4gc3RhbmRhbG9uZSBtZWRpYSBkb2N1
bWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlIGRlZmF1bHQgMzAweDE1MAogICAgIC8vIHNpemUgc2lu
Y2UgdGhleSBhbHNvIGhhdmUgYXVkaW8tb25seSBmaWxlcy4gQnkgc2V0dGluZyB0aGUgaW50cmlu
c2ljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggN2I5M2YwM2I4
MTFjNjI3OTZhZDEwZjA1ZWYzZjRhMmYwMGZkODQ1MC4uN2U1NmZjMjViMGJhNmY1NmRkZjc2ZGUw
NGE0MmU4NTdlYjYzNjY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cApAQCAtMTM3LDYgKzEzNywxMSBAQCBMYXlvdXRVbml0IFJlbmRlclZpZXc6OmF2YWlsYWJsZUxv
Z2ljYWxIZWlnaHQoQXZhaWxhYmxlTG9naWNhbEhlaWdodFR5cGUpIGNvbnN0CiAgICAgLy8gSWYg
d2UgaGF2ZSBjb2x1bW5zLCB0aGVuIHRoZSBhdmFpbGFibGUgbG9naWNhbCBoZWlnaHQgaXMgcmVk
dWNlZCB0byB0aGUgY29sdW1uIGhlaWdodC4KICAgICBpZiAoaGFzQ29sdW1ucygpKQogICAgICAg
ICByZXR1cm4gY29sdW1uSW5mbygpLT5jb2x1bW5IZWlnaHQoKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzcxNjY4MDg+LgorICAgIGlm
IChkb2N1bWVudCgpLmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBmcmFtZVZpZXcoKS51c2VGaXhlZExh
eW91dCgpKQorICAgICAgICByZXR1cm4gZnJhbWVWaWV3KCkuZml4ZWRMYXlvdXRTaXplKCkuaGVp
Z2h0KCk7CisjZW5kaWYKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZy
YW1lVmlldygpLnZpc2libGVIZWlnaHQoKSA6IGZyYW1lVmlldygpLnZpc2libGVXaWR0aCgpOwog
fQogCkBAIC0zNjMsNiArMzY4LDEzIEBAIExheW91dFVuaXQgUmVuZGVyVmlldzo6cGFnZU9yVmll
d0xvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiB2aWV3TG9naWNhbEhlaWdodCgpOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGlubGluZSBMYXlvdXRTaXplIGZpeGVkUG9z
aXRpb25PZmZzZXQoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCit7CisgICAgcmV0dXJuIGZy
YW1lVmlldy51c2VDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpID8gKGZyYW1lVmlldy5j
dXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpLmxvY2F0aW9uKCkgLSBMYXlvdXRQb2ludCgp
KSA6IGZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0KCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJW
aWV3OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSwgTWFwQ29vcmRp
bmF0ZXNGbGFncyBtb2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QKIHsKICAgICAvLyBJZiBhIGNv
bnRhaW5lciB3YXMgc3BlY2lmaWVkLCBhbmQgd2FzIG5vdCAwIG9yIHRoZSBSZW5kZXJWaWV3LApA
QCAtMzc3LDcgKzM4OSwxMSBAQCB2b2lkIFJlbmRlclZpZXc6Om1hcExvY2FsVG9Db250YWluZXIo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaQogICAgIH0KICAgICAK
ICAgICBpZiAobW9kZSAmIElzRml4ZWQpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB0cmFu
c2Zvcm1TdGF0ZS5tb3ZlKGZpeGVkUG9zaXRpb25PZmZzZXQobV9mcmFtZVZpZXcpKTsKKyNlbHNl
CiAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoZnJhbWVWaWV3KCkuc2Nyb2xsT2Zmc2V0Rm9y
Rml4ZWRQb3NpdGlvbigpKTsKKyNlbmRpZgogfQogCiBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRl
clZpZXc6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25z
dApAQCAtMzg2LDcgKzQwMiwxMSBAQCBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclZpZXc6OnB1
c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iagogICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkIGhhdmUgZm91bmQgaXQgYnkgbm93LgogICAgIEFTU0VSVF9BUkcoYW5jZXN0
b3JUb1N0b3BBdCwgIWFuY2VzdG9yVG9TdG9wQXQgfHwgYW5jZXN0b3JUb1N0b3BBdCA9PSB0aGlz
KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBMYXlvdXRTaXplIHNjcm9sbE9mZnNldCA9IGZp
eGVkUG9zaXRpb25PZmZzZXQoZnJhbWVWaWV3KCkpOworI2Vsc2UKICAgICBMYXlvdXRTaXplIHNj
cm9sbE9mZnNldCA9IGZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsK
KyNlbmRpZgogCiAgICAgaWYgKCFhbmNlc3RvclRvU3RvcEF0ICYmIHNob3VsZFVzZVRyYW5zZm9y
bUZyb21Db250YWluZXIoMCkpIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKQEAg
LTQwMSw3ICs0MjEsMTEgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJWaWV3OjpwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmoKIHZvaWQgUmVuZGVyVmll
dzo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoTWFwQ29vcmRpbmF0ZXNGbGFncyBtb2RlLCBUcmFu
c2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKG1vZGUgJiBJc0Zp
eGVkKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShmaXhl
ZFBvc2l0aW9uT2Zmc2V0KGZyYW1lVmlldygpKSk7CisjZWxzZQogICAgICAgICB0cmFuc2Zvcm1T
dGF0ZS5tb3ZlKGZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSk7Cisj
ZW5kaWYKIAogICAgIGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKDApKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CkBA
IC01NzIsNyArNTk2LDEyIEBAIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUo
Y29uc3QgTGF5b3V0UmVjdCYgdXIsIGJvb2wgaW1tZWRpYXRlKSBjb25zCiAgICAgICAgIGZyYW1l
VmlldygpLnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKHBpeGVsU25hcHBlZEludFJlY3QodXIpLCBp
bW1lZGlhdGUpOwogICAgIGVsc2UgaWYgKFJlbmRlckJveCogb2JqID0gZWx0LT5yZW5kZXJCb3go
KSkgewogICAgICAgICBMYXlvdXRSZWN0IHZyID0gdmlld1JlY3QoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIC8vIERvbid0IGNsaXAgdXNpbmcgdGhlIHZpc2libGUgcmVjdCBzaW5jZSBj
bGlwcGluZyBpcyBoYW5kbGVkIGF0IGEgaGlnaGVyIGxldmVsIG9uIGlQaG9uZS4KKyAgICAgICAg
TGF5b3V0UmVjdCByID0gdXI7CisjZWxzZQogICAgICAgICBMYXlvdXRSZWN0IHIgPSBpbnRlcnNl
Y3Rpb24odXIsIHZyKTsKKyNlbmRpZgogICAgICAgICAKICAgICAgICAgLy8gU3VidHJhY3Qgb3V0
IHRoZSBjb250ZW50c1ggYW5kIGNvbnRlbnRzWSBvZmZzZXRzIHRvIGdldCBvdXIgY29vcmRzIHdp
dGhpbiB0aGUgdmlld2luZwogICAgICAgICAvLyByZWN0YW5nbGUuCkBAIC02MzYsOCArNjY1LDEz
IEBAIHZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250CiAgICAgICAgICAgICByZWN0LnNldFgodmlld1dp
ZHRoKCkgLSByZWN0Lm1heFgoKSk7CiAgICAgfQogCi0gICAgaWYgKGZpeGVkKQorICAgIGlmIChm
aXhlZCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgcmVjdC5tb3ZlKGZpeGVkUG9zaXRp
b25PZmZzZXQoZnJhbWVWaWV3KCkpKTsKKyNlbHNlCiAgICAgICAgIHJlY3QubW92ZShmcmFtZVZp
ZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkpOworI2VuZGlmCisgICAgfQogICAg
ICAgICAKICAgICAvLyBBcHBseSBvdXIgdHJhbnNmb3JtIGlmIHdlIGhhdmUgb25lIChiZWNhdXNl
IG9mIGZ1bGwgcGFnZSB6b29taW5nKS4KICAgICBpZiAoIXJlcGFpbnRDb250YWluZXIgJiYgbGF5
ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKSkKQEAgLTExNTYsNiArMTE5MCwyNCBAQCBGbG93
VGhyZWFkQ29udHJvbGxlciYgUmVuZGVyVmlldzo6Zmxvd1RocmVhZENvbnRyb2xsZXIoKQogICAg
IHJldHVybiAqbV9mbG93VGhyZWFkQ29udHJvbGxlcjsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
K3N0YXRpYyBib29sIGlzRml4ZWRQb3NpdGlvbkluVmlld3BvcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIpCit7CisgICAgcmV0dXJu
IChyZW5kZXJlci5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikgJiYgcmVuZGVy
ZXIuY29udGFpbmVyKCkgPT0gY29udGFpbmVyOworfQorCitib29sIFJlbmRlclZpZXc6Omhhc0N1
c3RvbUZpeGVkUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgQ29udGFpbmlu
Z0Jsb2NrQ2hlY2sgY2hlY2tDb250YWluZXIpIGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZVZpZXco
KS51c2VDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoY2hlY2tDb250YWluZXIgPT0gQ2hlY2tDb250YWluaW5nQmxvY2spCisg
ICAgICAgIHJldHVybiBpc0ZpeGVkUG9zaXRpb25JblZpZXdwb3J0KHJlbmRlcmVyLCB0aGlzKTsK
KworICAgIHJldHVybiByZW5kZXJlci5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlv
bjsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvckN1cnJl
bnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogewogICAgIGlmICghbV9m
bG93VGhyZWFkQ29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmlu
ZGV4IGUyYjI4NDI3ZjdhMTA4NjcyNmYyNjg2MTY5OGU0Y2JhMWUwMTZhNGIuLjZmM2JiN2RkNGUw
NzUxNDhhYjU2ZmJkZjU1ZTFiNDYwZTcyMDlhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaApAQCAtMjA0LDYgKzIwNCwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpIE9WRVJSSURFOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGVudW0gQ29udGFpbmlu
Z0Jsb2NrQ2hlY2sgeyBDaGVja0NvbnRhaW5pbmdCbG9jaywgRG9udENoZWNrQ29udGFpbmluZ0Js
b2NrIH07CisgICAgYm9vbCBoYXNDdXN0b21GaXhlZFBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIENvbnRhaW5pbmdCbG9ja0NoZWNrID0gQ2hlY2tDb250YWluaW5nQmxvY2spIGNvbnN0Owor
I2VuZGlmCisKICAgICBJbnRlcnZhbEFyZW5hKiBpbnRlcnZhbEFyZW5hKCk7CiAKICAgICBJbnRT
aXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAppbmRleCBmYzIwOTVkMDhmYjE4OGI1ZjYwMjQ4NzU0MmM1MDg4YzM3MTY4YTA4
Li4xYWZkOTE2YmM1ODU4ZjFlM2EwZWVjMzYxZTJjYjRmZjM0ZGZhYTVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtOTEsNiArOTEsMTEgQEAgUmVuZGVy
V2lkZ2V0OjpSZW5kZXJXaWRnZXQoSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50LCBQYXNz
UmVmPFJlbmRlclN0eWxlPgogCiB2b2lkIFJlbmRlcldpZGdldDo6d2lsbEJlRGVzdHJveWVkKCkK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGhhc0xheWVyKCkpCisgICAgICAgIGxheWVy
KCktPndpbGxCZURlc3Ryb3llZCgpOworI2VuZGlmCisKICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7CiAgICAgICAgIGNh
Y2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcy0+cGFyZW50KCkpOwogICAgICAgICBjYWNoZS0+cmVt
b3ZlKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmlu
ZGV4IDE4ZDczODkxZDkyZDBlNWE2NmFkYzJlMGRlMTgxZDE2OWY2MWU4ZjguLjRmOWU5MmI5ZDBm
ZTVmMzQwZTFiZjNlZDU3NTRmNWY5MjY4NjU5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKQEAgLTg0Niw3ICs4NDYsMTEgQEAgdm9pZCBSb290SW5saW5l
Qm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93
QW5kRmFsbGIKICAgICBib29sIHNldFVzZWRGb250V2l0aExlYWRpbmcgPSBmYWxzZTsKIAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBib3hMaW5lU3R5bGUgPSBib3gtPmxpbmVTdHlsZSgpOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICBpZiAodXNlZEZvbnRzICYmICF1c2VkRm9udHMtPmlzRW1wdHko
KSAmJiAoaW5jbHVkZUZvbnQgfHwgKGJveExpbmVTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2
ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkgJiYgIWJveC0+cmVuZGVyZXIoKS5kb2N1bWVudCgpLnNl
dHRpbmdzKCktPmFsd2F5c1VzZUJhc2VsaW5lT2ZQcmltYXJ5Rm9udCgpKSB7CisjZWxzZQogICAg
IGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8
fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRp
bmcpKSkgeworI2VuZGlmCiAgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKGJveExpbmVTdHlsZS5m
b250KCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNl
ZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZv
bnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJpY3MoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCmluZGV4IDU5M2ZlZWYxYWJjOGQzYTJjZjIxYzVl
YTk0Y2UyMDcyOTIxNTIwYTEuLjcwNGRmZmViY2U3N2NkMTJiNzhiY2JlZmZmMzgzMjVkMTZkYmMy
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcApAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZp
Y2VzLmg+CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="242072"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>